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:
@@ -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) -> {
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user