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); + } } }