From 70a89c0de3a99538f6d41627a9052ebfd1f2fe6c Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 30 May 2025 18:51:29 +0800 Subject: [PATCH] 0.0.55.1 --- .../craftengine/bukkit/util/PlayerUtils.java | 32 ++++++++++++++----- .../craftengine/bukkit/util/Reflections.java | 17 ++++++++++ gradle.properties | 2 +- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/PlayerUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/PlayerUtils.java index df5882de3..df9821ed7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/PlayerUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/PlayerUtils.java @@ -4,6 +4,7 @@ import com.mojang.datafixers.util.Pair; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.plugin.network.BukkitNetworkManager; +import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.RandomUtils; import org.bukkit.Location; import org.bukkit.entity.Item; @@ -20,29 +21,44 @@ import java.util.List; import static java.util.Objects.requireNonNull; -public class PlayerUtils { +public final class PlayerUtils { + private PlayerUtils() { + } - private PlayerUtils() {} + public static void resendItemInHand(@NotNull final Player player) { + ItemStack itemInHand = player.getInventory().getItemInMainHand(); + if (ItemUtils.isEmpty(itemInHand)) return; + Object serverPlayer = FastNMS.INSTANCE.method$CraftPlayer$getHandle(player); + try { + Object inventoryMenu = Reflections.field$Player$inventoryMenu.get(serverPlayer); + int containerId = Reflections.field$AbstractContainerMenu$containerId.getInt(inventoryMenu); + int heldItemSlot = player.getInventory().getHeldItemSlot(); + int stateId = (int) Reflections.method$AbstractContainerMenu$incrementStateId.invoke(inventoryMenu); + + } catch (ReflectiveOperationException e) { + CraftEngine.instance().logger().warn("Failed to resend item in hand", e); + } + } public static void dropItem(@NotNull Player player, @NotNull ItemStack itemStack, boolean retainOwnership, boolean noPickUpDelay, boolean throwRandomly) { requireNonNull(player, "player"); requireNonNull(itemStack, "itemStack"); Location location = player.getLocation().clone(); - Item item = player.getWorld().dropItem(player.getEyeLocation().clone().subtract(new Vector(0,0.3,0)), itemStack); + Item item = player.getWorld().dropItem(player.getEyeLocation().clone().subtract(new Vector(0, 0.3, 0)), itemStack); item.setPickupDelay(noPickUpDelay ? 0 : 40); item.setOwner(player.getUniqueId()); if (retainOwnership) { item.setThrower(player.getUniqueId()); } if (throwRandomly) { - double d1 = RandomUtils.generateRandomDouble(0,1) * 0.5f; - double d2 = RandomUtils.generateRandomDouble(0,1) * (Math.PI * 2); + double d1 = RandomUtils.generateRandomDouble(0, 1) * 0.5f; + double d2 = RandomUtils.generateRandomDouble(0, 1) * (Math.PI * 2); item.setVelocity(new Vector(-Math.sin(d2) * d1, 0.2f, Math.cos(d2) * d1)); } else { - double d1 = Math.sin(location.getPitch() * (Math.PI/180)); + double d1 = Math.sin(location.getPitch() * (Math.PI / 180)); double d2 = RandomUtils.generateRandomDouble(0, 0.02); - double d3 = RandomUtils.generateRandomDouble(0,1) * (Math.PI * 2); - Vector vector = location.getDirection().multiply(0.3).setY(-d1 * 0.3 + 0.1 + (RandomUtils.generateRandomDouble(0,1) - RandomUtils.generateRandomDouble(0,1)) * 0.1); + double d3 = RandomUtils.generateRandomDouble(0, 1) * (Math.PI * 2); + Vector vector = location.getDirection().multiply(0.3).setY(-d1 * 0.3 + 0.1 + (RandomUtils.generateRandomDouble(0, 1) - RandomUtils.generateRandomDouble(0, 1)) * 0.1); vector.add(new Vector(Math.cos(d3) * d2, 0, Math.sin(d3) * d2)); item.setVelocity(vector); } 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 ea7173512..1abb38755 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 @@ -6982,4 +6982,21 @@ public class Reflections { "nbt.Tag" ) ); + + public static final Class clazz$InventoryMenu = requireNonNull( + BukkitReflectionUtils.findReobfOrMojmapClass( + "world.inventory.ContainerPlayer", + "world.inventory.InventoryMenu" + ) + ); + + public static final Field field$Player$inventoryMenu = requireNonNull( + ReflectionUtils.getDeclaredField(clazz$Player, clazz$InventoryMenu, 0) + ); + + public static final Method method$AbstractContainerMenu$incrementStateId = requireNonNull( + ReflectionUtils.getMethod( + clazz$AbstractContainerMenu, int.class, new String[]{"incrementStateId", "k"} + ) + ); } diff --git a/gradle.properties b/gradle.properties index 5aefedf21..a14fbf0fd 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] -project_version=0.0.55 +project_version=0.0.55.1 config_version=34 lang_version=14 project_group=net.momirealms