diff --git a/build.gradle b/build.gradle index f316682..5f60370 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '1.15-SNAPSHOT'; + id 'net.fabricmc.fabric-loom' version "${loom_version}" id 'maven-publish' } @@ -17,13 +17,12 @@ repositories { dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}" - modImplementation include('net.kyori:adventure-platform-fabric:6.8.0') + implementation include('net.kyori:adventure-platform-fabric:7.1.1') - modRuntimeOnly("me.djtheredstoner:DevAuth-fabric:1.2.2") + runtimeOnly("me.djtheredstoner:DevAuth-fabric:1.2.2") } processResources { @@ -39,7 +38,7 @@ processResources { } } -def targetJavaVersion = 21 +def targetJavaVersion = 25 tasks.withType(JavaCompile).configureEach { // ensure that the encoding is set to UTF-8, no matter what the system default is // this fixes some edge cases with special characters not displaying correctly diff --git a/gradle.properties b/gradle.properties index ae8c154..c157c11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,9 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties -minecraft_version=1.21.11 -yarn_mappings=1.21.11+build.4 -loader_version=0.18.4 +minecraft_version=26.2 +loader_version=0.19.3 +loom_version=1.17-SNAPSHOT # Mod Properties mod_version=1.0.0 @@ -11,4 +11,4 @@ maven_group=io.github.redvortexdev archives_base_name=Flint # Dependencies -fabric_api_version=0.141.3+1.21.11 +fabric_api_version=0.157.0+26.2 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bad7c24..69dd0d0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/dev/dfonline/flint/Flint.java b/src/main/java/dev/dfonline/flint/Flint.java index 9646953..ed09e82 100644 --- a/src/main/java/dev/dfonline/flint/Flint.java +++ b/src/main/java/dev/dfonline/flint/Flint.java @@ -27,11 +27,13 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; -import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderEvents; +import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelExtractionEvents; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderEvents; import net.kyori.adventure.platform.modcommon.MinecraftAudiences; import net.kyori.adventure.platform.modcommon.MinecraftClientAudiences; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.Minecraft; +import net.minecraft.resources.Identifier; import java.util.Arrays; @@ -43,10 +45,10 @@ public class Flint implements ClientModInitializer { public static final MinecraftAudiences AUDIENCE = MinecraftClientAudiences.builder().build(); private static final Logger LOGGER = Logger.of(Flint.class); - private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final Minecraft CLIENT = Minecraft.getInstance(); private static final User user = new User(); - public static MinecraftClient getClient() { + public static Minecraft getClient() { return CLIENT; } @@ -94,7 +96,7 @@ private void registerEventCallbacks() { ) ); - HudRenderCallback.EVENT.register((drawContext, renderTickCounter) -> + HudElementRegistry.addLast(Identifier.fromNamespaceAndPath(MOD_ID, "features"), (drawContext, renderTickCounter) -> FEATURE_MANAGER.getByTrait(FeatureTraitType.RENDERED).forEach(feature -> ((RenderedFeature) feature).render(drawContext, renderTickCounter) ) @@ -106,49 +108,49 @@ private void registerEventCallbacks() { ) ); - WorldRenderEvents.AFTER_BLOCK_OUTLINE_EXTRACTION.register((context, hit) -> + LevelExtractionEvents.AFTER_BLOCK_OUTLINE_EXTRACTION.register((context, hit) -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderAfterBlockOutlineExtraction(context, hit) ) ); - WorldRenderEvents.END_EXTRACTION.register(context -> + LevelExtractionEvents.END_EXTRACTION.register(context -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderEndExtraction(context) ) ); - WorldRenderEvents.START_MAIN.register(context -> + LevelRenderEvents.START_MAIN.register(context -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderStartMain(context) ) ); - WorldRenderEvents.BEFORE_ENTITIES.register(context -> + LevelRenderEvents.COLLECT_SUBMITS.register(context -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderBeforeEntities(context) ) ); - WorldRenderEvents.AFTER_ENTITIES.register(context -> + LevelRenderEvents.AFTER_SOLID_FEATURES.register(context -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderAfterEntities(context) ) ); - WorldRenderEvents.BEFORE_DEBUG_RENDER.register(context -> + LevelRenderEvents.BEFORE_GIZMOS.register(context -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderBeforeDebugRender(context) ) ); - WorldRenderEvents.BEFORE_TRANSLUCENT.register(context -> + LevelRenderEvents.BEFORE_TRANSLUCENT_TERRAIN.register(context -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderBeforeTranslucent(context) ) ); - WorldRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, outlineRenderState) -> { + LevelRenderEvents.BEFORE_BLOCK_OUTLINE.register((context, outlineRenderState) -> { boolean shouldRender = true; for (FeatureTrait feature : FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER)) { if (((WorldRenderFeature) feature).worldRenderBeforeBlockOutline(context, outlineRenderState) == EventResult.CANCEL) { @@ -159,7 +161,7 @@ private void registerEventCallbacks() { return shouldRender; }); - WorldRenderEvents.END_MAIN.register(context -> + LevelRenderEvents.END_MAIN.register(context -> FEATURE_MANAGER.getByTrait(FeatureTraitType.WORLD_RENDER).forEach(feature -> ((WorldRenderFeature) feature).worldRenderEndMain(context) ) diff --git a/src/main/java/dev/dfonline/flint/User.java b/src/main/java/dev/dfonline/flint/User.java index e98cfef..b18c2e4 100644 --- a/src/main/java/dev/dfonline/flint/User.java +++ b/src/main/java/dev/dfonline/flint/User.java @@ -7,7 +7,7 @@ import dev.dfonline.flint.hypercube.Node; import dev.dfonline.flint.hypercube.Plot; import dev.dfonline.flint.util.message.Message; -import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.client.player.LocalPlayer; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -22,8 +22,8 @@ public final class User { private @Nullable Node node; private int nodeId; - public ClientPlayerEntity getPlayer() { - ClientPlayerEntity player = Flint.getClient().player; + public LocalPlayer getPlayer() { + LocalPlayer player = Flint.getClient().player; if (player == null) { throw new NullPointerException("Player is null, User#getPlayer should only be used as a shorthand when it is known that the player is not null."); diff --git a/src/main/java/dev/dfonline/flint/data/DFItem.java b/src/main/java/dev/dfonline/flint/data/DFItem.java index 31899ab..d52471a 100644 --- a/src/main/java/dev/dfonline/flint/data/DFItem.java +++ b/src/main/java/dev/dfonline/flint/data/DFItem.java @@ -6,16 +6,15 @@ import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.ContainerComponent; -import net.minecraft.component.type.CustomModelDataComponent; -import net.minecraft.component.type.DyedColorComponent; -import net.minecraft.component.type.LoreComponent; -import net.minecraft.component.type.ProfileComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.registry.Registry; -import net.minecraft.text.Text; +import net.minecraft.core.component.DataComponents; +import net.minecraft.network.chat.Component; import net.minecraft.util.Unit; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomModelData; +import net.minecraft.world.item.component.DyedItemColor; +import net.minecraft.world.item.component.ItemContainerContents; +import net.minecraft.world.item.component.ItemLore; +import net.minecraft.world.item.component.ResolvableProfile; import org.jetbrains.annotations.Nullable; import java.util.HashMap; @@ -125,7 +124,7 @@ public boolean hasHypercubeKey(String key) { */ public ItemStack getItemStack() { if (this.data != null) { - this.item.set(DataComponentTypes.CUSTOM_DATA, this.getItemData().toComponent()); + this.item.set(DataComponents.CUSTOM_DATA, this.getItemData().toComponent()); } return this.item; } @@ -144,8 +143,8 @@ public PublicBukkitValues getPublicBukkitValues() { * * @return The lore of the item. */ - public List getLore() { - LoreComponent loreComponent = this.item.get(DataComponentTypes.LORE); + public List getLore() { + ItemLore loreComponent = this.item.get(DataComponents.LORE); if (loreComponent == null) { return List.of(); } @@ -157,8 +156,8 @@ public List getLore() { * * @param lore The new lore to set. */ - public void setLore(List lore) { - this.item.set(DataComponentTypes.LORE, new LoreComponent(lore)); + public void setLore(List lore) { + this.item.set(DataComponents.LORE, new ItemLore(lore)); } /** @@ -166,8 +165,8 @@ public void setLore(List lore) { * * @return The name of the item. */ - public Text getName() { - return this.item.getName(); + public Component getName() { + return this.item.getHoverName(); } /** @@ -175,8 +174,8 @@ public Text getName() { * * @param name The new name to set. */ - public void setName(Text name) { - this.item.set(DataComponentTypes.CUSTOM_NAME, name); + public void setName(Component name) { + this.item.set(DataComponents.CUSTOM_NAME, name); } // Since this is currently unused we can keep it that way for now @@ -197,7 +196,7 @@ public void setName(Text name) { * @param color The new dye color to set. */ public void setDyeColor(int color) { - this.item.set(DataComponentTypes.DYED_COLOR, new DyedColorComponent(color)); + this.item.set(DataComponents.DYED_COLOR, new DyedItemColor(color)); } /** @@ -206,7 +205,7 @@ public void setDyeColor(int color) { * @param modelData The new custom model data to set. */ public void setCustomModelData(int modelData) { - this.item.set(DataComponentTypes.CUSTOM_MODEL_DATA, new CustomModelDataComponent(List.of((float) modelData), List.of(), List.of(), List.of())); + this.item.set(DataComponents.CUSTOM_MODEL_DATA, new CustomModelData(List.of((float) modelData), List.of(), List.of(), List.of())); } /** @@ -220,14 +219,14 @@ public void setProfile(UUID uuid, String value, String signature) { Multimap map = ImmutableMultimap.builder() .put("textures", new Property("textures", value, signature)) .build(); - this.item.set(DataComponentTypes.PROFILE, ProfileComponent.ofStatic(new GameProfile(uuid, value, new PropertyMap(map)))); + this.item.set(DataComponents.PROFILE, ResolvableProfile.createResolved(new GameProfile(uuid, value, new PropertyMap(map)))); } /** * Removes the item's data. */ public void removeItemData() { - this.item.remove(DataComponentTypes.CUSTOM_DATA); + this.item.remove(DataComponents.CUSTOM_DATA); this.data = null; } @@ -240,8 +239,8 @@ public void removeItemData() { * @return The container of the item. */ @Nullable - public ContainerComponent getContainer() { - return this.item.get(DataComponentTypes.CONTAINER); + public ItemContainerContents getContainer() { + return this.item.get(DataComponents.CONTAINER); } } diff --git a/src/main/java/dev/dfonline/flint/data/ItemData.java b/src/main/java/dev/dfonline/flint/data/ItemData.java index b93abbf..c0f8452 100644 --- a/src/main/java/dev/dfonline/flint/data/ItemData.java +++ b/src/main/java/dev/dfonline/flint/data/ItemData.java @@ -1,14 +1,14 @@ package dev.dfonline.flint.data; -import net.minecraft.component.DataComponentTypes; -import net.minecraft.component.type.NbtComponent; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; +import net.minecraft.core.component.DataComponents; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.CustomData; import org.jetbrains.annotations.Nullable; public class ItemData { - private NbtCompound customData; + private CompoundTag customData; private PublicBukkitValues publicBukkitValues; /** @@ -18,9 +18,9 @@ public class ItemData { * @implNote Most operations won't work if the item doesn't have custom data. */ public ItemData(ItemStack item) { - NbtComponent customDataComponent = item.get(DataComponentTypes.CUSTOM_DATA); + CustomData customDataComponent = item.get(DataComponents.CUSTOM_DATA); if (customDataComponent != null) { - this.customData = customDataComponent.copyNbt(); + this.customData = customDataComponent.copyTag(); } } @@ -28,7 +28,7 @@ public ItemData(ItemStack item) { * Creates an ItemData with an existing empty NbtCompound. */ private ItemData() { - this.customData = new NbtCompound(); + this.customData = new CompoundTag(); } /** @@ -37,10 +37,10 @@ private ItemData() { * @return The NBT Compound of the CUSTOM_DATA item component. * @apiNote This should only be used in very specific cases; the entire point of this class is to abstract the NBT data. */ - public NbtCompound getNbt() { + public CompoundTag getNbt() { // Should only be used in very specific cases, the entire point of this class is to abstract the NBT data. if (this.customData == null) { - this.customData = new NbtCompound(); + this.customData = new CompoundTag(); } if (this.publicBukkitValues != null) { this.customData.put(PublicBukkitValues.PUBLIC_BUKKIT_VALUES_KEY, this.publicBukkitValues.getNbt()); @@ -173,8 +173,8 @@ public boolean hasHypercubeKey(String key) { * @return The NbtComponent. * @apiNote This should only be used in very specific cases; the entire point of this class is to abstract the NBT data. */ - public NbtComponent toComponent() { - return NbtComponent.of(this.getNbt()); + public CustomData toComponent() { + return CustomData.of(this.getNbt()); } } diff --git a/src/main/java/dev/dfonline/flint/data/PublicBukkitValues.java b/src/main/java/dev/dfonline/flint/data/PublicBukkitValues.java index 299b924..41f542b 100644 --- a/src/main/java/dev/dfonline/flint/data/PublicBukkitValues.java +++ b/src/main/java/dev/dfonline/flint/data/PublicBukkitValues.java @@ -1,7 +1,7 @@ package dev.dfonline.flint.data; import dev.dfonline.flint.data.value.DataValue; -import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.Nullable; import java.util.Optional; @@ -21,9 +21,9 @@ public final class PublicBukkitValues { */ private static final String HYPERCUBE_KEY_PREFIX = "hypercube:"; - private final NbtCompound publicBukkitValues; + private final CompoundTag publicBukkitValues; - private PublicBukkitValues(NbtCompound publicBukkitValues) { + private PublicBukkitValues(CompoundTag publicBukkitValues) { this.publicBukkitValues = publicBukkitValues; } @@ -36,11 +36,11 @@ private PublicBukkitValues(NbtCompound publicBukkitValues) { */ @Nullable public static PublicBukkitValues fromItemData(ItemData data) { - NbtCompound customData = data.getNbt(); + CompoundTag customData = data.getNbt(); if (customData == null) { return null; } - Optional publicBukkitValues = customData.getCompound(PUBLIC_BUKKIT_VALUES_KEY); + Optional publicBukkitValues = customData.getCompound(PUBLIC_BUKKIT_VALUES_KEY); return publicBukkitValues.map(PublicBukkitValues::new).orElse(null); } @@ -50,8 +50,8 @@ public static PublicBukkitValues fromItemData(ItemData data) { * @return The new empty PublicBukkitValues. */ public static PublicBukkitValues getEmpty() { - NbtCompound empty = new NbtCompound(); - empty.put(PUBLIC_BUKKIT_VALUES_KEY, new NbtCompound()); + CompoundTag empty = new CompoundTag(); + empty.put(PUBLIC_BUKKIT_VALUES_KEY, new CompoundTag()); return new PublicBukkitValues(empty); } @@ -61,7 +61,7 @@ public static PublicBukkitValues getEmpty() { * @return The NbtCompound of the PublicBukkitValues. * @apiNote This should only be used in very specific cases; the entire point of this class is to abstract the NBT data. */ - public NbtCompound getNbt() { + public CompoundTag getNbt() { return this.publicBukkitValues; } @@ -101,7 +101,7 @@ public DataValue getHypercubeValue(String key) { * @return The hypercube keys. */ public Set getHypercubeKeys() { - return this.publicBukkitValues.getKeys().stream().filter(key -> key.startsWith(HYPERCUBE_KEY_PREFIX)).map(key -> key.substring(HYPERCUBE_KEY_PREFIX.length())).collect(Collectors.toSet()); + return this.publicBukkitValues.keySet().stream().filter(key -> key.startsWith(HYPERCUBE_KEY_PREFIX)).map(key -> key.substring(HYPERCUBE_KEY_PREFIX.length())).collect(Collectors.toSet()); } /** @@ -110,7 +110,7 @@ public Set getHypercubeKeys() { * @return The keys. */ public Set getKeys() { - return this.publicBukkitValues.getKeys(); + return this.publicBukkitValues.keySet(); } /** diff --git a/src/main/java/dev/dfonline/flint/data/value/DataValue.java b/src/main/java/dev/dfonline/flint/data/value/DataValue.java index 3478c8e..dabd7b6 100644 --- a/src/main/java/dev/dfonline/flint/data/value/DataValue.java +++ b/src/main/java/dev/dfonline/flint/data/value/DataValue.java @@ -1,8 +1,8 @@ package dev.dfonline.flint.data.value; -import net.minecraft.nbt.AbstractNbtNumber; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtString; +import net.minecraft.nbt.NumericTag; +import net.minecraft.nbt.StringTag; +import net.minecraft.nbt.Tag; import org.jetbrains.annotations.Nullable; /** @@ -29,11 +29,11 @@ protected DataValue(Object value) { * @param nbt The NbtElement to create the DataValue from. * @return The new DataValue. */ - public static DataValue fromNbt(NbtElement nbt) { - if (nbt instanceof NbtString(String value)) { + public static DataValue fromNbt(Tag nbt) { + if (nbt instanceof StringTag(String value)) { return new StringDataValue(value); } - if (nbt instanceof AbstractNbtNumber abstractNbtNumber) { + if (nbt instanceof NumericTag abstractNbtNumber) { return new NumberDataValue(abstractNbtNumber.doubleValue()); } return new UnknownDataValue(nbt); diff --git a/src/main/java/dev/dfonline/flint/feature/impl/CommandSenderFeature.java b/src/main/java/dev/dfonline/flint/feature/impl/CommandSenderFeature.java index f113d54..e15f61b 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/CommandSenderFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/CommandSenderFeature.java @@ -5,10 +5,10 @@ import dev.dfonline.flint.feature.trait.TickedFeature; import dev.dfonline.flint.util.RateLimiter; import dev.dfonline.flint.util.result.EventResult; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket; -import net.minecraft.network.packet.c2s.play.CommandExecutionC2SPacket; +import net.minecraft.client.multiplayer.ClientPacketListener; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundChatCommandPacket; +import net.minecraft.network.protocol.game.ServerboundChatPacket; import java.util.ArrayDeque; @@ -42,16 +42,16 @@ public boolean alwaysOn() { @Override public void tick() { rateLimiter.tick(); - ClientPlayNetworkHandler networkHandler = Flint.getClient().getNetworkHandler(); + ClientPacketListener networkHandler = Flint.getClient().getConnection(); if (networkHandler != null && !rateLimiter.isRateLimited() && !commandQueue.isEmpty()) { // No need to increment here, since our packet listener will do that for us. - networkHandler.sendChatCommand(commandQueue.pop()); + networkHandler.sendCommand(commandQueue.pop()); } } @Override public EventResult onSendPacket(Packet packet) { - if (packet instanceof CommandExecutionC2SPacket || packet instanceof ChatMessageC2SPacket) { + if (packet instanceof ServerboundChatCommandPacket || packet instanceof ServerboundChatPacket) { rateLimiter.increment(); } diff --git a/src/main/java/dev/dfonline/flint/feature/impl/FlintCommandFeature.java b/src/main/java/dev/dfonline/flint/feature/impl/FlintCommandFeature.java index 20ff6a3..e38dd74 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/FlintCommandFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/FlintCommandFeature.java @@ -15,12 +15,11 @@ import dev.dfonline.flint.util.message.impl.prefix.SuccessMessage; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import net.kyori.adventure.text.Component; -import net.minecraft.command.CommandRegistryAccess; -import net.minecraft.sound.SoundEvents; -import net.minecraft.text.Text; +import net.minecraft.commands.CommandBuildContext; +import net.minecraft.sounds.SoundEvents; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.argument; -import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommands.argument; +import static net.fabricmc.fabric.api.client.command.v2.ClientCommands.literal; public class FlintCommandFeature implements CommandFeature { @@ -30,12 +29,12 @@ public String commandName() { } @Override - public LiteralArgumentBuilder createCommand(LiteralArgumentBuilder cmd, CommandRegistryAccess registryAccess) { + public LiteralArgumentBuilder createCommand(LiteralArgumentBuilder cmd, CommandBuildContext registryAccess) { return cmd.executes(context -> { Flint.getUser().sendMessage(new CompoundMessage( new SuccessMessage("flint.command.flint"), new SoundMessage(FlintSound.builder() - .setSound(SoundEvents.ENTITY_VILLAGER_YES) + .setSound(SoundEvents.VILLAGER_YES) .setPitch(2.0F) .build() ) @@ -69,7 +68,7 @@ public LiteralArgumentBuilder createCommand(LiteralAr }) ).then(literal("locate_test") .executes(context -> { - debugLocate(Flint.getUser().getPlayer().getNameForScoreboard()); + debugLocate(Flint.getUser().getPlayer().getScoreboardName()); return 1; }) .then(argument("player", StringArgumentType.greedyString()) diff --git a/src/main/java/dev/dfonline/flint/feature/impl/GetActionDumpFeature.java b/src/main/java/dev/dfonline/flint/feature/impl/GetActionDumpFeature.java index 439ce94..8af839c 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/GetActionDumpFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/GetActionDumpFeature.java @@ -12,8 +12,7 @@ import dev.dfonline.flint.util.message.impl.prefix.SuccessMessage; import dev.dfonline.flint.util.result.ReplacementEventResult; import net.kyori.adventure.text.Component; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.text.Text; +import net.minecraft.client.multiplayer.ClientPacketListener; import java.io.IOException; import java.util.Map; @@ -40,7 +39,7 @@ public static void getActionDump(boolean allowNonObtainableActionDumpNodes) { } isGettingActionDump = true; - ClientPlayNetworkHandler networkHandler = Flint.getClient().getNetworkHandler(); + ClientPacketListener networkHandler = Flint.getClient().getConnection(); if (networkHandler == null) { isGettingActionDump = false; @@ -55,11 +54,11 @@ public static void getActionDump(boolean allowNonObtainableActionDumpNodes) { lines = 0; length = 0; startTime = System.currentTimeMillis(); - networkHandler.sendChatCommand("dumpactioninfo"); + networkHandler.sendCommand("dumpactioninfo"); } @Override - public ReplacementEventResult onChatMessage(Text text, boolean actionbar) { + public ReplacementEventResult onChatMessage(net.minecraft.network.chat.Component text, boolean actionbar) { if (actionDumpProgression == null || !isGettingActionDump) { return ReplacementEventResult.pass(); } diff --git a/src/main/java/dev/dfonline/flint/feature/impl/LocateFeature.java b/src/main/java/dev/dfonline/flint/feature/impl/LocateFeature.java index 4f8b8e4..12d7186 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/LocateFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/LocateFeature.java @@ -8,10 +8,9 @@ import dev.dfonline.flint.util.result.EventResult; import it.unimi.dsi.fastutil.Pair; import net.kyori.adventure.text.Component; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundSystemChatPacket; import org.jetbrains.annotations.Nullable; import java.util.LinkedList; @@ -75,7 +74,7 @@ private static void processNextRequestIfReady() { @Override public EventResult onReceivePacket(Packet packet) { - if (!(packet instanceof GameMessageS2CPacket message)) { + if (!(packet instanceof ClientboundSystemChatPacket message)) { return EventResult.PASS; } @@ -88,7 +87,7 @@ public EventResult onReceivePacket(Packet packet) { String text = message.content().getString(); - Matcher matcher = LOCATE_PATTERN.matcher(Formatting.strip(text)); + Matcher matcher = LOCATE_PATTERN.matcher(ChatFormatting.stripFormatting(text)); if (!matcher.find()) { return EventResult.PASS; @@ -156,7 +155,7 @@ private LocateResult parseLocateResponse(Matcher matcher, String playerName) { String owner = matcher.group("owner"); - return new Plot(plotID, Text.literal(plotName), plotHandle, whitelisted, owner); + return new Plot(plotID, net.minecraft.network.chat.Component.literal(plotName), plotHandle, whitelisted, owner); } public record LocateResult(String player, Mode mode, @Nullable Plot plot, Node node, int nodeId) { diff --git a/src/main/java/dev/dfonline/flint/feature/impl/ModeTrackerFeature.java b/src/main/java/dev/dfonline/flint/feature/impl/ModeTrackerFeature.java index a0ec624..4b5afd3 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/ModeTrackerFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/ModeTrackerFeature.java @@ -11,17 +11,17 @@ import dev.dfonline.flint.util.FlintUpdate; import dev.dfonline.flint.util.Logger; import dev.dfonline.flint.util.result.EventResult; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.s2c.play.ClearTitleS2CPacket; -import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket; -import net.minecraft.network.packet.s2c.play.OverlayMessageS2CPacket; -import net.minecraft.network.packet.s2c.play.PlayerSpawnPositionS2CPacket; -import net.minecraft.text.Text; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundClearTitlesPacket; +import net.minecraft.network.protocol.game.ClientboundSetActionBarTextPacket; +import net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket; +import net.minecraft.network.protocol.game.ClientboundSystemChatPacket; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import java.util.regex.Pattern; @@ -66,15 +66,15 @@ private static void setMode(Mode mode) { @Override public EventResult onReceivePacket(Packet packet) { if (!hasQueuedLocate) { - if (packet instanceof ClearTitleS2CPacket clear && clear.shouldReset()) { + if (packet instanceof ClientboundClearTitlesPacket clear && clear.shouldResetTimes()) { this.pendingAction = PendingModeSwitchAction.POSITION_CHANGE; - } else if (packet instanceof PlayerSpawnPositionS2CPacket && + } else if (packet instanceof ClientboundSetDefaultSpawnPositionPacket && this.pendingAction == PendingModeSwitchAction.POSITION_CHANGE) { this.pendingAction = PendingModeSwitchAction.MESSAGE; } } - boolean overlayMatches = packet instanceof OverlayMessageS2CPacket(Text text) && + boolean overlayMatches = packet instanceof ClientboundSetActionBarTextPacket(Component text) && this.pendingAction == PendingModeSwitchAction.MESSAGE && SPAWN_ACTION_BAR_PATTERN.matcher(text.getString()).matches(); @@ -84,7 +84,7 @@ public EventResult onReceivePacket(Packet packet) { } if (!hasQueuedLocate && - packet instanceof GameMessageS2CPacket gameMsg && + packet instanceof ClientboundSystemChatPacket gameMsg && this.pendingAction == PendingModeSwitchAction.MESSAGE) { String content = gameMsg.content().getString(); @@ -105,14 +105,14 @@ public void tick() { if (Flint.getClient().player != null) { if (hasQueuedLocate) { hasQueuedLocate = false; - String name = Flint.getUser().getPlayer().getNameForScoreboard(); + String name = Flint.getUser().getPlayer().getScoreboardName(); LocateFeature.requestLocate(name).thenAccept(locate -> { Flint.getUser().setNode(locate.node()); Flint.getUser().setNodeId(locate.nodeId()); Vec3i newOrigin; if (locate.mode() == Mode.DEV) { - BlockPos blockpos = Flint.getUser().getPlayer().getBlockPos(); + BlockPos blockpos = Flint.getUser().getPlayer().blockPosition(); newOrigin = new Vec3i(blockpos.getX() + DEV_SPAWN_OFFSET, GROUND_LEVEL, blockpos.getZ() - DEV_SPAWN_OFFSET); } else { newOrigin = null; @@ -177,7 +177,7 @@ private PlotSize detectPlotSize() { Vec3i devOrigin = plot.getDevOrigin(); BlockPos pos = new BlockPos(devOrigin.getX() - 1, 49, devOrigin.getZ()); - ClientWorld world = Flint.getClient().world; + ClientLevel world = Flint.getClient().level; if (world == null) return null; BlockState BASIC = world.getBlockState(pos.south(50)); @@ -186,18 +186,18 @@ private PlotSize detectPlotSize() { BlockState LARGE_PLUS = world.getBlockState(pos.south(101)); BlockState MASSIVE = world.getBlockState(pos.south(300)); BlockState MASSIVE_PLUS = world.getBlockState(pos.south(301)); - BlockState MEGA = world.getBlockState(pos.add(-18, 0, 10)); - BlockState MEGA_PLUS = world.getBlockState(pos.add(-19, 0, 10)); + BlockState MEGA = world.getBlockState(pos.offset(-18, 0, 10)); + BlockState MEGA_PLUS = world.getBlockState(pos.offset(-19, 0, 10)); - if (MEGA_PLUS.isOf(Blocks.GRASS_BLOCK) && MEGA.isOf(Blocks.GRASS_BLOCK)) { + if (MEGA_PLUS.is(Blocks.GRASS_BLOCK) && MEGA.is(Blocks.GRASS_BLOCK)) { return PlotSize.MEGA; - } else if (!MEGA.isOf(Blocks.VOID_AIR) && !MEGA_PLUS.isOf(Blocks.VOID_AIR) && !MEGA.isOf(Blocks.GRASS_BLOCK) && !MEGA.isOf(Blocks.STONE) && !MEGA_PLUS.isOf(Blocks.GRASS_BLOCK)) { + } else if (!MEGA.is(Blocks.VOID_AIR) && !MEGA_PLUS.is(Blocks.VOID_AIR) && !MEGA.is(Blocks.GRASS_BLOCK) && !MEGA.is(Blocks.STONE) && !MEGA_PLUS.is(Blocks.GRASS_BLOCK)) { return PlotSize.MEGA; - } else if (!(BASIC.isOf(Blocks.VOID_AIR) || BASIC_PLUS.isOf(Blocks.VOID_AIR)) && !BASIC.isOf(BASIC_PLUS.getBlock())) { + } else if (!(BASIC.is(Blocks.VOID_AIR) || BASIC_PLUS.is(Blocks.VOID_AIR)) && !BASIC.is(BASIC_PLUS.getBlock())) { return PlotSize.BASIC; - } else if (!(LARGE.isOf(Blocks.VOID_AIR) || LARGE_PLUS.isOf(Blocks.VOID_AIR)) && !LARGE.isOf(LARGE_PLUS.getBlock())) { + } else if (!(LARGE.is(Blocks.VOID_AIR) || LARGE_PLUS.is(Blocks.VOID_AIR)) && !LARGE.is(LARGE_PLUS.getBlock())) { return PlotSize.LARGE; - } else if (!(MASSIVE.isOf(Blocks.VOID_AIR) || MASSIVE_PLUS.isOf(Blocks.VOID_AIR)) && !MASSIVE.isOf(MASSIVE_PLUS.getBlock())) { + } else if (!(MASSIVE.is(Blocks.VOID_AIR) || MASSIVE_PLUS.is(Blocks.VOID_AIR)) && !MASSIVE.is(MASSIVE_PLUS.getBlock())) { return PlotSize.MASSIVE; } else { // unknown, maybe the world is still streaming in chunks @@ -209,17 +209,17 @@ private boolean detectPlotUnderground() { Plot plot = Flint.getUser().getPlot(); if (plot == null) return false; - if (Flint.getClient().world == null) return false; + if (Flint.getClient().level == null) return false; PlotSize size = plot.getSize(); - BlockState groundCheck = Flint.getClient().world.getBlockState(new BlockPos( + BlockState groundCheck = Flint.getClient().level.getBlockState(new BlockPos( Math.max(Math.min((int) Flint.getUser().getPlayer().getX(), plot.getDevOrigin().getX() - 1), plot.getDevOrigin().getX() - (size.getCodeWidth())), 49, Math.max(Math.min((int) Flint.getUser().getPlayer().getZ(), plot.getDevOrigin().getZ() + size.getCodeLength()), plot.getDevOrigin().getZ()) )); - if (!groundCheck.isOf(Blocks.VOID_AIR)) { - return !groundCheck.isOf(Blocks.GRASS_BLOCK) && !groundCheck.isOf(Blocks.STONE); + if (!groundCheck.is(Blocks.VOID_AIR)) { + return !groundCheck.is(Blocks.GRASS_BLOCK) && !groundCheck.is(Blocks.STONE); } else { return false; } diff --git a/src/main/java/dev/dfonline/flint/feature/impl/PacketLoggerFeature.java b/src/main/java/dev/dfonline/flint/feature/impl/PacketLoggerFeature.java index 148975f..4fbaf69 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/PacketLoggerFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/PacketLoggerFeature.java @@ -3,7 +3,7 @@ import dev.dfonline.flint.feature.trait.PacketListeningFeature; import dev.dfonline.flint.util.Logger; import dev.dfonline.flint.util.result.EventResult; -import net.minecraft.network.packet.Packet; +import net.minecraft.network.protocol.Packet; import java.util.List; diff --git a/src/main/java/dev/dfonline/flint/feature/impl/StateDebugDisplayFeature.java b/src/main/java/dev/dfonline/flint/feature/impl/StateDebugDisplayFeature.java index c2162ee..446cf88 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/StateDebugDisplayFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/StateDebugDisplayFeature.java @@ -11,13 +11,13 @@ import dev.dfonline.flint.util.Logger; import dev.dfonline.flint.util.ObjectUtil; import dev.dfonline.flint.util.PaletteColor; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderTickCounter; -import net.minecraft.text.Text; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.network.chat.Component; import java.util.ArrayList; -import static net.minecraft.text.Text.literal; +import static net.minecraft.network.chat.Component.literal; public class StateDebugDisplayFeature implements RenderedFeature { @@ -26,10 +26,10 @@ public class StateDebugDisplayFeature implements RenderedFeature { private static final int STARTING_X = 5; @Override - public void render(DrawContext draw, RenderTickCounter renderTickCounter) { + public void render(GuiGraphicsExtractor draw, DeltaTracker renderTickCounter) { User user = Flint.getUser(); - ArrayList texts = new ArrayList<>(); + ArrayList texts = new ArrayList<>(); texts.add(literal("General State:").withColor(PaletteColor.PURPLE.value())); texts.add(formatValue("Node", ObjectUtil.toString(user.getNode(), Node::getName))); texts.add(formatValue("Node Id", user.getNodeId() + "")); @@ -46,21 +46,21 @@ public void render(DrawContext draw, RenderTickCounter renderTickCounter) { this.renderTexts(texts, draw); } - private void renderTexts(ArrayList texts, DrawContext draw) { + private void renderTexts(ArrayList texts, GuiGraphicsExtractor draw) { int y = STARTING_Y; for (int i = 0; i < texts.size(); i++) { - Text text = texts.get(i); + Component text = texts.get(i); if (i == 0) { - draw.drawTextWithShadow(Flint.getClient().textRenderer, text, STARTING_X, y, 0xFF_FFFFFF); + draw.text(Flint.getClient().font, text, STARTING_X, y, 0xFF_FFFFFF); y += 2; } else { - draw.drawTextWithShadow(Flint.getClient().textRenderer, text, STARTING_X + STARTING_Y, y, 0xFF_FFFFFF); + draw.text(Flint.getClient().font, text, STARTING_X + STARTING_Y, y, 0xFF_FFFFFF); } - y += Flint.getClient().textRenderer.fontHeight + 2; + y += Flint.getClient().font.lineHeight + 2; } } - private static Text formatValue(String key, String value) { + private static Component formatValue(String key, String value) { return literal(key).withColor(PaletteColor.PURPLE.value()) .append(literal(" = ").withColor(PaletteColor.GRAY_DARK.value())) .append(literal(value).withColor(PaletteColor.PURPLE_LIGHT.value())); diff --git a/src/main/java/dev/dfonline/flint/feature/impl/TestTemplateCommand.java b/src/main/java/dev/dfonline/flint/feature/impl/TestTemplateCommand.java index 296ec5d..e629941 100644 --- a/src/main/java/dev/dfonline/flint/feature/impl/TestTemplateCommand.java +++ b/src/main/java/dev/dfonline/flint/feature/impl/TestTemplateCommand.java @@ -10,7 +10,7 @@ import dev.dfonline.flint.templates.builders.CodeBuilder; import dev.dfonline.flint.templates.codeblock.SetVariable; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.command.CommandRegistryAccess; +import net.minecraft.commands.CommandBuildContext; public class TestTemplateCommand implements CommandFeature { @Override @@ -19,7 +19,7 @@ public String commandName() { } @Override - public LiteralArgumentBuilder createCommand(LiteralArgumentBuilder cmd, CommandRegistryAccess registryAccess) { + public LiteralArgumentBuilder createCommand(LiteralArgumentBuilder cmd, CommandBuildContext registryAccess) { return cmd.executes(this::run); } @@ -38,7 +38,7 @@ private int run(CommandContext context) { .build() ); - Flint.getUser().getPlayer().giveItemStack(template.toItem()); + Flint.getUser().getPlayer().addItem(template.toItem()); return 0; } diff --git a/src/main/java/dev/dfonline/flint/feature/trait/ChatListeningFeature.java b/src/main/java/dev/dfonline/flint/feature/trait/ChatListeningFeature.java index 12d5fb5..ad79450 100644 --- a/src/main/java/dev/dfonline/flint/feature/trait/ChatListeningFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/trait/ChatListeningFeature.java @@ -2,7 +2,7 @@ import dev.dfonline.flint.feature.core.FeatureTrait; import dev.dfonline.flint.util.result.ReplacementEventResult; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; /** * A feature that listens for chat messages, allowing to cancel or replace them. @@ -16,6 +16,6 @@ public interface ChatListeningFeature extends FeatureTrait { * @param actionbar Whether the message was displayed in the action bar * @return The result of the event */ - ReplacementEventResult onChatMessage(Text text, boolean actionbar); + ReplacementEventResult onChatMessage(Component text, boolean actionbar); } diff --git a/src/main/java/dev/dfonline/flint/feature/trait/CommandFeature.java b/src/main/java/dev/dfonline/flint/feature/trait/CommandFeature.java index a2caaaf..dd42e56 100644 --- a/src/main/java/dev/dfonline/flint/feature/trait/CommandFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/trait/CommandFeature.java @@ -4,7 +4,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder; import dev.dfonline.flint.feature.core.FeatureTrait; import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; -import net.minecraft.command.CommandRegistryAccess; +import net.minecraft.commands.CommandBuildContext; import java.util.Set; @@ -43,7 +43,7 @@ default Set aliases() { * @param registryAccess Registry access * @return The command with its functionality added */ - LiteralArgumentBuilder createCommand(LiteralArgumentBuilder cmd, CommandRegistryAccess registryAccess); + LiteralArgumentBuilder createCommand(LiteralArgumentBuilder cmd, CommandBuildContext registryAccess); /** * Registers the command and its aliases. @@ -51,7 +51,7 @@ default Set aliases() { * @param dispatcher The command dispatcher * @param registryAccess Registry access */ - default void register(CommandDispatcher dispatcher, CommandRegistryAccess registryAccess) { + default void register(CommandDispatcher dispatcher, CommandBuildContext registryAccess) { dispatcher.register(this.createCommand(literal(this.commandName()), registryAccess)); for (String alias : this.aliases()) { diff --git a/src/main/java/dev/dfonline/flint/feature/trait/PacketListeningFeature.java b/src/main/java/dev/dfonline/flint/feature/trait/PacketListeningFeature.java index 4e2b2cf..5345a5d 100644 --- a/src/main/java/dev/dfonline/flint/feature/trait/PacketListeningFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/trait/PacketListeningFeature.java @@ -2,7 +2,7 @@ import dev.dfonline.flint.feature.core.FeatureTrait; import dev.dfonline.flint.util.result.EventResult; -import net.minecraft.network.packet.Packet; +import net.minecraft.network.protocol.Packet; /** * A feature that listens for packets. diff --git a/src/main/java/dev/dfonline/flint/feature/trait/RenderedFeature.java b/src/main/java/dev/dfonline/flint/feature/trait/RenderedFeature.java index 6bd2c88..c88885f 100644 --- a/src/main/java/dev/dfonline/flint/feature/trait/RenderedFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/trait/RenderedFeature.java @@ -1,15 +1,15 @@ package dev.dfonline.flint.feature.trait; import dev.dfonline.flint.feature.core.FeatureTrait; -import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; +import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElement; import net.fabricmc.fabric.api.client.rendering.v1.hud.HudElementRegistry; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderTickCounter; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.gui.GuiGraphicsExtractor; /** * A feature that renders to the screen. * - * @deprecated Use {@link HudElementRegistry} instead, as per {@link HudRenderCallback}. + * @deprecated Use {@link HudElementRegistry} and {@link HudElement} instead. */ @Deprecated public interface RenderedFeature extends FeatureTrait { @@ -20,6 +20,6 @@ public interface RenderedFeature extends FeatureTrait { * @param context The drawing context * @param tickCounter The tick counter */ - void render(DrawContext context, RenderTickCounter tickCounter); + void render(GuiGraphicsExtractor context, DeltaTracker tickCounter); } diff --git a/src/main/java/dev/dfonline/flint/feature/trait/TooltipRenderFeature.java b/src/main/java/dev/dfonline/flint/feature/trait/TooltipRenderFeature.java index a1ce484..6a0cb37 100644 --- a/src/main/java/dev/dfonline/flint/feature/trait/TooltipRenderFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/trait/TooltipRenderFeature.java @@ -1,10 +1,10 @@ package dev.dfonline.flint.feature.trait; import dev.dfonline.flint.feature.core.FeatureTrait; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.text.Text; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import java.util.List; @@ -21,6 +21,6 @@ public interface TooltipRenderFeature extends FeatureTrait { * @param type The tooltip type * @param lore The list of tooltip text lines that can be modified */ - void tooltipRender(ItemStack item, Item.TooltipContext context, TooltipType type, List lore); + void tooltipRender(ItemStack item, Item.TooltipContext context, TooltipFlag type, List lore); } diff --git a/src/main/java/dev/dfonline/flint/feature/trait/WorldRenderFeature.java b/src/main/java/dev/dfonline/flint/feature/trait/WorldRenderFeature.java index 33250ca..4552e48 100644 --- a/src/main/java/dev/dfonline/flint/feature/trait/WorldRenderFeature.java +++ b/src/main/java/dev/dfonline/flint/feature/trait/WorldRenderFeature.java @@ -2,11 +2,11 @@ import dev.dfonline.flint.feature.core.FeatureTrait; import dev.dfonline.flint.util.result.EventResult; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldExtractionContext; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldRenderContext; -import net.fabricmc.fabric.api.client.rendering.v1.world.WorldTerrainRenderContext; -import net.minecraft.client.render.state.OutlineRenderState; -import net.minecraft.util.hit.HitResult; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelExtractionContext; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderContext; +import net.fabricmc.fabric.api.client.rendering.v1.level.LevelTerrainRenderContext; +import net.minecraft.client.renderer.state.level.BlockOutlineRenderState; +import net.minecraft.world.phys.HitResult; /** * A feature that receives world rendering events. @@ -19,7 +19,7 @@ public interface WorldRenderFeature extends FeatureTrait { * @param context The world extraction context * @param hit The hit result of the block being outlined */ - default void worldRenderAfterBlockOutlineExtraction(WorldExtractionContext context, HitResult hit) { + default void worldRenderAfterBlockOutlineExtraction(LevelExtractionContext context, HitResult hit) { } /** @@ -27,7 +27,7 @@ default void worldRenderAfterBlockOutlineExtraction(WorldExtractionContext conte * * @param context The world extraction context */ - default void worldRenderEndExtraction(WorldExtractionContext context) { + default void worldRenderEndExtraction(LevelExtractionContext context) { } /** @@ -36,16 +36,16 @@ default void worldRenderEndExtraction(WorldExtractionContext context) { * * @param context The world terrain render context */ - default void worldRenderStartMain(WorldTerrainRenderContext context) { + default void worldRenderStartMain(LevelTerrainRenderContext context) { } /** - * Called after the {@link net.minecraft.client.render.BlockRenderLayer#SOLID SOLID}, {@link net.minecraft.client.render.BlockRenderLayer#CUTOUT CUTOUT}, - * and {@link net.minecraft.client.render.BlockRenderLayer#CUTOUT CUTOUT_MIPPED} terrain layers are drawn to the framebuffer. + * Called after {@linkplain net.minecraft.client.renderer.chunk.ChunkSectionLayerGroup#OPAQUE opaque terrain} is drawn + * and entity, block entity, and particle submit nodes are collected, before their geometry is drawn. * * @param context The world render context */ - default void worldRenderBeforeEntities(WorldRenderContext context) { + default void worldRenderBeforeEntities(LevelRenderContext context) { } /** @@ -53,7 +53,7 @@ default void worldRenderBeforeEntities(WorldRenderContext context) { * * @param context The world render context */ - default void worldRenderAfterEntities(WorldRenderContext context) { + default void worldRenderAfterEntities(LevelRenderContext context) { } /** @@ -62,7 +62,7 @@ default void worldRenderAfterEntities(WorldRenderContext context) { * * @param context The world render context */ - default void worldRenderBeforeDebugRender(WorldRenderContext context) { + default void worldRenderBeforeDebugRender(LevelRenderContext context) { } /** @@ -72,7 +72,7 @@ default void worldRenderBeforeDebugRender(WorldRenderContext context) { * * @param context The world render context */ - default void worldRenderBeforeTranslucent(WorldRenderContext context) { + default void worldRenderBeforeTranslucent(LevelRenderContext context) { } /** @@ -83,7 +83,7 @@ default void worldRenderBeforeTranslucent(WorldRenderContext context) { * @param outlineRenderState The outline render state * @return The event result */ - default EventResult worldRenderBeforeBlockOutline(WorldRenderContext context, OutlineRenderState outlineRenderState) { + default EventResult worldRenderBeforeBlockOutline(LevelRenderContext context, BlockOutlineRenderState outlineRenderState) { return EventResult.PASS; } @@ -94,7 +94,7 @@ default EventResult worldRenderBeforeBlockOutline(WorldRenderContext context, Ou * * @param context The world render context */ - default void worldRenderEndMain(WorldRenderContext context) { + default void worldRenderEndMain(LevelRenderContext context) { } } diff --git a/src/main/java/dev/dfonline/flint/hypercube/Plot.java b/src/main/java/dev/dfonline/flint/hypercube/Plot.java index 2b15d14..9cf4951 100644 --- a/src/main/java/dev/dfonline/flint/hypercube/Plot.java +++ b/src/main/java/dev/dfonline/flint/hypercube/Plot.java @@ -1,15 +1,15 @@ package dev.dfonline.flint.hypercube; -import net.minecraft.text.Text; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3i; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.network.chat.Component; import java.util.Objects; public class Plot { private final int id; - private final Text name; + private final Component name; private final String handle; private final boolean whitelisted; private Vec3i devOrigin; @@ -17,7 +17,7 @@ public class Plot { private boolean hasUnderground = false; private final String owner; - public Plot(int id, Text name, String handle, boolean whitelisted, String owner) { + public Plot(int id, Component name, String handle, boolean whitelisted, String owner) { this.id = id; this.name = name; this.handle = handle; @@ -29,7 +29,7 @@ public int getId() { return this.id; } - public Text getName() { + public Component getName() { return this.name; } diff --git a/src/main/java/dev/dfonline/flint/mixin/MClientCommonPlayNetworkHandler.java b/src/main/java/dev/dfonline/flint/mixin/MClientCommonPlayNetworkHandler.java index 0ec91db..1fc2346 100644 --- a/src/main/java/dev/dfonline/flint/mixin/MClientCommonPlayNetworkHandler.java +++ b/src/main/java/dev/dfonline/flint/mixin/MClientCommonPlayNetworkHandler.java @@ -7,24 +7,24 @@ import dev.dfonline.flint.feature.trait.UserCommandListeningFeature; import dev.dfonline.flint.util.result.EventResult; import dev.dfonline.flint.util.result.ReplacementEventResult; -import net.minecraft.client.network.ClientCommonNetworkHandler; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.c2s.play.CommandExecutionC2SPacket; +import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ServerboundChatCommandPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientCommonNetworkHandler.class) +@Mixin(ClientCommonPacketListenerImpl.class) public abstract class MClientCommonPlayNetworkHandler { @Unique private boolean sendingModifiedCommand = false; - @Inject(method = "sendPacket", at = @At("HEAD"), cancellable = true) + @Inject(method = "send", at = @At("HEAD"), cancellable = true) private void sendPacket(Packet packet, CallbackInfo ci) { - if (!this.sendingModifiedCommand && packet instanceof CommandExecutionC2SPacket(String command)) { + if (!this.sendingModifiedCommand && packet instanceof ServerboundChatCommandPacket(String command)) { String newCommand = null; for (FeatureTrait trait : Flint.FEATURE_MANAGER.getByTrait(FeatureTraitType.USER_COMMAND_LISTENING)) { ReplacementEventResult result = ((UserCommandListeningFeature) trait).sendCommand(command); @@ -37,9 +37,9 @@ private void sendPacket(Packet packet, CallbackInfo ci) { } } - if (newCommand != null && Flint.getClient().getNetworkHandler() != null) { + if (newCommand != null && Flint.getClient().getConnection() != null) { this.sendingModifiedCommand = true; - Flint.getClient().getNetworkHandler().sendPacket(new CommandExecutionC2SPacket(newCommand)); + Flint.getClient().getConnection().send(new ServerboundChatCommandPacket(newCommand)); this.sendingModifiedCommand = false; } } diff --git a/src/main/java/dev/dfonline/flint/mixin/MClientConnection.java b/src/main/java/dev/dfonline/flint/mixin/MClientConnection.java index 4657f1e..2be8a4a 100644 --- a/src/main/java/dev/dfonline/flint/mixin/MClientConnection.java +++ b/src/main/java/dev/dfonline/flint/mixin/MClientConnection.java @@ -7,26 +7,26 @@ import dev.dfonline.flint.feature.trait.PacketListeningFeature; import dev.dfonline.flint.util.result.EventResult; import dev.dfonline.flint.util.result.ReplacementEventResult; -import net.minecraft.network.ClientConnection; -import net.minecraft.network.listener.PacketListener; -import net.minecraft.network.packet.Packet; -import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket; -import net.minecraft.text.Text; +import net.minecraft.network.Connection; +import net.minecraft.network.PacketListener; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientboundSystemChatPacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientConnection.class) +@Mixin(Connection.class) public class MClientConnection { - @Inject(method = "handlePacket", at = @At("HEAD"), cancellable = true) + @Inject(method = "genericsFtw", at = @At("HEAD"), cancellable = true) private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) { - if (packet instanceof GameMessageS2CPacket(Text content, boolean overlay)) { - Text newMessage = null; + if (packet instanceof ClientboundSystemChatPacket(Component content, boolean overlay)) { + Component newMessage = null; for (FeatureTrait feature : Flint.FEATURE_MANAGER.getByTrait(FeatureTraitType.CHAT_LISTENING)) { - ReplacementEventResult result = ((ChatListeningFeature) feature).onChatMessage(content, overlay); + ReplacementEventResult result = ((ChatListeningFeature) feature).onChatMessage(content, overlay); if (result.getType() == ReplacementEventResult.Type.CANCEL) { ci.cancel(); @@ -39,7 +39,7 @@ private static void handlePacket(Packet packet, Pa if (newMessage != null) { ci.cancel(); - Flint.getUser().getPlayer().sendMessage(newMessage, false); + Flint.getUser().getPlayer().sendSystemMessage(newMessage); return; } } diff --git a/src/main/java/dev/dfonline/flint/mixin/MClientPlayNetworkHandler.java b/src/main/java/dev/dfonline/flint/mixin/MClientPlayNetworkHandler.java index c729e87..5609a65 100644 --- a/src/main/java/dev/dfonline/flint/mixin/MClientPlayNetworkHandler.java +++ b/src/main/java/dev/dfonline/flint/mixin/MClientPlayNetworkHandler.java @@ -5,20 +5,20 @@ import dev.dfonline.flint.feature.core.FeatureTraitType; import dev.dfonline.flint.feature.trait.UserMessageListeningFeature; import dev.dfonline.flint.util.result.ReplacementEventResult; -import net.minecraft.client.network.ClientPlayNetworkHandler; +import net.minecraft.client.multiplayer.ClientPacketListener; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(ClientPlayNetworkHandler.class) +@Mixin(ClientPacketListener.class) public class MClientPlayNetworkHandler { @Unique private boolean sending = false; - @Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true) + @Inject(method = "sendChat", at = @At("HEAD"), cancellable = true) private void sendChatMessage(String message, CallbackInfo ci) { if (this.sending) { return; @@ -38,9 +38,9 @@ private void sendChatMessage(String message, CallbackInfo ci) { } if (newMessage != null) { - ClientPlayNetworkHandler handler = (ClientPlayNetworkHandler) (Object) this; + ClientPacketListener handler = (ClientPacketListener) (Object) this; this.sending = true; - handler.sendChatMessage(newMessage); + handler.sendChat(newMessage); this.sending = false; } } diff --git a/src/main/java/dev/dfonline/flint/templates/CodeBlocks.java b/src/main/java/dev/dfonline/flint/templates/CodeBlocks.java index 6c2d212..a2dae4d 100644 --- a/src/main/java/dev/dfonline/flint/templates/CodeBlocks.java +++ b/src/main/java/dev/dfonline/flint/templates/CodeBlocks.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import static dev.dfonline.flint.templates.Template.print; -import static net.minecraft.text.Text.literal; +import static net.minecraft.network.chat.Component.literal; public class CodeBlocks { private ArrayList blocks = new ArrayList<>(); @@ -18,7 +18,7 @@ public static CodeBlocks fromJson(JsonArray blocks) { CodeBlocks codeBlocks = new CodeBlocks(); if (FlintAPI.isDebugging()) { - Flint.getUser().getPlayer().sendMessage(literal(blocks.toString()), false); + Flint.getUser().getPlayer().sendSystemMessage(literal(blocks.toString())); } codeBlocks.blocks = new ArrayList<>(); diff --git a/src/main/java/dev/dfonline/flint/templates/Template.java b/src/main/java/dev/dfonline/flint/templates/Template.java index eb9895e..ef1f8d0 100644 --- a/src/main/java/dev/dfonline/flint/templates/Template.java +++ b/src/main/java/dev/dfonline/flint/templates/Template.java @@ -6,14 +6,14 @@ import dev.dfonline.flint.Flint; import dev.dfonline.flint.data.DFItem; import dev.dfonline.flint.data.PublicBukkitValues; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import org.jetbrains.annotations.Nullable; import java.io.IOException; -import static net.minecraft.text.Text.literal; +import static net.minecraft.network.chat.Component.literal; public class Template { private String name = "null"; @@ -106,7 +106,7 @@ public void printToChat() { } static void print(String string) { - Flint.getUser().getPlayer().sendMessage(literal(string), false); + Flint.getUser().getPlayer().sendSystemMessage(literal(string)); } @Override diff --git a/src/main/java/dev/dfonline/flint/templates/argument/ItemArgument.java b/src/main/java/dev/dfonline/flint/templates/argument/ItemArgument.java index 7abe92c..dbc6b72 100644 --- a/src/main/java/dev/dfonline/flint/templates/argument/ItemArgument.java +++ b/src/main/java/dev/dfonline/flint/templates/argument/ItemArgument.java @@ -6,13 +6,10 @@ import dev.dfonline.flint.Flint; import dev.dfonline.flint.FlintAPI; import dev.dfonline.flint.templates.argument.abstracts.Argument; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.StringNbtReader; -import net.minecraft.registry.RegistryOps; -import net.minecraft.registry.RegistryWrapper; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.TagParser; +import net.minecraft.world.item.ItemStack; public class ItemArgument extends Argument { private ItemStack item; @@ -21,7 +18,7 @@ public ItemArgument(JsonObject json, JsonObject data) { super(json); var nbt = data.get("item").getAsString(); try { - assert Flint.getClient().world != null; + assert Flint.getClient().level != null; setNBT(nbt); } catch (Exception e) { item = null; @@ -30,16 +27,16 @@ public ItemArgument(JsonObject json, JsonObject data) { public String getNBT() { return ItemStack.CODEC.encodeStart( - Flint.getClient().player.getRegistryManager().getOps(NbtOps.INSTANCE), item) + Flint.getClient().player.registryAccess().createSerializationContext(NbtOps.INSTANCE), item) .getOrThrow(str -> new RuntimeException("Failed to parse item into NBT for templates: %s".formatted(str))) .toString(); } public void setNBT(String nbt) { try { - NbtCompound nbtCompound = StringNbtReader.readCompound(nbt); + CompoundTag nbtCompound = TagParser.parseCompoundFully(nbt); item = ItemStack.CODEC.decode( - Flint.getClient().player.getRegistryManager().getOps(NbtOps.INSTANCE), nbtCompound) + Flint.getClient().player.registryAccess().createSerializationContext(NbtOps.INSTANCE), nbtCompound) .getOrThrow(str -> new RuntimeException("Failed to parse NBT into item for templates: %s".formatted(str))) .getFirst() ; @@ -61,7 +58,7 @@ public String toString() { @Override protected JsonObject getData() { JsonObject data = new JsonObject(); - assert Flint.getClient().world != null; + assert Flint.getClient().level != null; data.addProperty("item", getNBT()); return data; } diff --git a/src/main/java/dev/dfonline/flint/util/ComponentUtil.java b/src/main/java/dev/dfonline/flint/util/ComponentUtil.java index aef9e8d..98de9b0 100644 --- a/src/main/java/dev/dfonline/flint/util/ComponentUtil.java +++ b/src/main/java/dev/dfonline/flint/util/ComponentUtil.java @@ -7,26 +7,25 @@ import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextDecoration; -import net.minecraft.text.Text; -import net.minecraft.text.TextColor; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.TextColor; public final class ComponentUtil { private ComponentUtil() { } - public static void textToString(Text content, StringBuilder build, ActionDumpFormat format) { + public static void textToString(net.minecraft.network.chat.Component content, StringBuilder build, ActionDumpFormat format) { TextColor lastColor = null; - for (Text text : content.getSiblings()) { + for (net.minecraft.network.chat.Component text : content.getSiblings()) { if (format != ActionDumpFormat.MINI_MESSAGE) { TextColor color = text.getStyle().getColor(); if (color != null && lastColor != color && format != ActionDumpFormat.NONE) { lastColor = color; - if (color.getName().contains("#")) { - build.append(String.join(format.getPrefix(), color.getName().split("")).replace("#", format.getPrefix() + "x").toLowerCase()); + if (color.serialize().contains("#")) { + build.append(String.join(format.getPrefix(), color.serialize().split("")).replace("#", format.getPrefix() + "x").toLowerCase()); } else { - build.append(Formatting.valueOf(String.valueOf(color).toUpperCase()).toString().replace("§", format.getPrefix())); + build.append(ChatFormatting.valueOf(String.valueOf(color).toUpperCase()).toString().replace("§", format.getPrefix())); } } build.append(text.getString()); diff --git a/src/main/java/dev/dfonline/flint/util/FlintSound.java b/src/main/java/dev/dfonline/flint/util/FlintSound.java index 0840b0f..f46ef85 100644 --- a/src/main/java/dev/dfonline/flint/util/FlintSound.java +++ b/src/main/java/dev/dfonline/flint/util/FlintSound.java @@ -1,8 +1,8 @@ package dev.dfonline.flint.util; import dev.dfonline.flint.util.message.impl.SoundMessage; -import net.minecraft.sound.SoundCategory; -import net.minecraft.sound.SoundEvent; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; /** * Represents a Minecraft sound with a pre-configured volume, pitch, and source. @@ -25,7 +25,7 @@ public final class FlintSound { private final SoundEvent soundEvent; private final float volume; private final float pitch; - private final SoundCategory source; + private final SoundSource source; public FlintSound(Builder builder) { this.soundEvent = builder.sound; @@ -50,7 +50,7 @@ public float getPitch() { return this.pitch; } - public SoundCategory getSource() { + public SoundSource getSource() { return this.source; } @@ -59,7 +59,7 @@ public static class Builder { private SoundEvent sound; private float volume = 1.0F; private float pitch = 1.0F; - private SoundCategory source = SoundCategory.MASTER; + private SoundSource source = SoundSource.MASTER; public Builder setSound(SoundEvent sound) { this.sound = sound; @@ -76,7 +76,7 @@ public Builder setPitch(float pitch) { return this; } - public Builder setSource(SoundCategory source) { + public Builder setSource(SoundSource source) { this.source = source; return this; } diff --git a/src/main/java/dev/dfonline/flint/util/Toaster.java b/src/main/java/dev/dfonline/flint/util/Toaster.java index b5f29cd..540a0bd 100644 --- a/src/main/java/dev/dfonline/flint/util/Toaster.java +++ b/src/main/java/dev/dfonline/flint/util/Toaster.java @@ -2,7 +2,7 @@ import dev.dfonline.flint.Flint; import net.kyori.adventure.text.Component; -import net.minecraft.client.toast.SystemToast; +import net.minecraft.client.gui.components.toasts.SystemToast; public final class Toaster { @@ -10,7 +10,7 @@ private Toaster() { } public static void toast(Component title, Component description) { - Flint.getClient().getToastManager().add(SystemToast.create(Flint.getClient(), SystemToast.Type.UNSECURE_SERVER_WARNING, Flint.AUDIENCE.asNative(title), Flint.AUDIENCE.asNative(description))); + SystemToast.add(Flint.getClient().gui.toastManager(), SystemToast.SystemToastId.UNSECURE_SERVER_WARNING, Flint.AUDIENCE.asNative(title), Flint.AUDIENCE.asNative(description)); } } diff --git a/src/main/java/dev/dfonline/flint/util/file/ExternalFileBuilder.java b/src/main/java/dev/dfonline/flint/util/file/ExternalFileBuilder.java index d5ab8b1..f2f039e 100644 --- a/src/main/java/dev/dfonline/flint/util/file/ExternalFileBuilder.java +++ b/src/main/java/dev/dfonline/flint/util/file/ExternalFileBuilder.java @@ -3,7 +3,7 @@ import dev.dfonline.flint.Flint; import dev.dfonline.flint.util.Logger; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import org.jetbrains.annotations.Nullable; @@ -83,7 +83,7 @@ static Path nbt(String name) { .setName(name) .build(path -> { try { - NbtIo.write(new NbtCompound(), path); + NbtIo.write(new CompoundTag(), path); } catch (IOException e) { LOGGER.error("Failed to write NBT file: " + path, e); } diff --git a/src/main/java/dev/dfonline/flint/util/message/impl/SoundMessage.java b/src/main/java/dev/dfonline/flint/util/message/impl/SoundMessage.java index 5443f66..e71f1ae 100644 --- a/src/main/java/dev/dfonline/flint/util/message/impl/SoundMessage.java +++ b/src/main/java/dev/dfonline/flint/util/message/impl/SoundMessage.java @@ -3,20 +3,19 @@ import dev.dfonline.flint.Flint; import dev.dfonline.flint.util.FlintSound; import dev.dfonline.flint.util.message.Message; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; public record SoundMessage(FlintSound sound) implements Message { @Override public void send() { - MinecraftClient client = Flint.getClient(); - if (client == null || client.player == null || client.world == null) { + Minecraft client = Flint.getClient(); + if (client == null || client.player == null || client.level == null) { return; } - ClientPlayerEntity player = Flint.getUser().getPlayer(); - client.world.playSound(player, player.getX(), player.getY(), player.getZ(), this.sound.getSoundEvent(), this.sound.getSource(), this.sound.getVolume(), this.sound.getPitch()); + LocalPlayer player = Flint.getUser().getPlayer(); + client.level.playSound(player, player.getX(), player.getY(), player.getZ(), this.sound.getSoundEvent(), this.sound.getSource(), this.sound.getVolume(), this.sound.getPitch()); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 134918c..dad61c9 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -30,7 +30,7 @@ "depends": { "fabricloader": ">=${loader_version}", - "fabric": "*", + "fabric-api": "*", "minecraft": "${minecraft_version}" } } diff --git a/src/main/resources/flint.mixins.json b/src/main/resources/flint.mixins.json index ab3c4d7..65001a6 100644 --- a/src/main/resources/flint.mixins.json +++ b/src/main/resources/flint.mixins.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "dev.dfonline.flint.mixin", - "compatibilityLevel": "JAVA_21", + "compatibilityLevel": "JAVA_25", "client": [ "MClientCommonPlayNetworkHandler", "MClientConnection",