From 7ad97e77c353367b555f428cc87f8a378b2fb824 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 4 Apr 2025 23:52:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A6=81=E7=94=A8=E5=8E=9F?= =?UTF-8?q?=E7=89=88=E9=85=8D=E6=96=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bukkit/loader/src/main/resources/config.yml | 7 +++++++ .../item/recipe/BukkitRecipeManager.java | 18 ++++++++++++++++-- .../generation/AbstractModelGenerator.java | 1 - .../craftengine/core/plugin/config/Config.java | 15 +++++++++++++++ 4 files changed, 38 insertions(+), 3 deletions(-) diff --git a/bukkit/loader/src/main/resources/config.yml b/bukkit/loader/src/main/resources/config.yml index 5624e7bd8..9fededa9d 100644 --- a/bukkit/loader/src/main/resources/config.yml +++ b/bukkit/loader/src/main/resources/config.yml @@ -152,7 +152,14 @@ image: sign: true recipe: + # Enable the plugin's recipe system enable: true + # Disable vanilla recipes + disable-vanilla-recipes: + # Disable all vanilla recipes + all: false + # Disable the recipes in list + list: [] gui: browser: 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 a026bee0f..c047c60cd 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 @@ -297,6 +297,7 @@ public class BukkitRecipeManager extends AbstractRecipeManager { @Override public void unload() { + if (!Config.enableRecipeSystem()) return; super.unload(); try { if (VersionHelper.isVersionNewerThan1_21_2()) { @@ -310,6 +311,7 @@ public class BukkitRecipeManager extends AbstractRecipeManager { @Override public void delayedLoad() { + if (!Config.enableRecipeSystem()) return; this.injectDataPackRecipes(); } @@ -368,12 +370,23 @@ public class BukkitRecipeManager extends AbstractRecipeManager { for (Object pack : selected) { packResources.add(Reflections.method$Pack$open.invoke(pack)); } + + boolean hasDisabledAny = !Config.disabledVanillaRecipes().isEmpty(); try (AutoCloseable resourceManager = (AutoCloseable) Reflections.constructor$MultiPackResourceManager.newInstance(Reflections.instance$PackType$SERVER_DATA, packResources)) { Map scannedResources = (Map) Reflections.method$FileToIdConverter$listMatchingResources.invoke(fileToIdConverter, resourceManager); for (Map.Entry entry : scannedResources.entrySet()) { Key id = extractKeyFromResourceLocation(entry.getKey().toString()); - // Maybe it's unregistered by other plugins - if (Bukkit.getRecipe(new NamespacedKey(id.namespace(), id.value())) == null) { + // now CraftEngine takes over everything +// // Maybe it's unregistered by other plugins +// if (Bukkit.getRecipe(new NamespacedKey(id.namespace(), id.value())) == null) { +// continue; +// } + if (Config.disableAllVanillaRecipes()) { + this.delayedTasksOnMainThread.add(() -> unregisterPlatformRecipe(id)); + continue; + } + if (hasDisabledAny && Config.disabledVanillaRecipes().contains(id)) { + this.delayedTasksOnMainThread.add(() -> unregisterPlatformRecipe(id)); continue; } markAsDataPackRecipe(id); @@ -423,6 +436,7 @@ public class BukkitRecipeManager extends AbstractRecipeManager { @Override public void runDelayedSyncTasks() { + if (!Config.enableRecipeSystem()) return; try { // run delayed tasks for (Runnable r : this.delayedTasksOnMainThread) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java index db58ad265..90ce13fca 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/model/generation/AbstractModelGenerator.java @@ -40,7 +40,6 @@ public abstract class AbstractModelGenerator implements ModelGenerator { if (!ResourceLocation.isValid(model.parentModelPath())) { TranslationManager.instance().log("warning.config.model.generation.parent.invalid_resource_location", path.toString(), id.toString(), model.parentModelPath()); } - for (Map.Entry texture : model.texturesOverride().entrySet()) { if (!ResourceLocation.isValid(texture.getValue())) { TranslationManager.instance().log("warning.config.model.generation.texture.invalid_resource_location", path.toString(), id.toString(), texture.getKey(), texture.getValue()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java index e0bb910ba..41469ac5f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java @@ -17,6 +17,7 @@ import net.momirealms.craftengine.core.plugin.PluginProperties; import net.momirealms.craftengine.core.plugin.locale.TranslationManager; import net.momirealms.craftengine.core.plugin.logger.filter.DisconnectLogFilter; import net.momirealms.craftengine.core.util.AdventureHelper; +import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.MiscUtils; import net.momirealms.craftengine.core.util.ReflectionUtils; @@ -30,6 +31,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.*; +import java.util.stream.Collectors; public class Config { private static Config instance; @@ -105,7 +107,10 @@ public class Config { protected boolean furniture$hide_base_entity; protected boolean block$sound_system$enable; + protected boolean recipe$enable; + protected boolean recipe$disable_vanilla_recipes$all; + protected Set recipe$disable_vanilla_recipes$list; protected boolean item$non_italic_tag; @@ -259,6 +264,8 @@ public class Config { // recipe recipe$enable = config.getBoolean("recipe.enable", true); + recipe$disable_vanilla_recipes$all = config.getBoolean("recipe.disable-vanilla-recipes.all", false); + recipe$disable_vanilla_recipes$list = config.getStringList("recipe.disable-vanilla-recipes.list").stream().map(Key::of).collect(Collectors.toSet()); // image image$illegal_characters_filter$anvil = config.getBoolean("image.illegal-characters-filter.anvil", true); @@ -350,6 +357,14 @@ public class Config { return instance.recipe$enable; } + public static boolean disableAllVanillaRecipes() { + return instance.recipe$disable_vanilla_recipes$all; + } + + public static Set disabledVanillaRecipes() { + return instance.recipe$disable_vanilla_recipes$list; + } + public static boolean nonItalic() { return instance.item$non_italic_tag; }