From 6b35c86e9844b405e504058e6bb06a15c580de42 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Mon, 2 Jun 2025 19:06:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(compatibility):=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E5=A4=9A=E7=89=88=E6=9C=ACmm=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mythicmobs/CraftEngineItemDrop.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java index 0fcdd1867..8c144b4c5 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java @@ -7,18 +7,24 @@ import io.lumine.mythic.api.drops.DropMetadata; import io.lumine.mythic.api.drops.IItemDrop; import io.lumine.mythic.api.skills.SkillCaster; import io.lumine.mythic.bukkit.BukkitAdapter; +import io.lumine.mythic.bukkit.adapters.BukkitItemStack; import io.lumine.mythic.core.drops.droppables.ItemDrop; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.core.item.CustomItem; import net.momirealms.craftengine.core.item.ItemBuildContext; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.MCUtils; +import net.momirealms.craftengine.core.util.ReflectionUtils; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; +import java.lang.reflect.Constructor; + public class CraftEngineItemDrop extends ItemDrop implements IItemDrop { private final CustomItem customItem; + private static final Constructor constructor$BukkitItemStack = ReflectionUtils.getConstructor(BukkitItemStack.class, ItemStack.class); + private static final boolean useReflection = constructor$BukkitItemStack != null; public CraftEngineItemDrop(String line, MythicLineConfig config, CustomItem customItem) { super(line, config); @@ -40,6 +46,19 @@ public class CraftEngineItemDrop extends ItemDrop implements IItemDrop { } int amountInt = MCUtils.fastFloor(amount + 0.5F); ItemStack itemStack = this.customItem.buildItemStack(context, amountInt); - return BukkitAdapter.adapt(itemStack).amount(amountInt); + return adapt(itemStack).amount(amountInt); + } + + private static AbstractItemStack adapt(ItemStack itemStack) { + if (useReflection) { + try { + return (AbstractItemStack) constructor$BukkitItemStack.newInstance(itemStack); + } catch (Exception e) { + CraftEngine.instance().logger().warn("adapt(ItemStack itemStack) error: " + e.getMessage()); + return null; + } + } else { + return BukkitAdapter.adapt(itemStack); + } } }