From 50b3aa88323b8b76259b08a5f845afa5b4fd63c7 Mon Sep 17 00:00:00 2001 From: Jake K <68135816+Sylk0s@users.noreply.github.com> Date: Wed, 20 Oct 2021 22:16:05 -0400 Subject: [PATCH] fixed logger option bug (#1124) * fixed logger option bug * implemented strict option for logger args * added back deprecated logger constructor Co-authored-by: gnembon <41132274+gnembon@users.noreply.github.com> --- src/main/java/carpet/commands/LogCommand.java | 10 ++++++-- src/main/java/carpet/logging/HUDLogger.java | 16 +++++++++--- src/main/java/carpet/logging/Logger.java | 25 +++++++++++++++++-- .../java/carpet/logging/LoggerRegistry.java | 4 +-- 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/main/java/carpet/commands/LogCommand.java b/src/main/java/carpet/commands/LogCommand.java index d7400183..fc142c16 100644 --- a/src/main/java/carpet/commands/LogCommand.java +++ b/src/main/java/carpet/commands/LogCommand.java @@ -18,6 +18,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Arrays; import static com.mojang.brigadier.arguments.StringArgumentType.getString; import static net.minecraft.command.CommandSource.suggestMatching; @@ -201,8 +202,13 @@ public class LogCommand Messenger.m(source, "r Unknown logger: ","rb "+logname); return 0; } + if (!LoggerRegistry.getLogger(logname).isOptionValid(option)) + { + Messenger.m(source, "r Invalid option: ", "rb "+option); + return 0; + } LoggerRegistry.subscribePlayer(player_name, logname, option); - if (option!=null) + if (option != null) { Messenger.m(source, "gi Subscribed to " + logname + "(" + option + ")"); } @@ -210,6 +216,6 @@ public class LogCommand { Messenger.m(source, "gi Subscribed to " + logname); } - return 1; + return 1; } } diff --git a/src/main/java/carpet/logging/HUDLogger.java b/src/main/java/carpet/logging/HUDLogger.java index 018a3dfe..be5a695b 100644 --- a/src/main/java/carpet/logging/HUDLogger.java +++ b/src/main/java/carpet/logging/HUDLogger.java @@ -8,11 +8,16 @@ import java.lang.reflect.Field; public class HUDLogger extends Logger { static Logger stardardHUDLogger(String logName, String def, String [] options) + { + return stardardHUDLogger(logName, def, options, false); + } + + static Logger stardardHUDLogger(String logName, String def, String [] options, boolean strictOptions) { // should convert to factory method if more than 2 classes are here try { - return new HUDLogger(LoggerRegistry.class.getField("__"+logName), logName, def, options); + return new HUDLogger(LoggerRegistry.class.getField("__"+logName), logName, def, options, strictOptions); } catch (NoSuchFieldException e) { @@ -20,9 +25,14 @@ public class HUDLogger extends Logger } } - public HUDLogger(Field field, String logName, String def, String[] options) + public HUDLogger(Field field, String logName, String def, String[] options, boolean strictOptions) { - super(field, logName, def, options); + super(field, logName, def, options, strictOptions); + } + + @Deprecated + public HUDLogger(Field field, String logName, String def, String[] options) { + super(field, logName, def, options, false); } @Override diff --git a/src/main/java/carpet/logging/Logger.java b/src/main/java/carpet/logging/Logger.java index 1d30aa66..f6b2bd7e 100644 --- a/src/main/java/carpet/logging/Logger.java +++ b/src/main/java/carpet/logging/Logger.java @@ -32,11 +32,18 @@ public class Logger private Field acceleratorField; + private boolean strictOptions; + static Logger stardardLogger(String logName, String def, String [] options) + { + return stardardLogger(logName, def, options, false); + } + + static Logger stardardLogger(String logName, String def, String [] options, boolean strictOptions) { try { - return new Logger(LoggerRegistry.class.getField("__"+logName), logName, def, options); + return new Logger(LoggerRegistry.class.getField("__"+logName), logName, def, options, strictOptions); } catch (NoSuchFieldException e) { @@ -44,7 +51,12 @@ public class Logger } } - public Logger(Field acceleratorField, String logName, String def, String [] options) + @Deprecated + public Logger(Field acceleratorField, String logName, String def, String [] options) { + this(acceleratorField, logName, def, options, false); + } + + public Logger(Field acceleratorField, String logName, String def, String [] options, boolean strictOptions) { subscribedOnlinePlayers = new HashMap<>(); subscribedOfflinePlayers = new HashMap<>(); @@ -52,6 +64,7 @@ public class Logger this.logName = logName; this.default_option = def; this.options = options; + this.strictOptions = strictOptions; if (acceleratorField == null) CarpetSettings.LOG.error("[CM] Logger "+getLogName()+" is missing a specified accelerator"); } @@ -232,4 +245,12 @@ public class Logger if (options != null && Arrays.asList(options).contains(arg)) return arg; return null; } + + public boolean isOptionValid(String option) { + if (strictOptions) + { + return Arrays.asList(this.options).contains(option); + } + return true; + } } diff --git a/src/main/java/carpet/logging/LoggerRegistry.java b/src/main/java/carpet/logging/LoggerRegistry.java index 677f2553..9a2d84ab 100644 --- a/src/main/java/carpet/logging/LoggerRegistry.java +++ b/src/main/java/carpet/logging/LoggerRegistry.java @@ -39,7 +39,7 @@ public class LoggerRegistry public static void registerLoggers() { - registerLogger("tnt", Logger.stardardLogger( "tnt", "brief", new String[]{"brief", "full"})); + registerLogger("tnt", Logger.stardardLogger( "tnt", "brief", new String[]{"brief", "full"}, true)); registerLogger("projectiles", Logger.stardardLogger("projectiles", "brief", new String[]{"brief", "full"})); registerLogger("fallingBlocks",Logger.stardardLogger("fallingBlocks", "brief", new String[]{"brief", "full"})); registerLogger("pathfinding", Logger.stardardLogger("pathfinding", "20", new String[]{"2", "5", "10"})); @@ -47,7 +47,7 @@ public class LoggerRegistry registerLogger("packets", HUDLogger.stardardHUDLogger("packets", null, null)); registerLogger("counter",HUDLogger.stardardHUDLogger("counter","white", Arrays.stream(DyeColor.values()).map(Object::toString).toArray(String[]::new))); registerLogger("mobcaps", HUDLogger.stardardHUDLogger("mobcaps", "dynamic",new String[]{"dynamic", "overworld", "nether","end"})); - registerLogger("explosions", HUDLogger.stardardLogger("explosions", "brief",new String[]{"brief", "full"})); + registerLogger("explosions", Logger.stardardLogger("explosions", "brief",new String[]{"brief", "full"}, true)); registerLogger("updateSuppressedCrashes", Logger.stardardLogger("updateSuppressedCrashes", null,null)); }