From c029cf6a1d095e49eb8f315199bdc0ac80b6a7f0 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Tue, 8 Jul 2025 20:39:12 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mythicmobs/CraftEngineItemDrop.java | 2 -- .../mythicmobs/MythicMobsListener.java | 1 - .../worldedit/FastAsyncWorldEditDelegate.java | 2 -- .../furniture/BukkitFurnitureElement.java | 2 -- .../bukkit/item/BukkitItemManager.java | 9 ++---- .../bukkit/plugin/BukkitPlatform.java | 3 -- .../plugin/network/BukkitNetworkManager.java | 2 +- .../bukkit/util/ResourcePackUtils.java | 5 --- .../bukkit/world/BukkitWorldManager.java | 1 - common-files/src/main/resources/config.yml | 11 +++++-- .../entity/furniture/FurnitureExtraData.java | 6 ++-- .../core/pack/AbstractPackManager.java | 14 --------- .../craftengine/core/plugin/CraftEngine.java | 9 ------ .../craftengine/core/plugin/Plugin.java | 3 -- .../core/plugin/config/Config.java | 29 ++++++++++++++--- .../core/plugin/logger/Debugger.java | 31 +++++++++++++++++++ 16 files changed, 70 insertions(+), 60 deletions(-) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/logger/Debugger.java diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java index 8c144b4c5..9c582cf1d 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/CraftEngineItemDrop.java @@ -29,12 +29,10 @@ public class CraftEngineItemDrop extends ItemDrop implements IItemDrop { public CraftEngineItemDrop(String line, MythicLineConfig config, CustomItem customItem) { super(line, config); this.customItem = customItem; - CraftEngine.instance().debug(() -> "[MM调试] " + customItem.id() + " 注册成功"); } @Override public AbstractItemStack getDrop(DropMetadata dropMetadata, double amount) { - CraftEngine.instance().debug(() -> "[MM调试] getDrop() dropMetadata={" + dropMetadata + "}, amount={" + amount + "}"); ItemBuildContext context = ItemBuildContext.EMPTY; SkillCaster caster = dropMetadata.getCaster(); if (caster != null && caster.getEntity() instanceof AbstractPlayer abstractPlayer) { diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/MythicMobsListener.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/MythicMobsListener.java index 9d59cab3a..22101993b 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/MythicMobsListener.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/mythicmobs/MythicMobsListener.java @@ -20,7 +20,6 @@ public class MythicMobsListener implements Listener { public void onMythicDropLoad(MythicDropLoadEvent event) { if (!event.getDropName().equalsIgnoreCase("craftengine")) return; String argument = event.getArgument(); - plugin.debug(() -> "[MM调试] " + argument); Key itemId = Key.of(argument); this.plugin.itemManager().getCustomItem(itemId).ifPresent(customItem -> { String line = event.getContainer().getConfigLine(); diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/worldedit/FastAsyncWorldEditDelegate.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/worldedit/FastAsyncWorldEditDelegate.java index e08be5472..2263c7f25 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/worldedit/FastAsyncWorldEditDelegate.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/worldedit/FastAsyncWorldEditDelegate.java @@ -211,7 +211,6 @@ public class FastAsyncWorldEditDelegate extends AbstractDelegateExtent { int newStateId = ordinalToIbdID[newBlock.getOrdinal()]; int oldStateId = ordinalToIbdID[oldBlock.getOrdinal()]; this.brokenChunks.add(ChunkPos.of(chunkX, chunkZ)); - //CraftEngine.instance().debug(() -> "Processing block at " + blockX + ", " + blockY + ", " + blockZ + ": " + oldStateId + " -> " + newStateId); if (BlockStateUtils.isVanillaBlock(newStateId) && BlockStateUtils.isVanillaBlock(oldStateId)) return; try { CEChunk ceChunk = Optional.ofNullable(this.ceWorld.getChunkAtIfLoaded(chunkX, chunkZ)) @@ -231,7 +230,6 @@ public class FastAsyncWorldEditDelegate extends AbstractDelegateExtent { private void saveAllChunks() { try { for (CEChunk ceChunk : this.chunksToSave) { - CraftEngine.instance().debug(() -> "Saving chunk " + ceChunk.chunkPos()); this.ceWorld.worldDataStorage().writeChunkAt(ceChunk.chunkPos(), ceChunk); } this.chunksToSave.clear(); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java index b0ffeb3d9..f108d5e2a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/BukkitFurnitureElement.java @@ -13,7 +13,6 @@ import net.momirealms.craftengine.core.entity.furniture.Furniture; import net.momirealms.craftengine.core.entity.furniture.FurnitureElement; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.data.FireworkExplosion; -import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.world.WorldPosition; import org.bukkit.Material; @@ -70,7 +69,6 @@ public class BukkitFurnitureElement extends AbstractFurnitureElement { List cachedValues = new ArrayList<>(this.commonValues); Item item = BukkitItemManager.instance().createWrappedItem(item(), null); if (item == null) { - CraftEngine.instance().debug(() -> "Failed to create furniture element because item " + item() + " not found"); item = BukkitItemManager.instance().wrap(new ItemStack(Material.BARRIER)); } else { if (color != null) { 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 583162725..59648daf9 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 @@ -24,6 +24,7 @@ import net.momirealms.craftengine.core.pack.AbstractPackManager; import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.context.ContextHolder; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; +import net.momirealms.craftengine.core.plugin.logger.Debugger; import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.registry.Holder; import net.momirealms.craftengine.core.registry.WritableRegistry; @@ -97,9 +98,7 @@ public class BukkitItemManager extends AbstractItemManager { if (wrapped == null) return Optional.empty(); return this.networkItemHandler.s2c(wrapped, player).map(Item::getItem); } catch (Throwable e) { - if (Config.debug()) { - this.plugin.logger().warn("Failed to handle s2c items.", e); - } + Debugger.ITEM.warn(() -> "Failed to handle s2c items.", e); return Optional.empty(); } } @@ -110,9 +109,7 @@ public class BukkitItemManager extends AbstractItemManager { if (wrapped == null) return Optional.empty(); return this.networkItemHandler.c2s(wrapped).map(Item::getItem); } catch (Throwable e) { - if (Config.debug()) { - this.plugin.logger().warn("Failed to handle c2s items.", e); - } + Debugger.COMMON.warn(() -> "Failed to handle c2s items.", e); return Optional.empty(); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java index 798b1ea17..e1055644a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitPlatform.java @@ -4,7 +4,6 @@ import com.google.gson.JsonElement; import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.MRegistryOps; -import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.Platform; import net.momirealms.craftengine.core.plugin.locale.LocalizedResourceConfigException; import net.momirealms.sparrow.nbt.CompoundTag; @@ -28,7 +27,6 @@ public class BukkitPlatform implements Platform { Map map = (Map) MRegistryOps.NBT.convertTo(MRegistryOps.JAVA, tag); return map.get("root"); } catch (CommandSyntaxException e) { - CraftEngine.instance().debug(e::getMessage); throw new LocalizedResourceConfigException("warning.config.type.snbt.invalid_syntax", e, nbt); } } @@ -45,7 +43,6 @@ public class BukkitPlatform implements Platform { CompoundTag map = (CompoundTag) MRegistryOps.NBT.convertTo(MRegistryOps.SPARROW_NBT, tag); return map.get("root"); } catch (CommandSyntaxException e) { - CraftEngine.instance().debug(e::getMessage); throw new LocalizedResourceConfigException("warning.config.type.snbt.invalid_syntax", e, nbt); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java index 6b58133c5..1ee3c9921 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/BukkitNetworkManager.java @@ -200,7 +200,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes this.resetUserArray(); if (VersionHelper.isFolia()) { player.getScheduler().runAtFixedRate(plugin.javaPlugin(), (t) -> user.tick(), - () -> plugin.debug(() -> "Player " + player.getName() + "'s entity scheduler is retired"), 1, 1); + () -> {}, 1, 1); } } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ResourcePackUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ResourcePackUtils.java index 38513873b..cbfb26b86 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ResourcePackUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/ResourcePackUtils.java @@ -1,13 +1,8 @@ package net.momirealms.craftengine.bukkit.util; import net.momirealms.craftengine.bukkit.nms.FastNMS; -import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.CoreReflections; -import net.momirealms.craftengine.bukkit.plugin.reflection.minecraft.NetworkReflections; -import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; -import org.jetbrains.annotations.Nullable; -import java.util.Queue; import java.util.UUID; public final class ResourcePackUtils { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java index 33fd76243..61aa6dabb 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/world/BukkitWorldManager.java @@ -277,7 +277,6 @@ public class BukkitWorldManager implements WorldManager, Listener { if (ceChunk != null) { if (ceChunk.dirty()) { try { - this.plugin.debug(() -> "[Dirty Chunk]" + pos + " unloaded"); world.worldDataStorage().writeChunkAt(pos, ceChunk); ceChunk.setDirty(false); } catch (IOException e) { diff --git a/common-files/src/main/resources/config.yml b/common-files/src/main/resources/config.yml index c76632d9f..06eec3ece 100644 --- a/common-files/src/main/resources/config.yml +++ b/common-files/src/main/resources/config.yml @@ -1,7 +1,5 @@ # Do not modify this value config-version: '${config_version}' -# Enables or disables debug mode -debug: false # Enables or disables metrics collection via BStats metrics: true # Enables automatic update checks @@ -407,4 +405,11 @@ chunk-system: # When you edit a map locally using CraftEngine fabric mod, the custom block data is not immediately synchronized with the # server's CraftEngine internal data. Enabling this option will synchronize the data when the chunk is loaded. # (This option only slightly impacts performance, which has been fully optimized, so you don't need to worry too much.) - sync-custom-blocks-on-chunk-load: false \ No newline at end of file + sync-custom-blocks-on-chunk-load: false + +# Enables or disables debug mode +debug: + common: false + packet: false + furniture: false + item: false \ No newline at end of file diff --git a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java index 520c4ecd3..c7c5704e9 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java +++ b/core/src/main/java/net/momirealms/craftengine/core/entity/furniture/FurnitureExtraData.java @@ -2,7 +2,7 @@ package net.momirealms.craftengine.core.entity.furniture; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.plugin.CraftEngine; -import net.momirealms.craftengine.core.plugin.config.Config; +import net.momirealms.craftengine.core.plugin.logger.Debugger; import net.momirealms.sparrow.nbt.CompoundTag; import net.momirealms.sparrow.nbt.NBT; @@ -39,9 +39,7 @@ public class FurnitureExtraData { try { return Optional.of(CraftEngine.instance().itemManager().fromByteArray(data)); } catch (Exception e) { - if (Config.debug()) { - CraftEngine.instance().logger().warn("Failed to read item data", e); - } + Debugger.FURNITURE.warn(() -> "Failed to read furniture item data", e); return Optional.empty(); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index dbaad936f..25aae41d0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -587,7 +587,6 @@ public abstract class AbstractPackManager implements PackManager { exception.setId(cached.prefix() + "." + key); } TranslationManager.instance().log(e.node(), e.arguments()); - this.plugin.debug(e::node); } catch (Exception e) { this.plugin.logger().warn("Unexpected error loading file " + cached.filePath() + " - '" + parser.sectionId()[0] + "." + key + "'. Please find the cause according to the stacktrace or seek developer help. Additional info: " + GsonHelper.get().toJson(configEntry.getValue()), e); } @@ -800,7 +799,6 @@ public abstract class AbstractPackManager implements PackManager { @SuppressWarnings("DuplicatedCode") private void validateResourcePack(Path path) { - long time1 = System.currentTimeMillis(); Path[] rootPaths; try { rootPaths = FileUtils.collectOverlays(path).toArray(new Path[0]); @@ -931,9 +929,6 @@ public abstract class AbstractPackManager implements PackManager { } } - long time2 = System.currentTimeMillis(); - this.plugin.debug(() -> "Took " + (time2 - time1) + "ms collecting assets"); - // 验证font的贴图是否存在 label: for (Map.Entry> entry : imageToFonts.asMap().entrySet()) { Key key = entry.getKey(); @@ -947,9 +942,6 @@ public abstract class AbstractPackManager implements PackManager { TranslationManager.instance().log("warning.config.resource_pack.generation.missing_font_texture", entry.getValue().stream().distinct().toList().toString(), imagePath); } - long time3 = System.currentTimeMillis(); - this.plugin.debug(() -> "Took " + (time3 - time2) + "ms verifying font textures"); - // 验证物品模型是否存在,验证的同时去收集贴图 label: for (Map.Entry> entry : modelToItems.asMap().entrySet()) { Key modelResourceLocation = entry.getKey(); @@ -996,9 +988,6 @@ public abstract class AbstractPackManager implements PackManager { TranslationManager.instance().log("warning.config.resource_pack.generation.missing_block_model", entry.getValue().stream().distinct().toList().toString(), modelPath); } - long time4 = System.currentTimeMillis(); - this.plugin.debug(() -> "Took " + (time4 - time3) + "ms verifying models and their parents"); - // 验证贴图是否存在 boolean enableObf = Config.enableObfuscation() && Config.enableRandomResourceLocation(); label: for (Map.Entry> entry : imageToModels.asMap().entrySet()) { @@ -1031,9 +1020,6 @@ public abstract class AbstractPackManager implements PackManager { TranslationManager.instance().log("warning.config.resource_pack.generation.texture_not_in_atlas", key.toString()); } } - - long time5 = System.currentTimeMillis(); - this.plugin.debug(() -> "Took " + (time5 - time4) + "ms verifying model textures"); } private void verifyParentModelAndCollectTextures(Key sourceModelLocation, JsonObject sourceModelJson, Path[] rootPaths, Multimap imageToModels, Set collected) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java index 730340185..1b46513f7 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java @@ -40,12 +40,10 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.function.Consumer; -import java.util.function.Supplier; public abstract class CraftEngine implements Plugin { private static CraftEngine instance; protected PluginLogger logger; - protected Consumer> debugger = (s) -> {}; protected Config config; protected Platform platform; protected ClassPathAppender classPathAppender; @@ -123,8 +121,6 @@ public abstract class CraftEngine implements Plugin { long time1 = System.currentTimeMillis(); // firstly reload main config this.config.load(); - // reset debugger - this.debugger = Config.debug() ? (s) -> logger.info("[Debug] " + s.get()) : (s) -> {}; // now we reload the translations this.translationManager.reload(); // clear the outdated cache by reloading the managers @@ -342,11 +338,6 @@ public abstract class CraftEngine implements Plugin { return logger; } - @Override - public void debug(Supplier message) { - debugger.accept(message); - } - @Override public boolean isReloading() { return isReloading; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java index ea2888a6d..3521c3914 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java @@ -28,7 +28,6 @@ import net.momirealms.craftengine.core.world.WorldManager; import java.io.File; import java.io.InputStream; import java.nio.file.Path; -import java.util.function.Supplier; public interface Plugin { @@ -90,8 +89,6 @@ public interface Plugin { VanillaLootManager vanillaLootManager(); - void debug(Supplier message); - CompatibilityManager compatibilityManager(); GlobalVariableManager globalVariableManager(); 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 8664b674a..0f60f163d 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 @@ -44,11 +44,15 @@ public class Config { private long size; protected boolean firstTime = true; - protected boolean debug; protected boolean checkUpdate; protected boolean metrics; protected boolean filterConfigurationPhaseDisconnect; + protected boolean debug$common; + protected boolean debug$packet; + protected boolean debug$item; + protected boolean debug$furniture; + protected boolean resource_pack$remove_tinted_leaves_particle; protected boolean resource_pack$generate_mod_assets; protected boolean resource_pack$override_uniform_font; @@ -231,12 +235,17 @@ public class Config { plugin.translationManager().forcedLocale(TranslationManager.parseLocale(config.getString("forced-locale", ""))); // basics - debug = config.getBoolean("debug", false); metrics = config.getBoolean("metrics", false); checkUpdate = config.getBoolean("update-checker", false); filterConfigurationPhaseDisconnect = config.getBoolean("filter-configuration-phase-disconnect", false); DisconnectLogFilter.instance().setEnable(filterConfigurationPhaseDisconnect); + // debug + debug$common = config.getBoolean("debug.common", false); + debug$packet = config.getBoolean("debug.packet", false); + debug$item = config.getBoolean("debug.item", false); + debug$furniture = config.getBoolean("debug.furniture", false); + // resource pack resource_pack$override_uniform_font = config.getBoolean("resource-pack.override-uniform-font", false); resource_pack$generate_mod_assets = config.getBoolean("resource-pack.generate-mod-assets", false); @@ -401,8 +410,20 @@ public class Config { return instance.configVersion; } - public static boolean debug() { - return instance.debug; + public static boolean debugCommon() { + return instance.debug$common; + } + + public static boolean debugPacket() { + return instance.debug$packet; + } + + public static boolean debugItem() { + return instance.debug$item; + } + + public static boolean debugFurniture() { + return instance.debug$furniture; } public static boolean checkUpdate() { diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/logger/Debugger.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/logger/Debugger.java new file mode 100644 index 000000000..73b99e665 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/logger/Debugger.java @@ -0,0 +1,31 @@ +package net.momirealms.craftengine.core.plugin.logger; + +import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.config.Config; + +import java.util.function.Supplier; + +public enum Debugger { + COMMON(Config::debugCommon), + PACKET(Config::debugPacket), + FURNITURE(Config::debugFurniture), + ITEM(Config::debugItem); + + private final Supplier condition; + + Debugger(Supplier condition) { + this.condition = condition; + } + + public void debug(Supplier message) { + if (this.condition.get()) { + CraftEngine.instance().logger().info("[DEBUG] " + message.get()); + } + } + + public void warn(Supplier message, Throwable e) { + if (this.condition.get()) { + CraftEngine.instance().logger().warn("[DEBUG] " + message.get(), e); + } + } +}