diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d00a0d5..a2159d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: matrix: # Use these Java versions java: [ - 17, # Current Java LTS & minimum supported by Minecraft + 21, # Current Java LTS & minimum supported by Minecraft ] # and run on both Linux and Windows os: [ubuntu-20.04] diff --git a/build.gradle b/build.gradle index 69c49c7..76b12db 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ plugins { - id 'fabric-loom' version '1.5-SNAPSHOT' + id 'fabric-loom' version '1.6-SNAPSHOT' id 'maven-publish' id 'idea' } -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 +sourceCompatibility = JavaVersion.VERSION_21 +targetCompatibility = JavaVersion.VERSION_21 archivesBaseName = project.archives_base_name version = project.mod_version + "+" + project.minecraft_version @@ -45,7 +45,7 @@ processResources { tasks.withType(JavaCompile).configureEach { // Minecraft 1.18 (1.18-pre2) upwards uses Java 17. - it.options.release = 17 + it.options.release = 21 } java { diff --git a/gradle.properties b/gradle.properties index 5bca209..1c08289 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,17 +1,17 @@ # Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/develop - minecraft_version=1.20.4 - yarn_mappings=1.20.4+build.3 - loader_version=0.15.3 + minecraft_version=1.20.5 + yarn_mappings=1.20.5+build.1 + loader_version=0.15.10 # Mod Properties - mod_version = 1.6.2 + mod_version = 1.7.0 maven_group = com.campersamu archives_base_name = itemcommander # Dependencies - fabric_version=0.91.3+1.20.4 - placeholder_version=2.3.0+1.20.3 + fabric_version=0.97.8+1.20.5 + placeholder_version=2.4.0-pre.1+1.20.5 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a595206..48c0a02 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/campersamu/itemcommander/ItemCommanderInit.java b/src/main/java/com/campersamu/itemcommander/ItemCommanderInit.java index a42049f..b8420de 100644 --- a/src/main/java/com/campersamu/itemcommander/ItemCommanderInit.java +++ b/src/main/java/com/campersamu/itemcommander/ItemCommanderInit.java @@ -27,7 +27,7 @@ public void onInitialize() { GiveCommanderCommand.init(); //endregion LOGGER.info(">item commander loading"); - LOGGER.info(">placeholder-api support: " + (PLACEHOLDERS_LOADED ? "enabled" : "disabled")); + LOGGER.info(">placeholder-api support: {}", PLACEHOLDERS_LOADED ? "enabled" : "disabled"); LOGGER.info(">when a stick is more powerful than you"); } } diff --git a/src/main/java/com/campersamu/itemcommander/command/AppendCommanderCommand.java b/src/main/java/com/campersamu/itemcommander/command/AppendCommanderCommand.java index 610eae8..0cff58b 100644 --- a/src/main/java/com/campersamu/itemcommander/command/AppendCommanderCommand.java +++ b/src/main/java/com/campersamu/itemcommander/command/AppendCommanderCommand.java @@ -5,6 +5,9 @@ import com.mojang.brigadier.context.CommandContext; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.NbtComponent; +import net.minecraft.nbt.NbtCompound; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -49,8 +52,8 @@ private static int execute(final @NotNull CommandContext co } try { - final Commander commander = Commander.fromNbt(player.getMainHandStack().getOrCreateNbt()).appendCommand(command); - player.getMainHandStack().getOrCreateNbt() + final Commander commander = Commander.fromNbt(player.getMainHandStack().getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(new NbtCompound())).getNbt()).appendCommand(command); + player.getMainHandStack().getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(new NbtCompound())).getNbt() .put(COMMANDER_TAG_KEY, commander.toNbt()); } catch (CommanderException e) { ctxSource.sendError(errorNotCommanderItemText); diff --git a/src/main/java/com/campersamu/itemcommander/command/CreateCommanderCommand.java b/src/main/java/com/campersamu/itemcommander/command/CreateCommanderCommand.java index 015fb68..0b0feee 100644 --- a/src/main/java/com/campersamu/itemcommander/command/CreateCommanderCommand.java +++ b/src/main/java/com/campersamu/itemcommander/command/CreateCommanderCommand.java @@ -7,7 +7,10 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.minecraft.command.argument.ItemStackArgument; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.NbtComponent; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.text.Text; import net.minecraft.util.Formatting; @@ -98,11 +101,11 @@ private static int execute(final @NotNull CommandContext co ctxSource.sendError(errorNoItemInHandText); return -1; } - player.getMainHandStack().getOrCreateNbt() + player.getMainHandStack().getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(new NbtCompound())).getNbt() .put(COMMANDER_TAG_KEY, commander.toNbt()); } else { final ItemStack stack = stackArg.createStack(1, true); - stack.getOrCreateNbt().put(COMMANDER_TAG_KEY, commander.toNbt()); + stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(new NbtCompound())).getNbt().put(COMMANDER_TAG_KEY, commander.toNbt()); player.giveItemStack(stack); } diff --git a/src/main/java/com/campersamu/itemcommander/command/GiveCommanderCommand.java b/src/main/java/com/campersamu/itemcommander/command/GiveCommanderCommand.java index 99ec3d4..210e35e 100644 --- a/src/main/java/com/campersamu/itemcommander/command/GiveCommanderCommand.java +++ b/src/main/java/com/campersamu/itemcommander/command/GiveCommanderCommand.java @@ -76,7 +76,7 @@ private static int execute(final @NotNull CommandContext co players.forEach(player -> player.giveItemStack(stack)); } catch (IOException e) { ctxSource.sendFeedback(() -> errorText(fileName), true); - LOGGER.error("Failed to load item from file " + fileName, e); + LOGGER.error("Failed to load item from file {}", fileName, e); return -1; } diff --git a/src/main/java/com/campersamu/itemcommander/config/CommanderIO.java b/src/main/java/com/campersamu/itemcommander/config/CommanderIO.java index a84efbb..59ad49f 100644 --- a/src/main/java/com/campersamu/itemcommander/config/CommanderIO.java +++ b/src/main/java/com/campersamu/itemcommander/config/CommanderIO.java @@ -1,15 +1,18 @@ package com.campersamu.itemcommander.config; +import com.mojang.datafixers.DataFixerUpper; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtIo; +import net.minecraft.server.MinecraftServer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.Objects; import java.util.stream.Stream; import static com.campersamu.itemcommander.ItemCommanderInit.LOGGER; @@ -64,7 +67,8 @@ static void saveItemToFile(final @NotNull ItemStack stack, @NotNull String fileN ? fileName : fileName + ".nbt"; try { - NbtIo.write(stack.writeNbt(new NbtCompound()), CONFIG_FOLDER.resolve(fileName)); + if (!(FabricLoader.getInstance().getGameInstance() instanceof MinecraftServer server)) return; + NbtIo.write((NbtCompound) stack.encodeAllowEmpty(server.getRegistryManager()), CONFIG_FOLDER.resolve(fileName)); } catch (IOException e) { LOGGER.error("Failed to save item to file", e); throw new RuntimeException(e); @@ -83,6 +87,8 @@ static ItemStack loadFromFile(@NotNull String fileName) throws IOException { fileName = (fileName.contains(".nbt")) ? fileName : fileName + ".nbt"; - return ItemStack.fromNbt(NbtIo.read(CONFIG_FOLDER.resolve(fileName))); + if (!(FabricLoader.getInstance().getGameInstance() instanceof MinecraftServer server)) return ItemStack.EMPTY; +// server.getDataFixer().update() + return ItemStack.fromNbtOrEmpty(server.getRegistryManager(), Objects.requireNonNull(NbtIo.read(CONFIG_FOLDER.resolve(fileName)))); } } diff --git a/src/main/java/com/campersamu/itemcommander/exception/CommanderException.java b/src/main/java/com/campersamu/itemcommander/exception/CommanderException.java index 33305fd..78a5cc9 100644 --- a/src/main/java/com/campersamu/itemcommander/exception/CommanderException.java +++ b/src/main/java/com/campersamu/itemcommander/exception/CommanderException.java @@ -1,4 +1,4 @@ package com.campersamu.itemcommander.exception; -public abstract class CommanderException extends Exception{ +public abstract class CommanderException extends Exception { } diff --git a/src/main/java/com/campersamu/itemcommander/exception/CommanderNoCommandException.java b/src/main/java/com/campersamu/itemcommander/exception/CommanderNoCommandException.java index 5dd2837..e699900 100644 --- a/src/main/java/com/campersamu/itemcommander/exception/CommanderNoCommandException.java +++ b/src/main/java/com/campersamu/itemcommander/exception/CommanderNoCommandException.java @@ -2,9 +2,10 @@ import static com.campersamu.itemcommander.ItemCommanderInit.LOGGER; -public class CommanderNoCommandException extends CommanderException{ +public class CommanderNoCommandException extends CommanderException { public static final String error = "No command was specified for Commander item!"; - public CommanderNoCommandException(){ + + public CommanderNoCommandException() { super(); LOGGER.error(error); } diff --git a/src/main/java/com/campersamu/itemcommander/exception/CommanderNoTagException.java b/src/main/java/com/campersamu/itemcommander/exception/CommanderNoTagException.java index 0dd6b1d..5c918e0 100644 --- a/src/main/java/com/campersamu/itemcommander/exception/CommanderNoTagException.java +++ b/src/main/java/com/campersamu/itemcommander/exception/CommanderNoTagException.java @@ -1,7 +1,5 @@ package com.campersamu.itemcommander.exception; public class CommanderNoTagException extends CommanderException { - public CommanderNoTagException(){ - super(); - } + public CommanderNoTagException() { super(); } } diff --git a/src/main/java/com/campersamu/itemcommander/mixin/ItemInteractMixin.java b/src/main/java/com/campersamu/itemcommander/mixin/ItemInteractMixin.java index f4d22ac..6bd6832 100644 --- a/src/main/java/com/campersamu/itemcommander/mixin/ItemInteractMixin.java +++ b/src/main/java/com/campersamu/itemcommander/mixin/ItemInteractMixin.java @@ -2,7 +2,10 @@ import com.campersamu.itemcommander.exception.CommanderException; import com.campersamu.itemcommander.nbt.Commander; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.NbtComponent; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.network.ServerPlayerInteractionManager; import net.minecraft.util.ActionResult; @@ -27,8 +30,8 @@ public class ItemInteractMixin { ) private void checkInteraction(ServerPlayerEntity player, World world, ItemStack stack, Hand hand, CallbackInfoReturnable cir) { try { - if (stack.hasNbt()) { - cir.setReturnValue(Commander.fromNbt(Objects.requireNonNull(stack.getNbt())).executeCommand(player, stack, player.raycast(4, 1.0F, false).getPos())); + if (stack.get(DataComponentTypes.CUSTOM_DATA) != null) { + cir.setReturnValue(Commander.fromNbt(Objects.requireNonNull(stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(new NbtCompound())).getNbt())).executeCommand(player, stack, player.raycast(4, 1.0F, false).getPos())); } } catch (CommanderException ignored) { } diff --git a/src/main/java/com/campersamu/itemcommander/mixin/LecternMixin.java b/src/main/java/com/campersamu/itemcommander/mixin/LecternMixin.java index e46cedb..ad125d5 100644 --- a/src/main/java/com/campersamu/itemcommander/mixin/LecternMixin.java +++ b/src/main/java/com/campersamu/itemcommander/mixin/LecternMixin.java @@ -7,9 +7,12 @@ import net.minecraft.block.BlockWithEntity; import net.minecraft.block.LecternBlock; import net.minecraft.block.entity.LecternBlockEntity; +import net.minecraft.component.DataComponentTypes; +import net.minecraft.component.type.NbtComponent; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.state.property.BooleanProperty; import net.minecraft.util.ActionResult; @@ -46,12 +49,12 @@ private LecternMixin(Settings settings) { at = @At("HEAD"), cancellable = true ) - private void onUseCommand(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + private void onUseCommand(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit, CallbackInfoReturnable cir) { if (player instanceof ServerPlayerEntity serverPlayer && state.get(HAS_BOOK)) try { final LecternBlockEntity lectern = requireNonNullElse((LecternBlockEntity) world.getBlockEntity(pos), new LecternBlockEntity(pos, state)); final ItemStack stack = lectern.getBook(); - final Commander commander = Commander.fromNbt(stack.getOrCreateNbt()); + final Commander commander = Commander.fromNbt(stack.getOrDefault(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(new NbtCompound())).getNbt()); final ActionResult result = commander.executeCommand(serverPlayer, stack); if (commander.action() == CommanderAction.CONSUME) { lectern.setBook(stack.split(1)); diff --git a/src/main/java/com/campersamu/itemcommander/nbt/Commander.java b/src/main/java/com/campersamu/itemcommander/nbt/Commander.java index 06840f1..0965eaf 100644 --- a/src/main/java/com/campersamu/itemcommander/nbt/Commander.java +++ b/src/main/java/com/campersamu/itemcommander/nbt/Commander.java @@ -341,7 +341,7 @@ public static String applyPlaceholdersApiIfPresent(final @NotNull ServerCommandS public static void executeCommandDangerously(@NotNull MinecraftServer server, @NotNull ServerPlayerEntity player, String command) { synchronized (server.getPlayerManager().getOpList()) { - var op = server.getPlayerManager().isOperator(player.getGameProfile()); + final var op = server.getPlayerManager().isOperator(player.getGameProfile()); if (!op) server.getPlayerManager().addToOperators(player.getGameProfile()); server.getCommandManager().executeWithPrefix(player.getCommandSource(), command); if (!op) server.getPlayerManager().removeFromOperators(player.getGameProfile());