diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java index ec845170..149605e0 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -53,6 +53,7 @@ import me.lucko.luckperms.common.storage.StorageFactory; import me.lucko.luckperms.common.tracks.TrackManager; import me.lucko.luckperms.common.users.UserManager; import me.lucko.luckperms.common.utils.BufferedRequest; +import me.lucko.luckperms.common.utils.DebugHandler; import me.lucko.luckperms.common.utils.LocaleManager; import me.lucko.luckperms.common.utils.LogFactory; import org.bukkit.World; @@ -91,10 +92,12 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { private CalculatorFactory calculatorFactory; private BufferedRequest updateTaskBuffer; private boolean started = false; + private DebugHandler debugHandler; @Override public void onEnable() { log = LogFactory.wrap(getLogger()); + debugHandler = new DebugHandler(); getLog().info("Loading configuration..."); configuration = new BukkitConfig(this); diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java index 73373b8f..2e9ceac8 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java @@ -50,6 +50,7 @@ import me.lucko.luckperms.common.storage.StorageFactory; import me.lucko.luckperms.common.tracks.TrackManager; import me.lucko.luckperms.common.users.UserManager; import me.lucko.luckperms.common.utils.BufferedRequest; +import me.lucko.luckperms.common.utils.DebugHandler; import me.lucko.luckperms.common.utils.LocaleManager; import me.lucko.luckperms.common.utils.LogFactory; import net.md_5.bungee.api.config.ServerInfo; @@ -80,10 +81,12 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin { private ContextManager contextManager; private CalculatorFactory calculatorFactory; private BufferedRequest updateTaskBuffer; + private DebugHandler debugHandler; @Override public void onEnable() { log = LogFactory.wrap(getLogger()); + debugHandler = new DebugHandler(); getLog().info("Loading configuration..."); configuration = new BungeeConfig(this); diff --git a/common/src/main/java/me/lucko/luckperms/common/LuckPermsPlugin.java b/common/src/main/java/me/lucko/luckperms/common/LuckPermsPlugin.java index 1859e364..c22086fd 100644 --- a/common/src/main/java/me/lucko/luckperms/common/LuckPermsPlugin.java +++ b/common/src/main/java/me/lucko/luckperms/common/LuckPermsPlugin.java @@ -40,6 +40,7 @@ import me.lucko.luckperms.common.storage.Datastore; import me.lucko.luckperms.common.tracks.TrackManager; import me.lucko.luckperms.common.users.UserManager; import me.lucko.luckperms.common.utils.BufferedRequest; +import me.lucko.luckperms.common.utils.DebugHandler; import me.lucko.luckperms.common.utils.LocaleManager; import java.io.File; @@ -70,6 +71,7 @@ public interface LuckPermsPlugin { LocaleManager getLocaleManager(); ContextManager getContextManager(); CalculatorFactory getCalculatorFactory(); + DebugHandler getDebugHandler(); /** * @return the version of the plugin diff --git a/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java b/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java index d2b21a25..564a00d6 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java @@ -58,6 +58,7 @@ public class PermissionCalculator { permission = permission.toLowerCase(); Tristate t = cache.getUnchecked(permission); + plugin.getDebugHandler().printOutput(objectName, permission, t); if (debug) { plugin.getLog().info("Checking if " + objectName + " has permission: " + permission + " - (" + t.toString() + ")"); } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java b/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java index 12a61df9..71cd76ba 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java @@ -62,6 +62,7 @@ public class CommandManager { .add(new NetworkSyncCommand()) .add(new InfoCommand()) .add(new DebugCommand()) + .add(new VerboseCommand()) .add(new ImportCommand()) .add(new ExportCommand()) .add(new QueueCommand()) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/misc/VerboseCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/misc/VerboseCommand.java new file mode 100644 index 00000000..f99f20d9 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/commands/misc/VerboseCommand.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.commands.misc; + +import me.lucko.luckperms.common.LuckPermsPlugin; +import me.lucko.luckperms.common.commands.CommandResult; +import me.lucko.luckperms.common.commands.Sender; +import me.lucko.luckperms.common.commands.SingleMainCommand; +import me.lucko.luckperms.common.constants.Message; +import me.lucko.luckperms.common.constants.Permission; + +import java.util.List; + +public class VerboseCommand extends SingleMainCommand { + public VerboseCommand() { + super("Verbose", "/%s verbose [query]", 1, Permission.VERBOSE); + } + + @Override + protected CommandResult execute(LuckPermsPlugin plugin, Sender sender, List args, String label) { + if (args.isEmpty()) { + sendUsage(sender, label); + return CommandResult.INVALID_ARGS; + } + + if (!args.get(0).equalsIgnoreCase("true") && !args.get(0).equalsIgnoreCase("false")) { + sendUsage(sender, label); + return CommandResult.INVALID_ARGS; + } + + if (args.get(0).equalsIgnoreCase("false")) { + plugin.getDebugHandler().unregister(sender.getUuid()); + Message.VERBOSE_OFF.send(sender); + return CommandResult.SUCCESS; + } + + String query = args.size() == 1 ? "" : args.get(1); + plugin.getDebugHandler().register(sender, query); + if (!query.equals("")) { + Message.VERBOSE_ON_QUERY.send(sender, query); + } else { + Message.VERBOSE_ON.send(sender); + } + + return CommandResult.SUCCESS; + } +} diff --git a/common/src/main/java/me/lucko/luckperms/common/constants/Message.java b/common/src/main/java/me/lucko/luckperms/common/constants/Message.java index 61e1d42f..80c60721 100644 --- a/common/src/main/java/me/lucko/luckperms/common/constants/Message.java +++ b/common/src/main/java/me/lucko/luckperms/common/constants/Message.java @@ -84,6 +84,10 @@ public enum Message { /* * Commands */ + VERBOSE_ON("&bVerbose checking output set to &aTRUE &bfor all permissions.", true), + VERBOSE_ON_QUERY("&bVerbose checking output set to &aTRUE &bfor permissions starting with &f\"{0}\"&b.", true), + VERBOSE_OFF("&bVerbose checking output set to &cFALSE&b.", true), + CREATE_SUCCESS("&b{0}&a was successfully created.", true), DELETE_SUCCESS("&b{0}&a was successfully deleted.", true), RENAME_SUCCESS("&b{0}&a was successfully renamed to &b{1}&a.", true), diff --git a/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java b/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java index e59972e8..95e8a147 100644 --- a/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java +++ b/common/src/main/java/me/lucko/luckperms/common/constants/Permission.java @@ -37,6 +37,7 @@ public enum Permission { SYNC(set("sync"), Type.NONE), INFO(set("info"), Type.NONE), DEBUG(set("debug"), Type.NONE), + VERBOSE(set("verbose"), Type.NONE), IMPORT(set("import"), Type.NONE), CREATE_GROUP(set("creategroup"), Type.NONE), diff --git a/common/src/main/java/me/lucko/luckperms/common/utils/DebugHandler.java b/common/src/main/java/me/lucko/luckperms/common/utils/DebugHandler.java new file mode 100644 index 00000000..763ee8ca --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/utils/DebugHandler.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.utils; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.common.commands.Sender; +import me.lucko.luckperms.common.constants.Message; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class DebugHandler { + private final Map listeners = new ConcurrentHashMap<>(); + + public void printOutput(String checked, String node, Tristate value) { + for (Map.Entry e : listeners.entrySet()) { + if (node.toLowerCase().startsWith(e.getValue().toLowerCase())) { + Message.LOG.send(e.getKey().getSender(), "&7Checking &a" + checked + "&7 for: &a" + node + " &f(&7" + value.toString() + "&f)"); + } + } + } + + public void register(Sender sender, String s) { + listeners.put(new Reciever(sender.getUuid(), sender), s); + } + + public void unregister(UUID uuid) { + listeners.remove(new Reciever(uuid, null)); + } + + @Getter + @EqualsAndHashCode(of = "uuid") + @AllArgsConstructor + private static final class Reciever { + private final UUID uuid; + private final Sender sender; + } +} diff --git a/default-lang.yml b/default-lang.yml index 2feab4c8..214e1302 100644 --- a/default-lang.yml +++ b/default-lang.yml @@ -45,6 +45,10 @@ use-uninherit-command: "Use the 'parent remove' command instead of specifying th +verbose-on: "&bVerbose checking output set to &aTRUE &bfor all permissions." +verbose-on_query: "&bVerbose checking output set to &aTRUE &bfor permissions starting with &f\"{0}\"&b." +verbose-off: "&bVerbose checking output set to &cFALSE&b." + create-success: "&b{0}&a was successfully created." delete-success: "&b{0}&a was successfully deleted." rename-success: "&b{0}&a was successfully renamed to &b{1}&a." diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java index 7f9ea179..58564c9d 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java @@ -48,6 +48,7 @@ import me.lucko.luckperms.common.storage.StorageFactory; import me.lucko.luckperms.common.tracks.TrackManager; import me.lucko.luckperms.common.users.UserManager; import me.lucko.luckperms.common.utils.BufferedRequest; +import me.lucko.luckperms.common.utils.DebugHandler; import me.lucko.luckperms.common.utils.LocaleManager; import me.lucko.luckperms.common.utils.LogFactory; import me.lucko.luckperms.sponge.contexts.WorldCalculator; @@ -119,10 +120,12 @@ public class LPSpongePlugin implements LuckPermsPlugin { private ContextManager contextManager; private CalculatorFactory calculatorFactory; private BufferedRequest updateTaskBuffer; + private DebugHandler debugHandler; @Listener public void onEnable(GamePreInitializationEvent event) { log = LogFactory.wrap(logger); + debugHandler = new DebugHandler(); getLog().info("Loading configuration..."); configuration = new SpongeConfig(this);