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 2982da04f..1fa8de87e 100644 --- a/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java +++ b/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java @@ -35,8 +35,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 e58dbbf30..57b434164 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/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; + } + }; } 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; 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 d391fed8e..46795525d 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 a2388d121..acc83d986 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 @@ -172,7 +172,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."); @@ -254,12 +256,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 e53cd4df0..78b6c123d 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 @@ -180,11 +180,6 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { return dataFolder; } - @Override - public boolean isDebug() { - return true; - } - @Override public Language getLanguage() { return LangUtil.getLanguage(); @@ -302,6 +297,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/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(); 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 {