diff --git a/bukkit/loader/src/main/resources/commands.yml b/bukkit/loader/src/main/resources/commands.yml
index 125d3e971..81f4a1076 100644
--- a/bukkit/loader/src/main/resources/commands.yml
+++ b/bukkit/loader/src/main/resources/commands.yml
@@ -76,6 +76,27 @@ totem_animation:
- /craftengine feature totem-animation
- /ce feature totem-animation
+enable_resource:
+ enable: true
+ permission: ce.command.admin.resource
+ usage:
+ - /craftengine resource enable
+ - /ce resource enable
+
+disable_resource:
+ enable: true
+ permission: ce.command.admin.resource
+ usage:
+ - /craftengine resource disable
+ - /ce resource disable
+
+list_resource:
+ enable: true
+ permission: ce.command.admin.resource
+ usage:
+ - /craftengine resource list
+ - /ce resource list
+
# Debug commands
debug_set_block:
enable: true
diff --git a/bukkit/loader/src/main/resources/translations/en.yml b/bukkit/loader/src/main/resources/translations/en.yml
index 007676fe9..eee50f283 100644
--- a/bukkit/loader/src/main/resources/translations/en.yml
+++ b/bukkit/loader/src/main/resources/translations/en.yml
@@ -54,6 +54,11 @@ command.search_usage.not_found: "No usage found for this item"
command.search_recipe.no_item: "Please hold an item before running this command"
command.search_usage.no_item: "Please hold an item before running this command"
command.totem_animation.failure.not_totem: "Item '' is not minecraft:totem_of_undying"
+command.resource.enable.success: "Enabled resource . Run /ce reload all to apply changes"
+command.resource.enable.failure.unknown: "Unknown resource "
+command.resource.disable.success: "Disabled resource . Run /ce reload all to apply changes"
+command.resource.disable.failure.unknown: "Unknown resource "
+command.resource.list: "Enabled resources(): Disabled resources(): "
warning.config.image.duplicated: "Issue found in file - Duplicated image ''."
warning.config.image.lack_height: "Issue found in file - The image '' is missing the required 'height' argument."
warning.config.image.height_smaller_than_ascent: "Issue found in file - The image '' violates the bitmap image rule: 'height' should be no lower than 'ascent'."
diff --git a/bukkit/loader/src/main/resources/translations/zh_cn.yml b/bukkit/loader/src/main/resources/translations/zh_cn.yml
index 66acc8f30..0f03c5226 100644
--- a/bukkit/loader/src/main/resources/translations/zh_cn.yml
+++ b/bukkit/loader/src/main/resources/translations/zh_cn.yml
@@ -54,6 +54,11 @@ command.search_usage.not_found: "找不到此物品的用途"
command.search_recipe.no_item: "请手持物品后再执行此命令"
command.search_usage.no_item: "请手持物品后再执行此命令"
command.totem_animation.failure.not_totem: "'' 不是 totem_of_undying 类型"
+command.resource.enable.success: "已启用 . 执行 /ce reload all 以应用更改"
+command.resource.enable.failure.unknown: "未知资源 "
+command.resource.disable.success: "已禁用 . 执行 /ce reload all 以应用更改"
+command.resource.disable.failure.unknown: "未知资源 "
+command.resource.list: "启用的资源(): 禁用的资源(): "
warning.config.image.duplicated: "在文件 中发现问题 - 图片 '' 重复定义"
warning.config.image.lack_height: "在文件 中发现问题 - 图片 '' 缺少必要的 'height' 高度参数"
warning.config.image.height_smaller_than_ascent: "在文件 中发现问题 - 图片 '' 违反位图规则:'height' 高度值不应小于 'ascent' 基准线高度"
diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java
index 515ac12ec..556ceaf64 100644
--- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java
+++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java
@@ -46,7 +46,10 @@ public class BukkitCommandManager extends AbstractCommandManager
new DebugSetBlockCommand(this, plugin),
new DebugSpawnFurnitureCommand(this, plugin),
new DebugTargetBlockCommand(this, plugin),
- new TotemAnimationCommand(this, plugin)
+ new TotemAnimationCommand(this, plugin),
+ new EnableResourceCommand(this, plugin),
+ new DisableResourceCommand(this, plugin),
+ new ListResourceCommand(this, plugin)
));
final LegacyPaperCommandManager manager = (LegacyPaperCommandManager) getCommandManager();
manager.settings().set(ManagerSetting.ALLOW_UNSAFE_REGISTRATION, true);
diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DisableResourceCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DisableResourceCommand.java
new file mode 100644
index 000000000..c92513366
--- /dev/null
+++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/DisableResourceCommand.java
@@ -0,0 +1,72 @@
+package net.momirealms.craftengine.bukkit.plugin.command.feature;
+
+import dev.dejvokep.boostedyaml.YamlDocument;
+import net.kyori.adventure.text.Component;
+import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature;
+import net.momirealms.craftengine.core.pack.Pack;
+import net.momirealms.craftengine.core.plugin.CraftEngine;
+import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager;
+import net.momirealms.craftengine.core.plugin.locale.MessageConstants;
+import org.bukkit.command.CommandSender;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.incendo.cloud.Command;
+import org.incendo.cloud.context.CommandContext;
+import org.incendo.cloud.context.CommandInput;
+import org.incendo.cloud.parser.standard.StringParser;
+import org.incendo.cloud.suggestion.Suggestion;
+import org.incendo.cloud.suggestion.SuggestionProvider;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.concurrent.CompletableFuture;
+
+public class DisableResourceCommand extends BukkitCommandFeature {
+
+ public DisableResourceCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) {
+ super(commandManager, plugin);
+ }
+
+ @Override
+ public Command.Builder extends CommandSender> assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) {
+ return builder
+ .flag(manager.flagBuilder("silent").withAliases("s"))
+ .required("pack", StringParser.stringComponent(StringParser.StringMode.GREEDY).suggestionProvider(new SuggestionProvider<>() {
+ @Override
+ public @NonNull CompletableFuture extends @NonNull Iterable extends @NonNull Suggestion>> suggestionsFuture(@NonNull CommandContext