9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-25 01:49:30 +00:00

修复1.21.5中键pick物品

This commit is contained in:
XiaoMoMi
2025-05-07 21:08:05 +08:00
parent c13f01c159
commit d49e466158
2 changed files with 16 additions and 5 deletions

View File

@@ -54,6 +54,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.util.RayTraceResult;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.Nullable;
import java.lang.reflect.InvocationTargetException;
import java.nio.charset.StandardCharsets;
@@ -1479,7 +1480,7 @@ public class PacketConsumers {
if (state == null) return;
Key itemId = state.settings().itemId();
if (itemId == null) return;
pickItem(player, itemId);
pickItem(player, itemId, pos, null);
}
// 1.21.4+
@@ -1518,18 +1519,24 @@ public class PacketConsumers {
private static void handlePickItemFromEntityOnMainThread(Player player, LoadedFurniture furniture) throws Exception {
Key itemId = furniture.config().settings().itemId();
if (itemId == null) return;
pickItem(player, itemId);
pickItem(player, itemId, null, FastNMS.INSTANCE.method$CraftEntity$getHandle(furniture.baseEntity()));
}
private static void pickItem(Player player, Key itemId) throws IllegalAccessException, InvocationTargetException {
private static void pickItem(Player player, Key itemId, @Nullable Object blockPos, @Nullable Object entity) throws IllegalAccessException, InvocationTargetException {
ItemStack itemStack = BukkitCraftEngine.instance().itemManager().buildCustomItemStack(itemId, BukkitCraftEngine.instance().adapt(player));
if (itemStack == null) {
CraftEngine.instance().logger().warn("Item: " + itemId + " is not a valid item");
return;
}
assert Reflections.method$ServerGamePacketListenerImpl$tryPickItem != null;
Reflections.method$ServerGamePacketListenerImpl$tryPickItem.invoke(
Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)), FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack));
if (VersionHelper.isOrAbove1_21_5()) {
Reflections.method$ServerGamePacketListenerImpl$tryPickItem.invoke(
Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)),
FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack), blockPos, entity, true);
} else {
Reflections.method$ServerGamePacketListenerImpl$tryPickItem.invoke(
Reflections.field$ServerPlayer$connection.get(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)), FastNMS.INSTANCE.method$CraftItemStack$asNMSCopy(itemStack));
}
}
public static final BiConsumer<NetWorkUser, ByteBufPacketEvent> ADD_ENTITY_BYTEBUFFER = (user, event) -> {

View File

@@ -5029,6 +5029,10 @@ public class Reflections {
);
public static final Method method$ServerGamePacketListenerImpl$tryPickItem =
VersionHelper.isOrAbove1_21_5() ?
ReflectionUtils.getDeclaredMethod(
clazz$ServerGamePacketListenerImpl, void.class, clazz$ItemStack, clazz$BlockPos, clazz$Entity, boolean.class
) :
ReflectionUtils.getDeclaredMethod(
clazz$ServerGamePacketListenerImpl, void.class, clazz$ItemStack
);