9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-31 04:46:37 +00:00

feat(compatibility): 解决多版本mm支持

This commit is contained in:
jhqwqmc
2025-06-02 19:06:16 +08:00
parent a39e5d85e8
commit 6b35c86e98

View File

@@ -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<ItemStack> 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<ItemStack> 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);
}
}
}