diff --git a/acf.iml b/acf.iml index 893e318a..0847f3b4 100644 --- a/acf.iml +++ b/acf.iml @@ -21,6 +21,7 @@ + diff --git a/example/acf-example.iml b/example/acf-example.iml index c4d04c3e..44c4c304 100644 --- a/example/acf-example.iml +++ b/example/acf-example.iml @@ -36,5 +36,6 @@ + \ No newline at end of file diff --git a/example/pom.xml b/example/pom.xml index 1574d376..28c66486 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -111,7 +111,7 @@ co.aikar acf-core - 0.3.0-SNAPSHOT + 0.5.0-SNAPSHOT diff --git a/pom.xml b/pom.xml index 99f4ee17..a4aecfef 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ co.aikar acf-core - 0.4.0-SNAPSHOT + 0.5.0-SNAPSHOT ACF @@ -101,6 +101,11 @@ annotations 13.0 + + co.aikar + minecraft-timings + 1.0.0 + com.destroystokyo.paper paper-api diff --git a/src/main/java/co/aikar/commands/ACFUtil.java b/src/main/java/co/aikar/commands/ACFUtil.java index 2d13024b..a7e9e993 100644 --- a/src/main/java/co/aikar/commands/ACFUtil.java +++ b/src/main/java/co/aikar/commands/ACFUtil.java @@ -23,6 +23,7 @@ package co.aikar.commands; +import co.aikar.timings.lib.CommandTiming; import com.google.common.collect.Iterables; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.WordUtils; @@ -862,45 +863,7 @@ public final class ACFUtil { throw (T) t; } - static TimingType timingProvider; - public static synchronized CommandTiming getTiming(BaseCommand cmd, String command) { - if (timingProvider == null) { - try { - Class.forName("co.aikar.timings.Timing"); - timingProvider = TimingType.MINECRAFT; - } catch (ClassNotFoundException ignored1) { - try { - Class.forName("org.spigotmc.CustomTimingsHandler"); - timingProvider = TimingType.SPIGOT; - } catch (ClassNotFoundException ignored2) { - timingProvider = TimingType.EMPTY; - } - } - } - return timingProvider.newTiming(cmd, command); - } - static boolean isValidItem(ItemStack item) { return item != null && item.getType() != Material.AIR && item.getAmount() > 0; } - - private enum TimingType { - SPIGOT() { - @Override - CommandTiming newTiming(BaseCommand cmd, String command) { - return new SpigotTiming(command); - } - }, - MINECRAFT() { - @Override - CommandTiming newTiming(BaseCommand cmd, String command) { - return new MinecraftTiming(cmd, command); - } - }, - EMPTY(); - - CommandTiming newTiming(BaseCommand cmd, String command) { - return new EmptyTiming(); - } - } } diff --git a/src/main/java/co/aikar/commands/BaseCommand.java b/src/main/java/co/aikar/commands/BaseCommand.java index 0fbac19f..6c993b5e 100644 --- a/src/main/java/co/aikar/commands/BaseCommand.java +++ b/src/main/java/co/aikar/commands/BaseCommand.java @@ -27,6 +27,7 @@ import co.aikar.commands.annotation.CommandAlias; import co.aikar.commands.annotation.CommandPermission; import co.aikar.commands.annotation.Default; import co.aikar.commands.annotation.Subcommand; +import co.aikar.timings.lib.CommandTiming; import com.google.common.collect.HashMultimap; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; diff --git a/src/main/java/co/aikar/commands/BukkitCommandManager.java b/src/main/java/co/aikar/commands/BukkitCommandManager.java index 22c27e40..7521c9dc 100644 --- a/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -23,6 +23,7 @@ package co.aikar.commands; +import co.aikar.timings.lib.TimingManager; import org.bukkit.Bukkit; import org.bukkit.Server; import org.bukkit.command.Command; @@ -42,6 +43,7 @@ public class BukkitCommandManager implements CommandManager { @SuppressWarnings("WeakerAccess") protected final Plugin plugin; private final CommandMap commandMap; + private final TimingManager timingManager; protected Map knownCommands = new HashMap<>(); protected Map registeredCommands = new HashMap<>(); protected CommandContexts contexts; @@ -49,6 +51,7 @@ public class BukkitCommandManager implements CommandManager { public BukkitCommandManager(Plugin plugin) { this.plugin = plugin; + this.timingManager = TimingManager.of(plugin); CommandMap commandMap = null; try { Server server = Bukkit.getServer(); @@ -144,4 +147,9 @@ public class BukkitCommandManager implements CommandManager { unregisterCommands(); } } + + @Override + public TimingManager getTimings() { + return timingManager; + } } diff --git a/src/main/java/co/aikar/commands/CommandManager.java b/src/main/java/co/aikar/commands/CommandManager.java index 5b9efb85..afcb9d8e 100644 --- a/src/main/java/co/aikar/commands/CommandManager.java +++ b/src/main/java/co/aikar/commands/CommandManager.java @@ -23,10 +23,9 @@ package co.aikar.commands; +import co.aikar.timings.lib.TimingManager; import org.bukkit.plugin.Plugin; -import java.util.Map; - public interface CommandManager { Plugin getPlugin(); @@ -50,4 +49,6 @@ public interface CommandManager { * @return boolean */ boolean registerCommand(BaseCommand command); + + TimingManager getTimings(); } diff --git a/src/main/java/co/aikar/commands/CommandTiming.java b/src/main/java/co/aikar/commands/CommandTiming.java deleted file mode 100644 index 3920dc83..00000000 --- a/src/main/java/co/aikar/commands/CommandTiming.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License - * - * 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 co.aikar.commands; - -interface CommandTiming extends AutoCloseable { - CommandTiming startTiming(); - void stopTiming(); - - @Override - default void close() { - stopTiming(); - } -} diff --git a/src/main/java/co/aikar/commands/EmptyTiming.java b/src/main/java/co/aikar/commands/EmptyTiming.java deleted file mode 100644 index 9fd4cdeb..00000000 --- a/src/main/java/co/aikar/commands/EmptyTiming.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License - * - * 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 co.aikar.commands; - -class EmptyTiming implements CommandTiming { - EmptyTiming() { - super(); - } - - @Override - public final CommandTiming startTiming() { - return this; - } - - @Override - public final void stopTiming() { - - } -} diff --git a/src/main/java/co/aikar/commands/MinecraftTiming.java b/src/main/java/co/aikar/commands/MinecraftTiming.java deleted file mode 100644 index 3d818234..00000000 --- a/src/main/java/co/aikar/commands/MinecraftTiming.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License - * - * 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 co.aikar.commands; - -import co.aikar.timings.Timing; -import co.aikar.timings.Timings; - -class MinecraftTiming implements CommandTiming { - private final Timing timing; - MinecraftTiming(BaseCommand command, String name) { - super(); - this.timing = Timings.of(command.manager.getPlugin(), name); - } - - @Override - public CommandTiming startTiming() { - timing.startTiming(); - return this; - } - - @Override - public void stopTiming() { - timing.stopTiming(); - } -} diff --git a/src/main/java/co/aikar/commands/RegisteredCommand.java b/src/main/java/co/aikar/commands/RegisteredCommand.java index c678caa6..43f30f70 100644 --- a/src/main/java/co/aikar/commands/RegisteredCommand.java +++ b/src/main/java/co/aikar/commands/RegisteredCommand.java @@ -32,6 +32,7 @@ import co.aikar.commands.annotation.Syntax; import co.aikar.commands.annotation.Values; import co.aikar.commands.contexts.ContextResolver; import co.aikar.commands.contexts.SenderAwareContextResolver; +import co.aikar.timings.lib.CommandTiming; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -208,7 +209,7 @@ public class RegisteredCommand { CommandTiming getTiming() { if (this.timing == null) { - this.timing = ACFUtil.getTiming(scope, command); + this.timing = scope.manager.getTimings().of("Command: " + command); } return this.timing; } diff --git a/src/main/java/co/aikar/commands/SpigotTiming.java b/src/main/java/co/aikar/commands/SpigotTiming.java deleted file mode 100644 index 8141c4c8..00000000 --- a/src/main/java/co/aikar/commands/SpigotTiming.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License - * - * 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 co.aikar.commands; - -import org.spigotmc.CustomTimingsHandler; - -class SpigotTiming implements CommandTiming { - private final CustomTimingsHandler timing; - - SpigotTiming(String name) { - super(); - this.timing = new CustomTimingsHandler(name); - } - - @Override - public CommandTiming startTiming() { - timing.startTiming(); - return this; - } - - @Override - public void stopTiming() { - timing.stopTiming(); - } -}