From f4906abe0d2f35ad565d5271a12d731df35f3745 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 11 Jul 2025 04:19:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/item/BukkitItemManager.java | 31 ++++++++++++------- .../item/recipe/BukkitRecipeManager.java | 1 - .../craftengine/core/item/ItemManager.java | 2 ++ .../item/recipe/AbstractRecipeManager.java | 2 ++ .../gui/category/ItemBrowserManagerImpl.java | 7 ++--- gradle.properties | 2 +- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java index 927c64665..0df7ed64b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/BukkitItemManager.java @@ -298,7 +298,11 @@ public class BukkitItemManager extends AbstractItemManager { @Override public ItemStack buildItemStack(Key id, @Nullable Player player) { - return Optional.ofNullable(buildCustomItemStack(id, player)).orElseGet(() -> createVanillaItemStack(id)); + ItemStack customItem = buildCustomItemStack(id, player); + if (customItem != null) { + return customItem; + } + return createVanillaItemStack(id); } @Override @@ -306,26 +310,31 @@ public class BukkitItemManager extends AbstractItemManager { return Optional.ofNullable(customItems.get(id)).map(it -> it.buildItem(player)).orElse(null); } + @Override + public Item createWrappedItem(Key id, @Nullable Player player) { + CustomItem customItem = this.customItems.get(id); + if (customItem != null) { + return customItem.buildItem(player); + } + ItemStack itemStack = this.createVanillaItemStack(id); + if (itemStack != null) { + return wrap(itemStack); + } + return null; + } + private ItemStack createVanillaItemStack(Key id) { NamespacedKey key = NamespacedKey.fromString(id.toString()); if (key == null) { - return this.emptyStack; + return null; } Object item = FastNMS.INSTANCE.method$Registry$getValue(MBuiltInRegistries.ITEM, KeyUtils.toResourceLocation(id)); if (item == null) { - return this.emptyStack; + return null; } return FastNMS.INSTANCE.method$CraftItemStack$asCraftMirror(FastNMS.INSTANCE.constructor$ItemStack(item, 1)); } - @Override - public Item createWrappedItem(Key id, @Nullable Player player) { - return Optional.ofNullable(this.customItems.get(id)).map(it -> it.buildItem(player)).orElseGet(() -> { - ItemStack itemStack = createVanillaItemStack(id); - return wrap(itemStack); - }); - } - @Override public @NotNull Item wrap(ItemStack itemStack) { if (itemStack == null) return this.empty; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java index 9b3f0b628..f5cdddee2 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/BukkitRecipeManager.java @@ -10,7 +10,6 @@ import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.plugin.reflection.bukkit.CraftBukkitReflections; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; -import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MItems; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistries; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistryOps; import net.momirealms.craftengine.bukkit.util.KeyUtils; diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java index 279be34f1..d499e9b92 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/ItemManager.java @@ -43,8 +43,10 @@ public interface ItemManager extends Manageable, ModelGenerator { @Nullable T buildItemStack(Key id, @Nullable Player player); + @Nullable Item createCustomWrappedItem(Key id, @Nullable Player player); + @Nullable Item createWrappedItem(Key id, @Nullable Player player); @NotNull diff --git a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeManager.java b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeManager.java index b3eb7cbb0..f89adad9a 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/item/recipe/AbstractRecipeManager.java @@ -173,6 +173,8 @@ public abstract class AbstractRecipeManager implements RecipeManager { markAsCustomRecipe(id); registerInternalRecipe(id, recipe); registerPlatformRecipe(id, recipe); + } catch (LocalizedResourceConfigException e) { + throw e; } catch (Exception e) { CraftEngine.instance().logger().warn("Failed to register custom recipe " + id, e); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java index 5cbd7632a..499b9bc3c 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/gui/category/ItemBrowserManagerImpl.java @@ -157,7 +157,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { List iconList = this.categoryOnMainPage.stream().map(it -> { Item item = this.plugin.itemManager().createWrappedItem(it.icon(), player); - if (item == null) { + if (ItemUtils.isEmpty(item)) { this.plugin.logger().warn("Can't not find item " + it.icon() + " for category icon"); return null; } @@ -242,7 +242,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { Category subCategory = this.byId.get(Key.of(subCategoryId)); if (subCategory == null) return null; Item item = this.plugin.itemManager().createWrappedItem(subCategory.icon(), player); - if (item == null) { + if (ItemUtils.isEmpty(item)) { if (!subCategory.icon().equals(ItemKeys.AIR)) { item = this.plugin.itemManager().createWrappedItem(ItemKeys.BARRIER, player); item.customNameJson(AdventureHelper.componentToJson(AdventureHelper.miniMessage().deserialize(subCategory.displayName(), ItemBuildContext.EMPTY.tagResolvers()))); @@ -261,7 +261,7 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { Key itemId = Key.of(it); Item item = this.plugin.itemManager().createWrappedItem(itemId, player); boolean canGoFurther; - if (item == null) { + if (ItemUtils.isEmpty(item)) { if (!itemId.equals(ItemKeys.AIR)) { item = this.plugin.itemManager().createWrappedItem(ItemKeys.BARRIER, player); item.customNameJson(AdventureHelper.componentToJson(Component.text(it).decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE).color(NamedTextColor.RED))); @@ -499,7 +499,6 @@ public class ItemBrowserManagerImpl implements ItemBrowserManager { } })); - List> templates = new ArrayList<>(); Optional.ofNullable(recipe.template()).ifPresent(it -> { for (UniqueKey in : it.items()) { diff --git a/gradle.properties b/gradle.properties index 841342929..abddf08df 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx1G # Rule: [major update].[feature update].[bug fix] project_version=0.0.59.7 config_version=41 -lang_version=21 +lang_version=22 project_group=net.momirealms latest_supported_version=1.21.7