From 1e956f1e5748c0c2a73657f574f8778e0640faef Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 04:38:59 +0800 Subject: [PATCH 1/9] =?UTF-8?q?refactor(bukkit):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=BC=A0=E6=A0=87=E4=B8=AD=E9=94=AE=E8=8E=B7=E5=8F=96=E7=89=A9?= =?UTF-8?q?=E5=93=81=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ItemUtils.setItem 方法,使用反射设置玩家背包中的物品 - 在 PacketConsumers 类中使用新的 setItem 方法替换原有的直接设置物品方式 - 添加 Reflections 类中的相关字段,用于物品设置的反射操作 --- .../plugin/network/PacketConsumers.java | 28 +++++++++---------- .../craftengine/bukkit/util/ItemUtils.java | 24 ++++++++++++++++ .../craftengine/bukkit/util/Reflections.java | 13 +++++++++ 3 files changed, 51 insertions(+), 14 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index f6e4ed33d..51c2ed804 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -339,26 +339,26 @@ public class PacketConsumers { if (sameItemSlot < 9) { inventory.setHeldItemSlot(sameItemSlot); ItemStack previousItem = inventory.getItem(slot - 36); - BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> inventory.setItem(slot - 36, previousItem)); + BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> ItemUtils.setItem(inventory, slot - 36, previousItem)); } else { ItemStack sameItem = inventory.getItem(sameItemSlot); int finalSameItemSlot = sameItemSlot; BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> { - inventory.setItem(finalSameItemSlot, new ItemStack(Material.AIR)); - inventory.setItem(slot - 36, sameItem); + ItemUtils.setItem(inventory, finalSameItemSlot, new ItemStack(Material.AIR)); + ItemUtils.setItem(inventory, slot - 36, sameItem); }); } } else { if (item.getAmount() == 1) { if (ItemUtils.isEmpty(inventory.getItem(slot - 36))) { - BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> inventory.setItem(slot - 36, itemStack)); + BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> ItemUtils.setItem(inventory, slot - 36, itemStack)); return; } if (emptySlot != -1) { inventory.setHeldItemSlot(emptySlot); - inventory.setItem(emptySlot, itemStack); + ItemUtils.setItem(inventory, emptySlot, itemStack); } else { - BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> inventory.setItem(slot - 36, itemStack)); + BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> ItemUtils.setItem(inventory, slot - 36, itemStack)); } } } @@ -395,9 +395,9 @@ public class PacketConsumers { if (picked == null) return; inventory.setHeldItemSlot(targetSlot); ItemStack previous = inventory.getItem(targetSlot); - inventory.setItem(targetSlot, picked.clone()); + ItemUtils.setItem(inventory, targetSlot, picked.clone()); if (previous != null) { - inventory.setItem(matchingSlot, previous); + ItemUtils.setItem(inventory, targetSlot, previous); } else { picked.setAmount(0); } @@ -405,13 +405,13 @@ public class PacketConsumers { } else if (player.getGameMode() == GameMode.CREATIVE) { inventory.setHeldItemSlot(targetSlot); ItemStack previous = inventory.getItem(targetSlot); - inventory.setItem(targetSlot, itemStack); + ItemUtils.setItem(inventory, targetSlot, itemStack); if (previous != null) { for (int j = 1; j <= 3; j++) { for (int i = j * 9; i < j * 9 + 9; i++) { ItemStack itemInSlot = inventory.getItem(i); if (ItemUtils.isEmpty(itemInSlot)) { - inventory.setItem(i, previous); + ItemUtils.setItem(inventory, i, previous); return; } } @@ -448,9 +448,9 @@ public class PacketConsumers { if (picked == null) return; inventory.setHeldItemSlot(targetSlot); ItemStack previous = inventory.getItem(targetSlot); - inventory.setItem(targetSlot, picked.clone()); + ItemUtils.setItem(inventory, targetSlot, picked.clone()); if (previous != null) { - inventory.setItem(matchingSlot, previous); + ItemUtils.setItem(inventory, matchingSlot, previous); } else { picked.setAmount(0); } @@ -458,13 +458,13 @@ public class PacketConsumers { } else if (player.getGameMode() == GameMode.CREATIVE) { inventory.setHeldItemSlot(targetSlot); ItemStack previous = inventory.getItem(targetSlot); - inventory.setItem(targetSlot, itemStack); + ItemUtils.setItem(inventory, targetSlot, itemStack); if (previous != null) { for (int j = 1; j <= 3; j++) { for (int i = j * 9; i < j * 9 + 9; i++) { ItemStack itemInSlot = inventory.getItem(i); if (ItemUtils.isEmpty(itemInSlot)) { - inventory.setItem(i, previous); + ItemUtils.setItem(inventory, i, previous); return; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java index c88a13ee5..a46fce973 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java @@ -1,9 +1,14 @@ package net.momirealms.craftengine.bukkit.util; +import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.util.VersionHelper; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.jetbrains.annotations.Contract; +import java.lang.reflect.InvocationTargetException; + public class ItemUtils { @Contract("null -> true") @@ -12,4 +17,23 @@ public class ItemUtils { if (item.getType() == Material.AIR) return true; return item.getAmount() == 0; } + + public static void setItem(PlayerInventory inventory, int slot, ItemStack itemStack) { + try { + Object nmsInventory$getInventory = Reflections.clazz$CraftInventoryPlayer + .getMethod("getInventory").invoke(inventory); + Object nmsInventory$items = Reflections.clazz$Inventory + .getDeclaredField(VersionHelper.isMojmap() ? "items" : "i") + .get(nmsInventory$getInventory); + Object nmsItemStack = Reflections.clazz$CraftItemStack + .getMethod("asNMSCopy", ItemStack.class) + .invoke(null, itemStack); + nmsInventory$items.getClass() + .getMethod("set", int.class, Object.class) + .invoke(nmsInventory$items, slot, nmsItemStack); + } catch (InvocationTargetException | IllegalAccessException | + NoSuchMethodException | NoSuchFieldException e) { + CraftEngine.instance().logger().warn("Failed to set item", e); + } + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 09e4c9847..815e606b3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -3881,4 +3881,17 @@ public class Reflections { ReflectionUtils.getDeclaredField( clazz$RecipeManager, clazz$FeatureFlagSet, 0 ); + + public static final Class clazz$CraftInventoryPlayer = requireNonNull( + ReflectionUtils.getClazz( + BukkitReflectionUtils.assembleCBClass("inventory.CraftInventoryPlayer") + ) + ); + + public static final Class clazz$Inventory = requireNonNull( + ReflectionUtils.getClazz( + BukkitReflectionUtils.assembleMCClass("world.entity.player.Inventory"), + BukkitReflectionUtils.assembleMCClass("world.entity.player.PlayerInventory") + ) + ); } From 7c455fea53c0cff670519cb035e62857ab93b3c9 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 05:20:19 +0800 Subject: [PATCH 2/9] =?UTF-8?q?refactor(bukkit):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=89=A9=E5=93=81=E8=AE=BE=E7=BD=AE=E5=8F=8D=E5=B0=84=E6=93=8D?= =?UTF-8?q?=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了 VersionHelper 的引用,改用新的字段名常量 - 重构了 setItem 方法,使用预先获取的 Method 和 Field 对象 - 新增了相关反射操作的静态字段,提高代码可读性和性能 --- .../craftengine/bukkit/util/ItemUtils.java | 14 +++++------- .../craftengine/bukkit/util/Reflections.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java index a46fce973..618bfc927 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java @@ -1,7 +1,6 @@ package net.momirealms.craftengine.bukkit.util; import net.momirealms.craftengine.core.plugin.CraftEngine; -import net.momirealms.craftengine.core.util.VersionHelper; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; @@ -20,19 +19,16 @@ public class ItemUtils { public static void setItem(PlayerInventory inventory, int slot, ItemStack itemStack) { try { - Object nmsInventory$getInventory = Reflections.clazz$CraftInventoryPlayer - .getMethod("getInventory").invoke(inventory); - Object nmsInventory$items = Reflections.clazz$Inventory - .getDeclaredField(VersionHelper.isMojmap() ? "items" : "i") + Object nmsInventory$getInventory = Reflections.method$CraftInventoryPlayer$getInventory + .invoke(inventory); + Object nmsInventory$items = Reflections.field$Inventory$items .get(nmsInventory$getInventory); - Object nmsItemStack = Reflections.clazz$CraftItemStack - .getMethod("asNMSCopy", ItemStack.class) + Object nmsItemStack = Reflections.method$CraftItemStack$asNMSCopy .invoke(null, itemStack); nmsInventory$items.getClass() .getMethod("set", int.class, Object.class) .invoke(nmsInventory$items, slot, nmsItemStack); - } catch (InvocationTargetException | IllegalAccessException | - NoSuchMethodException | NoSuchFieldException e) { + } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { CraftEngine.instance().logger().warn("Failed to set item", e); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 815e606b3..f2c9d0f46 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -41,6 +41,7 @@ public class Reflections { } public static final Unsafe UNSAFE; + public static final String INVENTORY$ITEMS = VersionHelper.isMojmap() ? "items" : "i"; static { try { @@ -3894,4 +3895,25 @@ public class Reflections { BukkitReflectionUtils.assembleMCClass("world.entity.player.PlayerInventory") ) ); + public static final Method method$CraftInventoryPlayer$getInventory = requireNonNull( + ReflectionUtils.getMethod( + clazz$CraftInventoryPlayer, + new String[]{ "getInventory" } + ) + ); + + public static final Method method$CraftItemStack$asNMSCopy = requireNonNull( + ReflectionUtils.getStaticMethod( + clazz$CraftItemStack, + clazz$ItemStack, + ItemStack.class + ) + ); + + public static final Field field$Inventory$items = requireNonNull( + ReflectionUtils.getDeclaredField( + clazz$Inventory, + INVENTORY$ITEMS + ) + ); } From eb0c525dd7579cddaf30909bb0e07c54d2a67ff4 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 05:42:28 +0800 Subject: [PATCH 3/9] =?UTF-8?q?refactor(bukkit):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=89=A9=E5=93=81=E6=93=8D=E4=BD=9C=E5=8F=8D=E5=B0=84=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用 Reflections 类中已有的 method$NonNullList$set 方法替代动态获取的 set 方法 - 移除冗余的异常捕获 NoSuchMethodException- 新增 NonNullList 相关的类和方法引用 --- .../craftengine/bukkit/util/ItemUtils.java | 5 ++--- .../craftengine/bukkit/util/Reflections.java | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java index 618bfc927..8a8672cf9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java @@ -25,10 +25,9 @@ public class ItemUtils { .get(nmsInventory$getInventory); Object nmsItemStack = Reflections.method$CraftItemStack$asNMSCopy .invoke(null, itemStack); - nmsInventory$items.getClass() - .getMethod("set", int.class, Object.class) + Reflections.method$NonNullList$set .invoke(nmsInventory$items, slot, nmsItemStack); - } catch (InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { + } catch (InvocationTargetException | IllegalAccessException e) { CraftEngine.instance().logger().warn("Failed to set item", e); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index f2c9d0f46..6ada3bc2d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -3916,4 +3916,19 @@ public class Reflections { INVENTORY$ITEMS ) ); + + public static final Class clazz$NonNullList = requireNonNull( + ReflectionUtils.getClazz( + BukkitReflectionUtils.assembleMCClass("core.NonNullList") + ) + ); + + public static final Method method$NonNullList$set = requireNonNull( + ReflectionUtils.getMethod( + clazz$NonNullList, + Object.class, + int.class, + Object.class + ) + ); } From 371e265dabb0dee70ce8471380ae570d524f4b6f Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 05:45:36 +0800 Subject: [PATCH 4/9] =?UTF-8?q?refactor(bukkit):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=89=A9=E5=93=81=E6=93=8D=E4=BD=9C=E5=8F=8D=E5=B0=84=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改了 nmsInventory 变量名方便查看 --- .../net/momirealms/craftengine/bukkit/util/ItemUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java index 8a8672cf9..5d06368d0 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java @@ -19,10 +19,10 @@ public class ItemUtils { public static void setItem(PlayerInventory inventory, int slot, ItemStack itemStack) { try { - Object nmsInventory$getInventory = Reflections.method$CraftInventoryPlayer$getInventory + Object nmsInventory = Reflections.method$CraftInventoryPlayer$getInventory .invoke(inventory); Object nmsInventory$items = Reflections.field$Inventory$items - .get(nmsInventory$getInventory); + .get(nmsInventory); Object nmsItemStack = Reflections.method$CraftItemStack$asNMSCopy .invoke(null, itemStack); Reflections.method$NonNullList$set From c42973ea3a601eb359f83df7fb615ab210a4f4bf Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 05:55:00 +0800 Subject: [PATCH 5/9] =?UTF-8?q?refactor(bukkit):=20=E5=9B=9E=E9=80=801.21.?= =?UTF-8?q?4-=E7=89=88=E6=9C=AC=E9=BC=A0=E6=A0=87=E4=B8=AD=E9=94=AE?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=89=A9=E5=93=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除对 ItemUtils.setItem 的调用回退成 inventory.setItem --- .../bukkit/plugin/network/PacketConsumers.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 51c2ed804..c5cc7288e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -339,26 +339,26 @@ public class PacketConsumers { if (sameItemSlot < 9) { inventory.setHeldItemSlot(sameItemSlot); ItemStack previousItem = inventory.getItem(slot - 36); - BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> ItemUtils.setItem(inventory, slot - 36, previousItem)); + BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> inventory.setItem(slot - 36, previousItem)); } else { ItemStack sameItem = inventory.getItem(sameItemSlot); int finalSameItemSlot = sameItemSlot; BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> { - ItemUtils.setItem(inventory, finalSameItemSlot, new ItemStack(Material.AIR)); - ItemUtils.setItem(inventory, slot - 36, sameItem); + inventory.setItem(finalSameItemSlot, new ItemStack(Material.AIR)); + inventory.setItem(slot - 36, sameItem); }); } } else { if (item.getAmount() == 1) { if (ItemUtils.isEmpty(inventory.getItem(slot - 36))) { - BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> ItemUtils.setItem(inventory, slot - 36, itemStack)); + BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> inventory.setItem(slot - 36, itemStack)); return; } if (emptySlot != -1) { inventory.setHeldItemSlot(emptySlot); ItemUtils.setItem(inventory, emptySlot, itemStack); } else { - BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> ItemUtils.setItem(inventory, slot - 36, itemStack)); + BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> inventory.setItem(slot - 36, itemStack)); } } } From ff96018c57edc32840d5eae9c9437044d68a8d11 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 06:13:31 +0800 Subject: [PATCH 6/9] =?UTF-8?q?fix(bukkit):=20=E4=BF=AE=E5=A4=8D=E6=96=B9?= =?UTF-8?q?=E5=9D=97=E7=A0=B4=E5=9D=8F=E6=97=B6=E7=89=A9=E5=93=81=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E5=AF=BC=E8=87=B4=E7=9A=84=E7=A9=BA=E6=8C=87=E9=92=88?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 BlockEventListener 类中添加对空物品的处理- 当玩家手中物品为空时,使用 "minecraft:air" 作为物品 ID - 优化了方块破坏时的物品检查逻辑,提高了代码的健壮性 --- .../craftengine/bukkit/block/BlockEventListener.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java index 4c2dc73f8..bf998a186 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java @@ -16,6 +16,7 @@ import net.momirealms.craftengine.core.entity.player.InteractionHand; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.loot.parameter.LootParameters; import net.momirealms.craftengine.core.plugin.config.ConfigManager; +import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.context.ContextHolder; import net.momirealms.craftengine.core.world.BlockPos; import net.momirealms.craftengine.core.world.CEWorld; @@ -120,8 +121,14 @@ public class BlockEventListener implements Listener { BukkitServerPlayer serverPlayer = plugin.adapt(player); Item itemInHand = serverPlayer.getItemInHand(InteractionHand.MAIN_HAND); + Key itemId; + if (itemInHand == null) { + itemId = Key.of("minecraft:air"); + } else { + itemId = itemInHand.id(); + } // do not drop if it's not the correct tool - if (!state.settings().isCorrectTool(itemInHand.id())) { + if (!state.settings().isCorrectTool(itemId)) { return; } // drop items From 9a956f95dd488270802379dcecb5d99f196637ca Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 06:17:52 +0800 Subject: [PATCH 7/9] =?UTF-8?q?refactor(bukkit):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=89=A9=E5=93=81=E5=A0=86=E6=A0=88=E8=BD=AC=E6=8D=A2=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 CraftItemStack 的 asNMSCopy 方法替换为 asNMSMirror 方法- 删除 Reflections 类中不再使用的 method$CraftItemStack$asNMSCopy 字段 --- .../net/momirealms/craftengine/bukkit/util/ItemUtils.java | 2 +- .../momirealms/craftengine/bukkit/util/Reflections.java | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java index 5d06368d0..d9dc9695e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ItemUtils.java @@ -23,7 +23,7 @@ public class ItemUtils { .invoke(inventory); Object nmsInventory$items = Reflections.field$Inventory$items .get(nmsInventory); - Object nmsItemStack = Reflections.method$CraftItemStack$asNMSCopy + Object nmsItemStack = Reflections.method$CraftItemStack$asNMSMirror .invoke(null, itemStack); Reflections.method$NonNullList$set .invoke(nmsInventory$items, slot, nmsItemStack); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 6ada3bc2d..f0ffe7c24 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -3902,14 +3902,6 @@ public class Reflections { ) ); - public static final Method method$CraftItemStack$asNMSCopy = requireNonNull( - ReflectionUtils.getStaticMethod( - clazz$CraftItemStack, - clazz$ItemStack, - ItemStack.class - ) - ); - public static final Field field$Inventory$items = requireNonNull( ReflectionUtils.getDeclaredField( clazz$Inventory, From b3eeea6415deea4ac24d62522dd166eb15e9c8ca Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 07:11:16 +0800 Subject: [PATCH 8/9] =?UTF-8?q?fix(bukkit):=20=E4=BF=AE=E5=A4=8D=E5=BF=98?= =?UTF-8?q?=E8=AE=B0=E6=9B=B4=E6=94=B9=E7=9A=84=E5=9C=B0=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../craftengine/bukkit/plugin/network/PacketConsumers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index c5cc7288e..3f83a5e70 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -356,7 +356,7 @@ public class PacketConsumers { } if (emptySlot != -1) { inventory.setHeldItemSlot(emptySlot); - ItemUtils.setItem(inventory, emptySlot, itemStack); + inventory.setItem(emptySlot, itemStack); } else { BukkitCraftEngine.instance().scheduler().sync().runDelayed(() -> inventory.setItem(slot - 36, itemStack)); } From dcdd833e2f7c0bbae4bc9425b57bea8881de1a92 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 07:25:19 +0800 Subject: [PATCH 9/9] =?UTF-8?q?fix(bukkit):=20=E6=97=A0=E6=B3=95=E9=BC=A0?= =?UTF-8?q?=E6=A0=87=E4=B8=AD=E9=94=AE=E8=8E=B7=E5=8F=96=E7=89=A9=E5=93=81?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 PacketConsumers 类中修复了物品获取逻辑的错误 --- .../craftengine/bukkit/plugin/network/PacketConsumers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 3f83a5e70..86e42bb67 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -397,7 +397,7 @@ public class PacketConsumers { ItemStack previous = inventory.getItem(targetSlot); ItemUtils.setItem(inventory, targetSlot, picked.clone()); if (previous != null) { - ItemUtils.setItem(inventory, targetSlot, previous); + ItemUtils.setItem(inventory, matchingSlot, previous); } else { picked.setAmount(0); }