From 75cce7f1d863b64379f55e9351c5bc9cef3c998d Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Mon, 4 Aug 2025 01:38:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=86=E5=BE=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/item/factory/BukkitItemFactory.java | 9 ++++----- .../bukkit/item/recipe/RecipeEventListener.java | 2 +- .../bukkit/plugin/injector/RecipeInjector.java | 2 +- .../bukkit/plugin/user/BukkitServerPlayer.java | 2 +- .../craftengine/bukkit/util/InteractUtils.java | 8 ++++---- .../craftengine/core/item/AbstractItem.java | 13 ++++++++----- .../net/momirealms/craftengine/core/item/Item.java | 8 +++++--- .../craftengine/core/item/ItemFactory.java | 2 +- .../momirealms/craftengine/core/util/UniqueKey.java | 2 -- gradle.properties | 2 +- 10 files changed, 26 insertions(+), 24 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java index b042fe12c..19838cdc9 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/BukkitItemFactory.java @@ -8,6 +8,7 @@ import net.momirealms.craftengine.bukkit.util.ItemTags; import net.momirealms.craftengine.bukkit.util.KeyUtils; import net.momirealms.craftengine.core.item.ExternalItemSource; import net.momirealms.craftengine.core.item.ItemFactory; +import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.item.ItemWrapper; import net.momirealms.craftengine.core.item.data.JukeboxPlayable; import net.momirealms.craftengine.core.item.setting.EquipmentData; @@ -84,14 +85,14 @@ public abstract class BukkitItemFactory> extend @Override protected Key vanillaId(W item) { Object i = FastNMS.INSTANCE.method$ItemStack$getItem(item.getLiteralObject()); - if (i == null) return null; + if (i == null) return ItemKeys.AIR; return KeyUtils.resourceLocationToKey(FastNMS.INSTANCE.method$Registry$getKey(MBuiltInRegistries.ITEM, i)); } @Override protected Key id(W item) { if (FastNMS.INSTANCE.method$ItemStack$isEmpty(item.getLiteralObject())) { - return null; + return ItemKeys.AIR; } return customId(item).orElse(vanillaId(item)); } @@ -118,14 +119,12 @@ public abstract class BukkitItemFactory> extend } @Override - protected boolean is(W item, Key itemTag) { + protected boolean hasItemTag(W item, Key itemTag) { Object literalObject = item.getLiteralObject(); Object tag = ItemTags.getOrCreate(itemTag); return FastNMS.INSTANCE.method$ItemStack$is(literalObject, tag); } - - @Override protected void setJavaComponent(W item, Object type, Object value) { throw new UnsupportedOperationException("This feature is only available on 1.20.5+"); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java index 328ff1000..eb1004ba3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java @@ -368,7 +368,7 @@ public class RecipeEventListener implements Listener { repairItem = item; break; } - if (wrappedFirst.is(tag)) { + if (wrappedFirst.hasItemTag(tag)) { repairItem = item; break; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java index 623bdf0e2..208dc973a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/injector/RecipeInjector.java @@ -345,7 +345,7 @@ public class RecipeInjector { private static final Predicate> IS_DYEABLE = VersionHelper.isOrAbove1_20_5() ? - (item -> item.is(ItemTags.DYEABLE)) : + (item -> item.hasItemTag(ItemTags.DYEABLE)) : (item -> { Object itemLike = FastNMS.INSTANCE.method$ItemStack$getItem(item.getLiteralObject()); return CoreReflections.clazz$DyeableLeatherItem.isInstance(itemLike); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index fd6156d23..a2c501de6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -638,7 +638,7 @@ public class BukkitServerPlayer extends Player { if (canInstabuild() && (itemMaterial == Material.DEBUG_STICK || itemMaterial == Material.TRIDENT || (VersionHelper.isOrAbove1_20_5() && itemMaterial == MaterialUtils.MACE) - || item.is(ItemTags.SWORDS))) { + || item.hasItemTag(ItemTags.SWORDS))) { return; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java index ec33bb09f..34c7cf27e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/InteractUtils.java @@ -45,7 +45,7 @@ public class InteractUtils { private InteractUtils() {} static { - registerInteraction(BlockKeys.NOTE_BLOCK, (player, item, blockState, result) -> result.getDirection() != Direction.UP || !item.is(NOTE_BLOCK_TOP_INSTRUMENTS)); + registerInteraction(BlockKeys.NOTE_BLOCK, (player, item, blockState, result) -> result.getDirection() != Direction.UP || !item.hasItemTag(NOTE_BLOCK_TOP_INSTRUMENTS)); registerInteraction(BlockKeys.CAKE, (player, item, blockState, result) -> !canEat(player, false)); registerInteraction(BlockKeys.CANDLE_CAKE, (player, item, blockState, result) -> !canEat(player, false)); registerInteraction(BlockKeys.WHITE_CANDLE_CAKE, (player, item, blockState, result) -> !canEat(player, false)); @@ -409,14 +409,14 @@ public class InteractUtils { registerEntityInteraction(EntityTypeKeys.BAMBOO_RAFT, (player, entity, item) -> !player.isSneaking()); registerEntityInteraction(EntityTypeKeys.MINECART, (player, entity, item) -> !player.isSneaking()); registerEntityInteraction(EntityTypeKeys.PARROT, (player, entity, item) -> { - if (item != null && item.is(Key.of("parrot_poisonous_food"))) return true; + if (item != null && item.hasItemTag(Key.of("parrot_poisonous_food"))) return true; return canFeed(entity, item) || isPetOwner(player, entity); }); registerEntityInteraction(EntityTypeKeys.HAPPY_GHAST, (player, entity, item) -> { if (item != null && item.vanillaId().equals(ItemKeys.HARNESS)) return true; if (entity instanceof HappyGhast happyGhast && !player.isSneaking()) { ItemStack bodyItem = happyGhast.getEquipment().getItem(EquipmentSlot.BODY); - return BukkitItemManager.instance().wrap(bodyItem).is(Key.of("harnesses")); + return BukkitItemManager.instance().wrap(bodyItem).hasItemTag(Key.of("harnesses")); } return canFeed(entity, item); }); @@ -499,7 +499,7 @@ public class InteractUtils { } private static boolean canFeed(Entity entity, Item item) { - return entity instanceof Animals && item.is(Key.of(EntityUtils.getEntityType(entity).value() + "_food")); + return entity instanceof Animals && item.hasItemTag(Key.of(EntityUtils.getEntityType(entity).value() + "_food")); } private static boolean hasSaddle(Player player, Entity entity) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java index af97388f6..de299e7ac 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/AbstractItem.java @@ -8,11 +8,14 @@ import net.momirealms.craftengine.core.item.data.Enchantment; import net.momirealms.craftengine.core.item.data.FireworkExplosion; import net.momirealms.craftengine.core.item.data.JukeboxPlayable; import net.momirealms.craftengine.core.item.data.Trim; +import net.momirealms.craftengine.core.item.recipe.UniqueIdItem; import net.momirealms.craftengine.core.item.setting.EquipmentData; import net.momirealms.craftengine.core.util.Color; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.UniqueKey; import net.momirealms.sparrow.nbt.Tag; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Optional; @@ -152,17 +155,17 @@ public class AbstractItem, I> implements Item { } @Override - public Key id() { + public @NotNull Key id() { return this.factory.id(this.item); } @Override - public Key vanillaId() { + public @NotNull Key vanillaId() { return this.factory.vanillaId(this.item); } @Override - public UniqueKey recipeIngredientId() { + public @Nullable UniqueKey recipeIngredientId() { return this.factory.recipeIngredientID(this.item); } @@ -441,8 +444,8 @@ public class AbstractItem, I> implements Item { } @Override - public boolean is(Key itemTag) { - return this.factory.is(this.item, itemTag); + public boolean hasItemTag(Key itemTag) { + return this.factory.hasItemTag(this.item, itemTag); } @Override diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/Item.java b/core/src/main/java/net/momirealms/craftengine/core/item/Item.java index 8e61ca095..7cb3454fa 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/Item.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/Item.java @@ -14,9 +14,11 @@ import net.momirealms.craftengine.core.util.Color; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.UniqueKey; import net.momirealms.sparrow.nbt.Tag; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.Objects; import java.util.Optional; /** @@ -38,10 +40,10 @@ public interface Item { boolean isBlockItem(); - @Nullable + @NotNull Key id(); - @Nullable + @NotNull Key vanillaId(); @Nullable @@ -194,7 +196,7 @@ public interface Item { Item copyWithCount(int count); - boolean is(Key itemTag); + boolean hasItemTag(Key itemTag); Object getLiteralObject(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java index 1391a199d..43de1de6f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemFactory.java @@ -165,7 +165,7 @@ public abstract class ItemFactory, I> { protected abstract void maxStackSize(W item, Integer maxStackSize); - protected abstract boolean is(W item, Key itemTag); + protected abstract boolean hasItemTag(W item, Key itemTag); protected abstract boolean isBlockItem(W item); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java b/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java index 1a4591535..a9e023a57 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/UniqueKey.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.core.util; -import net.momirealms.craftengine.core.item.ItemKeys; import org.jetbrains.annotations.Nullable; import java.util.HashMap; @@ -8,7 +7,6 @@ import java.util.Map; public final class UniqueKey { private static final Map CACHE = new HashMap<>(4096, 0.5f); - public static final UniqueKey AIR = UniqueKey.create(ItemKeys.AIR); private final Key key; diff --git a/gradle.properties b/gradle.properties index 458b1627b..7399a1fc1 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.60.10.3 +project_version=0.0.60.11 config_version=43 lang_version=23 project_group=net.momirealms