diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/BukkitItemEntity.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/BukkitItemEntity.java new file mode 100644 index 000000000..449fc5ebb --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/BukkitItemEntity.java @@ -0,0 +1,17 @@ +package net.momirealms.craftengine.bukkit.entity; + +import net.momirealms.craftengine.bukkit.item.BukkitItemManager; +import net.momirealms.craftengine.core.entity.ItemEntity; +import org.bukkit.entity.Item; + +public class BukkitItemEntity extends BukkitEntity implements ItemEntity { + + public BukkitItemEntity(Item entity) { + super(entity); + } + + @Override + public net.momirealms.craftengine.core.item.Item getItem() { + return BukkitItemManager.instance().wrap(((Item) platformEntity()).getItemStack()); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java index 5052d3700..9f38f16d0 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/listener/ItemEventListener.java @@ -4,6 +4,7 @@ import io.papermc.paper.event.block.CompostItemEvent; import net.momirealms.craftengine.bukkit.api.BukkitAdaptors; import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent; import net.momirealms.craftengine.bukkit.entity.BukkitEntity; +import net.momirealms.craftengine.bukkit.entity.BukkitItemEntity; import net.momirealms.craftengine.bukkit.item.BukkitCustomItem; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.nms.FastNMS; @@ -594,7 +595,7 @@ public class ItemEventListener implements Listener { } Cancellable dummy = Cancellable.dummy(); customItem.execute(PlayerOptionalContext.of(serverPlayer, ContextHolder.builder() - .withParameter(DirectContextParameters.ENTITY, new BukkitEntity(itemDrop)) + .withParameter(DirectContextParameters.ENTITY, new BukkitItemEntity(itemDrop)) .withParameter(DirectContextParameters.POSITION, LocationUtils.toWorldPosition(itemDrop.getLocation())) .withParameter(DirectContextParameters.EVENT, dummy) ), EventTrigger.PICK_UP); diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/ItemEntity.java b/core/src/main/java/net/momirealms/craftengine/core/entity/ItemEntity.java new file mode 100644 index 000000000..77483b9c1 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/ItemEntity.java @@ -0,0 +1,8 @@ +package net.momirealms.craftengine.core.entity; + +import net.momirealms.craftengine.core.item.Item; + +public interface ItemEntity { + + Item getItem(); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/StringKeyConstructor.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/StringKeyConstructor.java index 9b2493a61..10f7f8bea 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/StringKeyConstructor.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/StringKeyConstructor.java @@ -38,7 +38,6 @@ public class StringKeyConstructor extends SafeConstructor { this.path = path; } - private boolean isVersionMatch(String versionSpec) { int index = versionSpec.indexOf('~'); // 没有范围值 diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/AbstractChainParameterContext.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/AbstractChainParameterContext.java index f85e82333..2ca6c9257 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/AbstractChainParameterContext.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/AbstractChainParameterContext.java @@ -21,6 +21,7 @@ public abstract class AbstractChainParameterContext extends AbstractCommonContex CHAIN_PARAMETERS.put(DirectContextParameters.OFF_HAND_ITEM, itemProvider); CHAIN_PARAMETERS.put(DirectContextParameters.FURNITURE_ITEM, itemProvider); CHAIN_PARAMETERS.put(DirectContextParameters.ITEM_IN_HAND, itemProvider); + CHAIN_PARAMETERS.put(DirectContextParameters.ITEM, itemProvider); } @SuppressWarnings("unchecked") diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/DirectContextParameters.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/DirectContextParameters.java index d2389c8df..2191c4da9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/DirectContextParameters.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/DirectContextParameters.java @@ -48,6 +48,7 @@ public final class DirectContextParameters { public static final ContextKey UUID = ContextKey.direct("uuid"); public static final ContextKey> MAIN_HAND_ITEM = ContextKey.direct("main_hand_item"); public static final ContextKey> OFF_HAND_ITEM = ContextKey.direct("off_hand_item"); + public static final ContextKey> ITEM = ContextKey.direct("item"); public static final ContextKey CUSTOM_BLOCK = ContextKey.direct("custom_block"); public static final ContextKey BLOCK = ContextKey.direct("block"); public static final ContextKey TIME = ContextKey.direct("time"); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/EntityParameterProvider.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/EntityParameterProvider.java index 27529a7e5..628b8d54c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/EntityParameterProvider.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/context/parameter/EntityParameterProvider.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.core.plugin.context.parameter; import net.momirealms.craftengine.core.entity.Entity; +import net.momirealms.craftengine.core.entity.ItemEntity; import net.momirealms.craftengine.core.plugin.context.ChainParameterProvider; import net.momirealms.craftengine.core.plugin.context.ContextKey; import net.momirealms.craftengine.core.util.MiscUtils; @@ -25,6 +26,12 @@ public class EntityParameterProvider implements ChainParameterProvider { CONTEXT_FUNCTIONS.put(DirectContextParameters.NAME, Entity::name); CONTEXT_FUNCTIONS.put(DirectContextParameters.UUID, Entity::uuid); CONTEXT_FUNCTIONS.put(DirectContextParameters.WORLD, Entity::world); + CONTEXT_FUNCTIONS.put(DirectContextParameters.ITEM, e -> { + if (e instanceof ItemEntity itemEntity) { + return itemEntity.getItem(); + } + return null; + }); } @SuppressWarnings("unchecked")