From f7ea81cb5198b905b0ab03bbef5375073a0917f5 Mon Sep 17 00:00:00 2001 From: Astrashh Date: Sun, 2 May 2021 11:21:51 +1000 Subject: [PATCH 1/4] Add new debug options to plugin config --- .../java/com/dfsek/terra/api/TerraPlugin.java | 2 - .../api/command/TerraCommandManager.java | 4 +- .../com/dfsek/terra/config/PluginConfig.java | 38 ++++++++++++++++--- common/src/main/resources/config.yml | 6 ++- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 10 ++--- .../dfsek/terra/fabric/TerraFabricPlugin.java | 8 ++-- .../com/dfsek/terra/StandalonePlugin.java | 5 --- .../dfsek/terra/sponge/TerraSpongePlugin.java | 5 --- 8 files changed, 46 insertions(+), 32 deletions(-) diff --git a/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java b/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java index aeeb5e814..679139663 100644 --- a/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java +++ b/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java @@ -31,8 +31,6 @@ public interface TerraPlugin extends LoaderRegistrar { File getDataFolder(); - boolean isDebug(); - Language getLanguage(); CheckedRegistry getConfigRegistry(); diff --git a/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java b/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java index 482aefba9..e58bd236f 100644 --- a/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java +++ b/common/src/main/java/com/dfsek/terra/api/command/TerraCommandManager.java @@ -55,8 +55,8 @@ public class TerraCommandManager implements CommandManager { private void execute(CommandHolder commandHolder, CommandSender sender, List args) throws CommandException { Class commandClass = commandHolder.clazz; - if(commandClass.isAnnotationPresent(DebugCommand.class) && !main.isDebug()) { - sender.sendMessage("Command must be executed with debug mode enabled."); + if(commandClass.isAnnotationPresent(DebugCommand.class) && !main.getTerraConfig().isDebugCommands()) { + sender.sendMessage("Command must be executed with debug commands enabled."); return; } diff --git a/common/src/main/java/com/dfsek/terra/config/PluginConfig.java b/common/src/main/java/com/dfsek/terra/config/PluginConfig.java index e1112dcf4..4efba0ecc 100644 --- a/common/src/main/java/com/dfsek/terra/config/PluginConfig.java +++ b/common/src/main/java/com/dfsek/terra/config/PluginConfig.java @@ -18,9 +18,21 @@ import java.util.jar.JarFile; @SuppressWarnings("FieldMayBeFinal") public class PluginConfig implements ConfigTemplate { - @Value("debug") + @Value("debug.commands") @Default - private boolean debug = false; + private boolean debugCommands = false; + + @Value("debug.log") + @Default + private boolean debugLog = false; + + @Value("debug.profiler") + @Default + private boolean debugProfiler = false; + + @Value("debug.script") + @Default + private boolean debugScript = false; @Value("language") @Default @@ -80,15 +92,31 @@ public class PluginConfig implements ConfigTemplate { } catch(ConfigException | IOException e) { e.printStackTrace(); } - logger.info("DebugLogger: " + isDebug()); + + if(isDebugCommands()) logger.info("Debug commands enabled."); + if(isDebugLogging()) logger.info("Debug logging enabled."); + if(isDebugProfiler()) logger.info("Debug profiler enabled."); + if(isDebugScript()) logger.info("Script debug blocks enabled."); } public String getLanguage() { return language; } - public boolean isDebug() { - return debug; + public boolean isDebugCommands() { + return debugCommands; + } + + public boolean isDebugLogging() { + return debugLog; + } + + public boolean isDebugProfiler() { + return debugProfiler; + } + + public boolean isDebugScript() { + return debugScript; } public long getDataSaveInterval() { diff --git a/common/src/main/resources/config.yml b/common/src/main/resources/config.yml index adb7d8522..21e811d94 100644 --- a/common/src/main/resources/config.yml +++ b/common/src/main/resources/config.yml @@ -1,4 +1,8 @@ -debug: false +debug: + commands: false + log: false + profiler: false + script: false data-save: PT6M language: "en_us" dump-default: true diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java index e65a918fc..d4cc682fb 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java @@ -171,7 +171,9 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { config.load(this); // Load master config.yml LangUtil.load(config.getLanguage(), this); // Load language. - debugLogger.setDebug(isDebug()); + + debugLogger.setDebug(config.isDebugLogging()); + if(config.isDebugProfiler()) profiler.start(); if(!addonRegistry.loadAll()) { getLogger().severe("Failed to load addons. Please correct addon installations to continue."); @@ -253,12 +255,6 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { })); } - @Override - public boolean isDebug() { - return config.isDebug(); - } - - @Override public Language getLanguage() { return LangUtil.getLanguage(); diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 6b7359713..06d24752b 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -177,11 +177,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { return dataFolder; } - @Override - public boolean isDebug() { - return true; - } - @Override public Language getLanguage() { return LangUtil.getLanguage(); @@ -303,6 +298,9 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { LangUtil.load(config.getLanguage(), this); logger.info("Initializing Terra..."); + debugLogger.setDebug(config.isDebugLogging()); + if(config.isDebugProfiler()) profiler.start(); + if(!addonRegistry.loadAll()) { throw new IllegalStateException("Failed to load addons. Please correct addon installations to continue."); } diff --git a/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java b/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java index ff426a5c0..8cf274b36 100644 --- a/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java +++ b/platforms/region/src/main/java/com/dfsek/terra/StandalonePlugin.java @@ -68,11 +68,6 @@ public class StandalonePlugin implements TerraPlugin { return new File("."); } - @Override - public boolean isDebug() { - return true; - } - @Override public Language getLanguage() { try { diff --git a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java index 536850875..e15135a51 100644 --- a/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java +++ b/platforms/sponge/src/main/java/com/dfsek/terra/sponge/TerraSpongePlugin.java @@ -86,11 +86,6 @@ public class TerraSpongePlugin implements TerraPlugin { return privateConfigDir.toFile(); } - @Override - public boolean isDebug() { - return true; - } - @Override public Language getLanguage() { try { From 596ac1c389cf5ce27c60b06af7434f105bc501c5 Mon Sep 17 00:00:00 2001 From: Astrashh Date: Tue, 11 May 2021 15:47:37 +1000 Subject: [PATCH 2/4] Remove isDebug from forge --- .../main/java/com/dfsek/terra/forge/TerraForgePlugin.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java index fe0d33cf1..92aaba20b 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java @@ -332,11 +332,6 @@ public class TerraForgePlugin implements TerraPlugin { return dataFolder; } - @Override - public boolean isDebug() { - return true; - } - @Override public Language getLanguage() { return LangUtil.getLanguage(); From 1209842bcd94084f04c887bec9d8d3867b177d54 Mon Sep 17 00:00:00 2001 From: Astrashh Date: Tue, 11 May 2021 15:48:28 +1000 Subject: [PATCH 3/4] Implement ignorable functions to parser --- .../terra/api/structures/parser/Parser.java | 15 ++++++++++++- .../parser/lang/functions/Function.java | 21 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java b/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java index 9f4ff96db..c6434fbad 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/parser/Parser.java @@ -52,6 +52,7 @@ import java.util.Map; public class Parser { private final String data; private final Map>> functions = new HashMap<>(); + private final List ignoredFunctions = new GlueList<>(); private String id; @@ -64,6 +65,11 @@ public class Parser { return this; } + public Parser ignoreFunction(String name) { + ignoredFunctions.add(name); + return this; + } + public String getID() { return id; } @@ -339,7 +345,10 @@ public class Parser { while(tokens.hasNext()) { Token token = tokens.get(); if(token.getType().equals(Token.Type.BLOCK_END)) break; // Stop parsing at block end. - parsedItems.add(parseItem(tokens, parsedVariables, loop)); + Item parsedItem = parseItem(tokens, parsedVariables, loop); + if (parsedItem != Function.NULL) { + parsedItems.add(parsedItem); + } if(tokens.hasNext() && !token.isLoopLike()) ParserUtil.checkType(tokens.consume(), Token.Type.STATEMENT_END); } return new Block(parsedItems, first.getPosition()); @@ -398,6 +407,10 @@ public class Parser { ParserUtil.checkType(tokens.consume(), Token.Type.GROUP_END); // Remove body end if(fullStatement) ParserUtil.checkType(tokens.get(), Token.Type.STATEMENT_END); + + if(ignoredFunctions.contains(identifier.getContent())) { + return Function.NULL; + } if(functions.containsKey(identifier.getContent())) { FunctionBuilder builder = functions.get(identifier.getContent()); diff --git a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java index aaa826d12..c22d9fae9 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/parser/lang/functions/Function.java @@ -1,6 +1,27 @@ package com.dfsek.terra.api.structures.parser.lang.functions; +import com.dfsek.terra.api.structures.parser.lang.ImplementationArguments; import com.dfsek.terra.api.structures.parser.lang.Returnable; +import com.dfsek.terra.api.structures.parser.lang.variables.Variable; +import com.dfsek.terra.api.structures.tokenizer.Position; + +import java.util.Map; public interface Function extends Returnable { + Function NULL = new Function() { + @Override + public ReturnType returnType() { + return null; + } + + @Override + public Object apply(ImplementationArguments implementationArguments, Map> variableMap) { + return null; + } + + @Override + public Position getPosition() { + return null; + } + }; } From 9b52277d9abc297f905b41fb265b08201ead23ba Mon Sep 17 00:00:00 2001 From: Astrashh Date: Tue, 11 May 2021 15:48:40 +1000 Subject: [PATCH 4/4] Add debugBlock function --- .../dfsek/terra/api/structures/script/StructureScript.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java index 43c80e7f9..6608f3ffd 100644 --- a/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java +++ b/common/src/main/java/com/dfsek/terra/api/structures/script/StructureScript.java @@ -66,6 +66,7 @@ public class StructureScript { parser.registerFunction("block", new BlockFunctionBuilder(main, false)) .registerFunction("dynamicBlock", new BlockFunctionBuilder(main, true)) + .registerFunction("debugBlock", new BlockFunctionBuilder(main, false)) .registerFunction("check", new CheckFunctionBuilder(main)) .registerFunction("structure", new StructureFunctionBuilder(registry, main)) .registerFunction("randomInt", new RandomFunctionBuilder()) @@ -101,6 +102,10 @@ public class StructureScript { .registerFunction("max", new BinaryNumberFunctionBuilder((number, number2) -> FastMath.max(number.doubleValue(), number2.doubleValue()))) .registerFunction("min", new BinaryNumberFunctionBuilder((number, number2) -> FastMath.min(number.doubleValue(), number2.doubleValue()))); + if(!main.getTerraConfig().isDebugScript()) { + parser.ignoreFunction("debugBlock"); + } + block = parser.parse(); this.id = parser.getID(); tempID = id;