以下是一个使用 Java 为我的世界 JsMacros 脚本模组编写的代码示例,该代码可以在打开箱子时自动拾取每一个耐久度低于 30 的附魔工具: ```java import net.minecraft.item.ItemStack; import net.minecraft.item.ToolItem; import net.minecraft.nbt.NbtCompound; import net.minecraft.screen.GenericContainerScreenHandler; import net.minecraft.screen.ScreenHandler; import net.minecraft.util.Identifier; import net.minecraft.util.registry.Registry; import java.util.Objects; // 定义一个类来处理箱子物品检查和拾取逻辑 public class AutoPickupEnchantedTools { // 检查是否是附魔工具且耐久度低于 30 public static boolean isEnchantedToolWithLowDurability(ItemStack stack) { // 检查物品是否是工具 if (stack.getItem() instanceof ToolItem) { // 检查物品是否有附魔标签 NbtCompound tag = stack.getNbt(); if (tag != null && tag.contains("Enchantments")) { // 获取物品的最大耐久度 int maxDurability = stack.getMaxDamage(); // 获取物品当前的耐久度 int currentDurability = maxDurability - stack.getDamage(); // 检查耐久度是否低于 30 return currentDurability < 30; } } return false; } // 处理打开箱子事件 public static void onOpenContainer(ScreenHandler handler) { // 检查是否是普通箱子界面 if (handler instanceof GenericContainerScreenHandler) { // 遍历箱子中的每一个槽位 for (int i = 0; i < handler.slots.size(); i++) { ItemStack stack = handler.getSlot(i).getStack(); // 检查物品是否是附魔工具且耐久度低于 30 if (isEnchantedToolWithLowDurability(stack)) { // 模拟点击该槽位来拾取物品 handler.onButtonClick(Objects.requireNonNull(net.minecraft.client.MinecraftClient.getInstance().player), i); } } } } } ``` 额外需要注意的逻辑点 1. 该代码假设 JsMacros 环境已经正确配置了 Minecraft 的 Java 环境,并且可以访问 Minecraft 的相关类和方法。 2. 模拟点击槽位来拾取物品的方式可能在不同版本的 Minecraft 或 JsMacros 中有所不同,需要根据实际情况进行调整。 3. 代码中没有处理物品拾取后背包满的情况,可能会导致物品丢失,需要根据需求添加相应的逻辑。 [2025-07-17 12:19:55 | AI写代码神器 | 599点数解答]