From 7db380b1cd491f2a6218d08ed4428250c0c2d1f7 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Sat, 6 Jun 2020 07:21:36 +0800 Subject: [PATCH 01/16] Bump classgraph from 4.8.80 to 4.8.82 (#181) Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.80 to 4.8.82. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.80...classgraph-4.8.82) Signed-off-by: dependabot-preview[bot] Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> --- scribe/maven-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index 148d6cacc..c25a32d75 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -25,7 +25,7 @@ io.github.classgraph classgraph - 4.8.80 + 4.8.82 compile From a8b41a90a81e386b456d7161ccfeb807201e5569 Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Mon, 8 Jun 2020 13:08:35 +0800 Subject: [PATCH 02/16] prepare for next release --- annotations/pom.xml | 2 +- commons/pom.xml | 2 +- pom.xml | 2 +- scribe/annotations/pom.xml | 2 +- scribe/core/pom.xml | 2 +- scribe/maven-plugin/pom.xml | 2 +- scribe/pom.xml | 2 +- scribe/standalone/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/annotations/pom.xml b/annotations/pom.xml index d0ef2b18e..335fb996c 100644 --- a/annotations/pom.xml +++ b/annotations/pom.xml @@ -4,7 +4,7 @@ com.karuslabs chimera - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT annotations diff --git a/commons/pom.xml b/commons/pom.xml index 30b4a22a1..d10dcc08f 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -4,7 +4,7 @@ com.karuslabs chimera - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT commons diff --git a/pom.xml b/pom.xml index cff6bcb91..81f6174f1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.karuslabs chimera - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT pom Chimera diff --git a/scribe/annotations/pom.xml b/scribe/annotations/pom.xml index 0c97fc797..bdce34ce2 100644 --- a/scribe/annotations/pom.xml +++ b/scribe/annotations/pom.xml @@ -4,7 +4,7 @@ com.karuslabs scribe - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT scribe-annotations diff --git a/scribe/core/pom.xml b/scribe/core/pom.xml index b493efe69..ef2fc380c 100644 --- a/scribe/core/pom.xml +++ b/scribe/core/pom.xml @@ -4,7 +4,7 @@ com.karuslabs scribe - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT scribe-core jar diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index c25a32d75..768b0ce13 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -4,7 +4,7 @@ com.karuslabs scribe - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT scribe-maven-plugin diff --git a/scribe/pom.xml b/scribe/pom.xml index 1be5e1ba2..37b63d275 100644 --- a/scribe/pom.xml +++ b/scribe/pom.xml @@ -4,7 +4,7 @@ com.karuslabs chimera - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT scribe diff --git a/scribe/standalone/pom.xml b/scribe/standalone/pom.xml index 3378bef2e..f98ee4652 100644 --- a/scribe/standalone/pom.xml +++ b/scribe/standalone/pom.xml @@ -4,7 +4,7 @@ com.karuslabs scribe - 4.6.1-SNAPSHOT + 4.7.0-SNAPSHOT scribe-standalone From 4232cd0586fccfb49cf6d8b795e37a43d3750c58 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2020 21:11:51 +0000 Subject: [PATCH 03/16] Bump classgraph from 4.8.82 to 4.8.83 Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.82 to 4.8.83. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.82...classgraph-4.8.83) Signed-off-by: dependabot-preview[bot] --- scribe/maven-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index 768b0ce13..5e020c67b 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -25,7 +25,7 @@ io.github.classgraph classgraph - 4.8.82 + 4.8.83 compile From 33532b3c476094528c4e50489c0aef4dfb6f929b Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2020 21:11:47 +0000 Subject: [PATCH 04/16] Bump classgraph from 4.8.83 to 4.8.84 Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.83 to 4.8.84. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.83...classgraph-4.8.84) Signed-off-by: dependabot-preview[bot] --- scribe/maven-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index 5e020c67b..61cdc438f 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -25,7 +25,7 @@ io.github.classgraph classgraph - 4.8.83 + 4.8.84 compile From f2ae04856c28a83c402cb1844de49603601fb82d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Wed, 10 Jun 2020 21:12:53 +0000 Subject: [PATCH 05/16] Bump classgraph from 4.8.84 to 4.8.85 Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.84 to 4.8.85. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.84...classgraph-4.8.85) Signed-off-by: dependabot-preview[bot] --- scribe/maven-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index 61cdc438f..40f1cdd1f 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -25,7 +25,7 @@ io.github.classgraph classgraph - 4.8.84 + 4.8.85 compile From 5dab0efd77adf1616e40c62d04c20a42bb07b53a Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2020 21:13:34 +0000 Subject: [PATCH 06/16] Bump classgraph from 4.8.85 to 4.8.86 Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.85 to 4.8.86. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.85...classgraph-4.8.86) Signed-off-by: dependabot-preview[bot] --- scribe/maven-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index 40f1cdd1f..2d3fb98ca 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -25,7 +25,7 @@ io.github.classgraph classgraph - 4.8.85 + 4.8.86 compile From b3cf31e35b5932fa10f1e3ec5439dadfad39faab Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Wed, 17 Jun 2020 20:24:40 +0800 Subject: [PATCH 07/16] Remove synchronization package It is no longer needed since the bug which mandated manual synchronization has been fixed. See https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/675/overview --- CHANGELOG.md | 15 ++ commons/pom.xml | 7 + .../command/dispatcher/Dispatcher.java | 22 +-- .../{NativeMapper.java => SpigotMapper.java} | 8 +- .../synchronization/PulseListener.java | 64 --------- .../synchronization/SynchronizationEvent.java | 52 ------- .../SynchronizationListener.java | 75 ---------- .../SynchronizationMapper.java | 48 ------- .../command/synchronization/Synchronizer.java | 101 -------------- .../command/dispatcher/DispatcherTest.java | 9 -- .../command/dispatcher/NativeMapperTest.java | 6 +- .../synchronization/PulseListenerTest.java | 97 ------------- .../SynchronizationEventTest.java | 41 ------ .../SynchronizationListenerTest.java | 92 ------------- .../SynchronizationMapperTest.java | 52 ------- .../synchronization/SynchronizerTest.java | 130 ------------------ pom.xml | 5 + 17 files changed, 37 insertions(+), 787 deletions(-) rename commons/src/main/java/com/karuslabs/commons/command/dispatcher/{NativeMapper.java => SpigotMapper.java} (92%) delete mode 100644 commons/src/main/java/com/karuslabs/commons/command/synchronization/PulseListener.java delete mode 100644 commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationEvent.java delete mode 100644 commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationListener.java delete mode 100644 commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationMapper.java delete mode 100644 commons/src/main/java/com/karuslabs/commons/command/synchronization/Synchronizer.java delete mode 100644 commons/src/test/java/com/karuslabs/commons/command/synchronization/PulseListenerTest.java delete mode 100644 commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationEventTest.java delete mode 100644 commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationListenerTest.java delete mode 100644 commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationMapperTest.java delete mode 100644 commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizerTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 59d57a4b9..a072d3a01 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +## 4.7.0 - I'll be there someday (Next release) + +- TODO: Look into optimizing reparsing +- TODO: Implement specialized optimization for CommandListenerWrapper to ICompletionProvider +mapping in Paper + +### Commons + +Additional optimizations has been added for Paper through utilizing their `paper-mojangapi` +expanded API which exposes Brigadier. + +- Change `NativeMapper` to `SpigotMapper` + + + ## 4.6.1 - When the road looks rough ahead (03/06/2020) This update focuses on fixing an issue with code generated using command annotations. diff --git a/commons/pom.xml b/commons/pom.xml index d10dcc08f..783c9a231 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -29,6 +29,13 @@ provided + + com.destroystokyo.paper + paper-mojangapi + 1.15.2-R0.1-SNAPSHOT + provided + + com.mojang brigadier diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java index 10229c05c..398738d42 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java @@ -23,7 +23,6 @@ */ package com.karuslabs.commons.command.dispatcher; -import com.karuslabs.commons.command.synchronization.*; import com.karuslabs.commons.command.tree.nodes.Root; import com.karuslabs.commons.command.tree.TreeWalker; import com.karuslabs.commons.command.tree.nodes.Literal; @@ -50,7 +49,6 @@ public class Dispatcher extends CommandDispatcher implements List private MinecraftServer server; private Root root; CommandDispatcher dispatcher; - Synchronizer synchronizer; TreeWalker walker; @@ -58,31 +56,23 @@ public static Dispatcher of(Plugin plugin) { var prefix = plugin.getName().toLowerCase(); var server = ((CraftServer) plugin.getServer()); - var synchronizer = Synchronizer.of(plugin); - var map = new SpigotMap(prefix, plugin, (CraftCommandMap) server.getCommandMap()); var root = new Root(prefix, map); - var dispatcher = new Dispatcher(server, root, synchronizer); + var dispatcher = new Dispatcher(server, root); map.dispatcher = dispatcher; server.getPluginManager().registerEvents(dispatcher, plugin); - var listener = new PulseListener(synchronizer, plugin); - listener.register(); - - server.getPluginManager().registerEvents(listener, plugin); - return dispatcher; } - protected Dispatcher(Server server, Root root, Synchronizer synchronizer) { + protected Dispatcher(Server server, Root root) { super(root); this.root = root; this.server = ((CraftServer) server).getServer(); this.dispatcher = this.server.commandDispatcher.a(); - this.synchronizer = synchronizer; - this.walker = new TreeWalker<>(new NativeMapper(this)); + this.walker = new TreeWalker<>(new SpigotMapper(this)); } @@ -102,7 +92,6 @@ public Literal register(Literal.Builder command) { public void update() { walker.prune(dispatcher.getRoot(), getRoot().getChildren()); - synchronizer.synchronize(); } @@ -117,10 +106,5 @@ protected void update(ServerLoadEvent event) { public Root getRoot() { return root; } - - - public Synchronizer synchronizer() { - return synchronizer; - } } diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/NativeMapper.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java similarity index 92% rename from commons/src/main/java/com/karuslabs/commons/command/dispatcher/NativeMapper.java rename to commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java index ac027e61b..519dd82f2 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/NativeMapper.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java @@ -42,7 +42,7 @@ import com.karuslabs.commons.command.types.Type; -class NativeMapper extends Mapper { +class SpigotMapper extends Mapper { static final Map> CLIENT_SIDE; @@ -57,7 +57,7 @@ class NativeMapper extends Mapper { private CommandDispatcher dispatcher; - NativeMapper(CommandDispatcher dispatcher) { + SpigotMapper(CommandDispatcher dispatcher) { this.dispatcher = dispatcher; } @@ -97,7 +97,7 @@ protected Predicate requirement(CommandNode reparse(Type type) { + SuggestionProvider reparse(Type type) { return (context, suggestions) -> { var sender = context.getSource().getBukkitSender(); var reparsed = dispatcher.parse(context.getInput(), sender).getContext().build(context.getInput()); @@ -105,7 +105,7 @@ protected SuggestionProvider reparse(Type type) { }; } - protected SuggestionProvider reparse(SuggestionProvider suggestor) { + SuggestionProvider reparse(SuggestionProvider suggestor) { return (context, suggestions) -> { var sender = context.getSource().getBukkitSender(); var reparsed = dispatcher.parse(context.getInput(), sender).getContext().build(context.getInput()); diff --git a/commons/src/main/java/com/karuslabs/commons/command/synchronization/PulseListener.java b/commons/src/main/java/com/karuslabs/commons/command/synchronization/PulseListener.java deleted file mode 100644 index 9d888c329..000000000 --- a/commons/src/main/java/com/karuslabs/commons/command/synchronization/PulseListener.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * The MIT License - * - * Copyright 2020 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import org.bukkit.event.*; -import org.bukkit.event.server.ServiceUnregisterEvent; -import org.bukkit.plugin.*; -import org.bukkit.scheduler.BukkitScheduler; - - -public class PulseListener implements Listener { - - Synchronizer synchronizer; - Plugin plugin; - BukkitScheduler scheduler; - ServicesManager services; - - - public PulseListener(Synchronizer synchronizer, Plugin plugin) { - this.synchronizer = synchronizer; - this.plugin = plugin; - this.scheduler = plugin.getServer().getScheduler(); - this.services = plugin.getServer().getServicesManager(); - } - - - public void register() { - if (!services.isProvidedFor(SynchronizationListener.class)) { - var listener = new SynchronizationListener(synchronizer, scheduler, plugin); - plugin.getServer().getPluginManager().registerEvents(listener, plugin); - services.register(SynchronizationListener.class, listener, plugin, ServicePriority.Normal); - } - } - - - @EventHandler - void listen(ServiceUnregisterEvent event) { - if (event.getProvider().getService() == SynchronizationListener.class) { - register(); - } - } - -} diff --git a/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationEvent.java b/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationEvent.java deleted file mode 100644 index 88b693f6e..000000000 --- a/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationEvent.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * The MIT License - * - * Copyright 2018 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import java.util.Collection; - -import org.bukkit.entity.Player; -import org.bukkit.event.HandlerList; -import org.bukkit.event.player.PlayerCommandSendEvent; - - -public class SynchronizationEvent extends PlayerCommandSendEvent { - - private static final HandlerList HANDLERS = new HandlerList(); - - - public SynchronizationEvent(Player player, Collection commands) { - super(player, commands); - } - - - @Override - public HandlerList getHandlers() { - return HANDLERS; - } - - public static HandlerList getHandlerList() { - return HANDLERS; - } - -} diff --git a/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationListener.java b/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationListener.java deleted file mode 100644 index d95846f38..000000000 --- a/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationListener.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * The MIT License - * - * Copyright 2020 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import java.util.*; - -import org.bukkit.event.*; -import org.bukkit.event.player.PlayerCommandSendEvent; -import org.bukkit.plugin.Plugin; -import org.bukkit.scheduler.BukkitScheduler; - - -class SynchronizationListener implements Runnable, Listener { - - private Synchronizer synchronizer; - private BukkitScheduler scheduler; - private Plugin plugin; - Set events; - boolean running; - - - SynchronizationListener(Synchronizer synchronizer, BukkitScheduler scheduler, Plugin plugin) { - this.synchronizer = synchronizer; - this.scheduler = scheduler; - this.plugin = plugin; - events = new HashSet<>(); - running = false; - } - - - @Override - public void run() { - for (var event : events) { - synchronizer.synchronize(event.getPlayer(), event.getCommands()); - } - - events.clear(); - running = false; - } - - - @EventHandler - void synchronize(PlayerCommandSendEvent event) { - if (event instanceof SynchronizationEvent) { - return; - } - - if (events.add(event) && !running) { - scheduler.scheduleSyncDelayedTask(plugin, this); - running = true; - } - } - -} diff --git a/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationMapper.java b/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationMapper.java deleted file mode 100644 index 04e00f510..000000000 --- a/commons/src/main/java/com/karuslabs/commons/command/synchronization/SynchronizationMapper.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * The MIT License - * - * Copyright 2019 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import com.karuslabs.commons.command.tree.Mapper; - -import com.mojang.brigadier.suggestion.SuggestionProvider; -import com.mojang.brigadier.tree.ArgumentCommandNode; - -import net.minecraft.server.v1_15_R1.*; - -import org.checkerframework.checker.nullness.qual.Nullable; - - -class SynchronizationMapper extends Mapper { - - static final SynchronizationMapper MAPPER = new SynchronizationMapper(); - - @Override - protected @Nullable SuggestionProvider suggestions(ArgumentCommandNode command) { - // Fucking nasty workaround in whcih Mojang abused using raw types. It only - // works because CommandListenerWrapper is the sole implementation of ICompleteionProvider. - SuggestionProvider provider = command.getCustomSuggestions(); - return provider == null ? null: CompletionProviders.b(provider); - } - -} diff --git a/commons/src/main/java/com/karuslabs/commons/command/synchronization/Synchronizer.java b/commons/src/main/java/com/karuslabs/commons/command/synchronization/Synchronizer.java deleted file mode 100644 index 6ded3b6d9..000000000 --- a/commons/src/main/java/com/karuslabs/commons/command/synchronization/Synchronizer.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * The MIT License - * - * Copyright 2020 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import com.karuslabs.commons.command.tree.TreeWalker; - -import com.mojang.brigadier.CommandDispatcher; -import com.mojang.brigadier.tree.*; - -import java.util.Collection; - -import net.minecraft.server.v1_15_R1.*; - -import org.bukkit.craftbukkit.v1_15_R1.CraftServer; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; - -import org.bukkit.entity.Player; -import org.bukkit.event.*; -import org.bukkit.event.server.ServerLoadEvent; -import org.bukkit.plugin.*; - -import static java.util.stream.Collectors.toSet; - - -public class Synchronizer implements Listener { - - private MinecraftServer server; - private Plugin plugin; - CommandDispatcher dispatcher; - TreeWalker walker; - - - public static Synchronizer of(Plugin plugin) { - var server = ((CraftServer) plugin.getServer()); - var tree = new TreeWalker(SynchronizationMapper.MAPPER); - - var synchronizer = new Synchronizer(server.getServer(), plugin, tree); - server.getPluginManager().registerEvents(synchronizer, plugin); - - return synchronizer; - } - - - Synchronizer(MinecraftServer server, Plugin plugin, TreeWalker walker) { - this.server = server; - this.plugin = plugin; - this.dispatcher = server.commandDispatcher.a(); - this.walker = walker; - } - - - public void synchronize() { - for (var player : server.server.getOnlinePlayers()) { - synchronize(player); - } - } - - public void synchronize(Player player) { - var permitted = dispatcher.getRoot().getChildren().stream().map(CommandNode::getName).collect(toSet()); - server.server.getPluginManager().callEvent(new SynchronizationEvent(player, permitted)); - - synchronize(player, permitted); - } - - public void synchronize(Player player, Collection commands) { - var entity = ((CraftPlayer) player).getHandle(); - var root = new RootCommandNode(); - - walker.add(root, dispatcher.getRoot().getChildren(), entity.getCommandListener(), command -> commands.contains(command.getName())); - - entity.playerConnection.sendPacket(new PacketPlayOutCommands(root)); - } - - - @EventHandler - void load(ServerLoadEvent event) { - dispatcher = server.commandDispatcher.a(); - } - -} diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java index 76e97be4b..bc4d8f167 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java @@ -23,7 +23,6 @@ */ package com.karuslabs.commons.command.dispatcher; -import com.karuslabs.commons.command.synchronization.Synchronizer; import com.karuslabs.commons.command.tree.nodes.*; import com.mojang.brigadier.tree.CommandNode; @@ -54,7 +53,6 @@ class DispatcherTest { CraftCommandMap map = when(mock(CraftCommandMap.class).register(any(String.class), any())).thenReturn(true).getMock(); CraftScheduler scheduler = mock(CraftScheduler.class); PluginManager manager = mock(PluginManager.class); - ServicesManager services = mock(ServicesManager.class); CommandDispatcher wrapper = mock(CommandDispatcher.class); com.mojang.brigadier.CommandDispatcher internal = new com.mojang.brigadier.CommandDispatcher(); @@ -66,7 +64,6 @@ void before() { when(craftserver.getCommandMap()).thenReturn(map); when(craftserver.getScheduler()).thenReturn(scheduler); when(craftserver.getPluginManager()).thenReturn(manager); - when(craftserver.getServicesManager()).thenReturn(services); server.server = craftserver; server.commandDispatcher = when(wrapper.a()).thenReturn(internal).getMock(); @@ -78,13 +75,9 @@ void before() { @Test void of() { reset(manager); - reset(services); - - when(services.isProvidedFor(any())).thenReturn(false); var dispatcher = Dispatcher.of(plugin); - verify(services).register(any(), any(), any(), any()); assertSame(dispatcher, ((SpigotMap) dispatcher.getRoot().map()).dispatcher); } @@ -111,12 +104,10 @@ void register_builder() { @Test void update() { dispatcher.getRoot().addChild(Literal.of("a").build()); - dispatcher.synchronizer = mock(Synchronizer.class); dispatcher.update(); assertNotNull(dispatcher.dispatcher.getRoot().getChild("a")); - verify(dispatcher.synchronizer()).synchronize(); } diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java index d13528445..373eb63df 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java @@ -51,7 +51,7 @@ class NativeMapperTest { CommandDispatcher dispatcher = new CommandDispatcher<>(); - NativeMapper mapper = spy(new NativeMapper(dispatcher)); + SpigotMapper mapper = spy(new SpigotMapper(dispatcher)); CommandSender sender = mock(CommandSender.class); CommandListenerWrapper listener = when(mock(CommandListenerWrapper.class).getBukkitSender()).thenReturn(sender).getMock(); @@ -68,7 +68,7 @@ void type() { @Test void requirement() { - assertSame(NativeMapper.TRUE, mapper.requirement(Literal.of("a").requires(null).build())); + assertSame(SpigotMapper.TRUE, mapper.requirement(Literal.of("a").requires(null).build())); Predicate predicate = mock(Predicate.class); mapper.requirement(Literal.of("a").requires(predicate).build()).test(listener); @@ -95,7 +95,7 @@ void suggestions_typeargument() { @Test void suggestions_clientside() { - assertSame(NativeMapper.CLIENT_SIDE.get(ClientSuggestionProvider.ENTITIES), mapper.suggestions(Argument.of("a", PlayerType.WORD).suggests(ClientSuggestionProvider.ENTITIES).build())); + assertSame(SpigotMapper.CLIENT_SIDE.get(ClientSuggestionProvider.ENTITIES), mapper.suggestions(Argument.of("a", PlayerType.WORD).suggests(ClientSuggestionProvider.ENTITIES).build())); } diff --git a/commons/src/test/java/com/karuslabs/commons/command/synchronization/PulseListenerTest.java b/commons/src/test/java/com/karuslabs/commons/command/synchronization/PulseListenerTest.java deleted file mode 100644 index 0ac508bc7..000000000 --- a/commons/src/test/java/com/karuslabs/commons/command/synchronization/PulseListenerTest.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * The MIT License - * - * Copyright 2020 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import java.util.stream.Stream; - -import org.bukkit.Server; -import org.bukkit.event.server.ServiceUnregisterEvent; -import org.bukkit.plugin.*; -import org.bukkit.scheduler.BukkitScheduler; - -import org.junit.jupiter.api.*; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.*; -import org.mockito.junit.jupiter.*; - -import static org.junit.jupiter.params.provider.Arguments.of; -import static org.mockito.Mockito.*; -import static org.mockito.quality.Strictness.LENIENT; - - -@MockitoSettings(strictness = LENIENT) -class PulseListenerTest { - - PulseListener listener; - Plugin plugin; - Synchronizer synchronizer = mock(Synchronizer.class); - Server server = mock(Server.class); - BukkitScheduler scheduler = mock(BukkitScheduler.class); - PluginManager manager = mock(PluginManager.class); - ServicesManager services = mock(ServicesManager.class); - ServiceUnregisterEvent event = mock(ServiceUnregisterEvent.class); - - - @BeforeEach - void before() { - plugin = when(mock(Plugin.class).getServer()).thenReturn(server).getMock(); - when(server.getScheduler()).thenReturn(scheduler); - when(server.getServicesManager()).thenReturn(services); - when(server.getPluginManager()).thenReturn(manager); - - listener = spy(new PulseListener(synchronizer, plugin)); - } - - - @ParameterizedTest - @CsvSource({"true, 0", "false, 1"}) - void register(boolean provided, int times) { - when(services.isProvidedFor(SynchronizationListener.class)).thenReturn(provided); - - listener.register(); - - verify(services, times(times)).register(eq(SynchronizationListener.class), any(SynchronizationListener.class), eq(plugin), eq(ServicePriority.Normal)); - } - - @ParameterizedTest - @MethodSource("listen_parameters") - void listen(Class service, int times) { - RegisteredServiceProvider provider = when(mock(RegisteredServiceProvider.class).getService()).thenReturn(service).getMock(); - when(event.getProvider()).thenReturn(provider); - - doNothing().when(listener).register(); - - listener.listen(event); - - verify(listener, times(times)).register(); - } - - static Stream listen_parameters() { - return Stream.of( - of(Object.class, 0), - of(SynchronizationListener.class, 1) - ); - } - -} diff --git a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationEventTest.java b/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationEventTest.java deleted file mode 100644 index bee7cc7dd..000000000 --- a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationEventTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * The MIT License - * - * Copyright 2019 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - - -class SynchronizationEventTest { - - SynchronizationEvent event = new SynchronizationEvent(null, null); - - - @Test - void handelers() { - assertSame(SynchronizationEvent.getHandlerList(), event.getHandlers()); - } - -} diff --git a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationListenerTest.java b/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationListenerTest.java deleted file mode 100644 index 9749f7e29..000000000 --- a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationListenerTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * The MIT License - * - * Copyright 2020 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import java.util.List; - -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerCommandSendEvent; -import org.bukkit.plugin.Plugin; -import org.bukkit.scheduler.BukkitScheduler; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - - -class SynchronizationListenerTest { - - Synchronizer synchronizer = mock(Synchronizer.class); - BukkitScheduler scheduler = mock(BukkitScheduler.class); - Plugin plugin = mock(Plugin.class); - SynchronizationListener listener = new SynchronizationListener(synchronizer, scheduler, plugin); - - - @Test - void run() { - var player = mock(Player.class); - var event = new SynchronizationEvent(player, List.of("a")); - - listener.events.add(event); - - listener.running = true; - - listener.run(); - - verify(synchronizer).synchronize(player, List.of("a")); - assertTrue(listener.events.isEmpty()); - assertFalse(listener.running); - } - - - @Test - void synchronize_event_ignore_event() { - listener.synchronize(new SynchronizationEvent(null, List.of())); - - verifyNoInteractions(scheduler); - } - - - @Test - void synchronize_event_new_task() { - assertFalse(listener.running); - - listener.synchronize(mock(PlayerCommandSendEvent.class)); - - verify(scheduler).scheduleSyncDelayedTask(plugin, listener); - assertTrue(listener.running); - } - - - @Test - void synchronize_event_existing_task() { - listener.running = true; - - listener.synchronize(mock(PlayerCommandSendEvent.class)); - - verifyNoInteractions(scheduler); - } - -} diff --git a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationMapperTest.java b/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationMapperTest.java deleted file mode 100644 index 3c207c4fb..000000000 --- a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizationMapperTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * The MIT License - * - * Copyright 2019 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import com.karuslabs.commons.command.tree.nodes.Argument; - -import net.minecraft.server.v1_15_R1.*; - -import org.junit.jupiter.api.Test; - -import static com.mojang.brigadier.arguments.StringArgumentType.word; -import static org.junit.jupiter.api.Assertions.*; - - -class SynchronizationMapperTest { - - SynchronizationMapper mapper = SynchronizationMapper.MAPPER; - - - @Test - void suggestions_b() { - assertSame(CompletionProviders.a, mapper.suggestions(Argument.builder("", word()).suggests((a, b) -> null).build())); - } - - - @Test - void suggestions_null() { - assertNull(mapper.suggestions(Argument.builder("", word()).build())); - } - -} diff --git a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizerTest.java b/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizerTest.java deleted file mode 100644 index 1a2fd1a44..000000000 --- a/commons/src/test/java/com/karuslabs/commons/command/synchronization/SynchronizerTest.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * The MIT License - * - * Copyright 2019 Karus Labs. - * - * 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 com.karuslabs.commons.command.synchronization; - -import com.karuslabs.commons.command.tree.TreeWalker; - -import java.util.List; - -import net.minecraft.server.v1_15_R1.*; - -import org.bukkit.craftbukkit.v1_15_R1.CraftServer; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; -import org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftScheduler; -import org.bukkit.entity.Player; -import org.bukkit.plugin.*; - -import org.junit.jupiter.api.*; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; - - -class SynchronizerTest { - - Synchronizer synchronizer; - Plugin plugin = mock(Plugin.class); - CraftServer craftserver = mock(CraftServer.class); - DedicatedServer server = mock(DedicatedServer.class); - CraftScheduler scheduler = mock(CraftScheduler.class); - PluginManager manager = mock(PluginManager.class); - ServicesManager services = mock(ServicesManager.class); - CommandDispatcher wrapper = mock(CommandDispatcher.class); - com.mojang.brigadier.CommandDispatcher dispatcher = new com.mojang.brigadier.CommandDispatcher(); - - - @BeforeEach - void before() { - when(plugin.getServer()).thenReturn(craftserver); - when(craftserver.getServer()).thenReturn(server); - when(craftserver.getScheduler()).thenReturn(scheduler); - when(craftserver.getPluginManager()).thenReturn(manager); - when(craftserver.getServicesManager()).thenReturn(services); - - server.server = craftserver; - server.commandDispatcher = when(wrapper.a()).thenReturn(dispatcher).getMock(); - - synchronizer = spy(Synchronizer.of(plugin)); - } - - - @Test - void of() { - reset(manager); - - var synchronizer = Synchronizer.of(plugin); - - verify(manager).registerEvents(synchronizer, plugin); - } - - - @Test - void synchronize() { - List online = List.of(mock(CraftPlayer.class)); - when(craftserver.getOnlinePlayers()).thenReturn(online); - doNothing().when(synchronizer).synchronize(any(Player.class)); - - synchronizer.synchronize(); - - verify(synchronizer).synchronize(any(Player.class)); - } - - - @Test - void synchronize_player() { - Player player = mock(Player.class); - doNothing().when(synchronizer).synchronize(any(), any()); - - synchronizer.synchronize(player); - - verify(manager).callEvent(any(SynchronizationEvent.class)); - verify(synchronizer).synchronize(eq(player), any()); - } - - - @Test - void synchronize_player_commands() { - synchronizer.walker = mock(TreeWalker.class); - - EntityPlayer entity = mock(EntityPlayer.class); - entity.playerConnection = mock(PlayerConnection.class); - - CraftPlayer player = when(mock(CraftPlayer.class).getHandle()).thenReturn(entity).getMock(); - - synchronizer.synchronize(player, List.of()); - - verify(synchronizer.walker).add(any(), any(), any(), any()); - verify(entity.playerConnection).sendPacket(any(PacketPlayOutCommands.class)); - } - - - @Test - void load() { - synchronizer.dispatcher = null; - synchronizer.load(null); - - assertSame(synchronizer.dispatcher, dispatcher); - } - -} diff --git a/pom.xml b/pom.xml index 81f6174f1..673a93566 100644 --- a/pom.xml +++ b/pom.xml @@ -49,6 +49,11 @@ noti-spigot-mirror https://repo.karuslabs.com/repository/spigot/ + + + papermc + https://papermc.io/repo/repository/maven-public/ + minecraft-libraries From 8f8ce27fbd042f0265e2c9d7a25fbd060befcfac Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Wed, 17 Jun 2020 20:26:19 +0800 Subject: [PATCH 08/16] Update changelog --- CHANGELOG.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a072d3a01..30d71d3a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,7 @@ ## 4.7.0 - I'll be there someday (Next release) -- TODO: Look into optimizing reparsing -- TODO: Implement specialized optimization for CommandListenerWrapper to ICompletionProvider -mapping in Paper +- Remove `com.karuslabs.commons.command.synchronization.*` - No longer needed since +the bug in Spigot has been fixed. See https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/675/overview ### Commons From df8b48e7d72f87210b0677eff99b6a742b052d66 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2020 21:12:40 +0000 Subject: [PATCH 09/16] Bump classgraph from 4.8.86 to 4.8.87 Bumps [classgraph](https://github.com/classgraph/classgraph) from 4.8.86 to 4.8.87. - [Release notes](https://github.com/classgraph/classgraph/releases) - [Commits](https://github.com/classgraph/classgraph/compare/classgraph-4.8.86...classgraph-4.8.87) Signed-off-by: dependabot-preview[bot] --- scribe/maven-plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index 2d3fb98ca..528385abd 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -25,7 +25,7 @@ io.github.classgraph classgraph - 4.8.86 + 4.8.87 compile From 1d16ca8cb0b178e9fe4e2b2735abed6166400792 Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Thu, 25 Jun 2020 00:45:28 +0800 Subject: [PATCH 10/16] Updat distro --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 61961d756..b3e5d689e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,5 @@ language: java -sudo: required -dist: bionic +dist: focal jdk: - openjdk11 From 67f43d9567392e9e7ad0bc76aa52a914f5795c77 Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Thu, 25 Jun 2020 01:02:19 +0800 Subject: [PATCH 11/16] Add os --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index b3e5d689e..cdb7038bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,4 @@ +os: linux language: java dist: focal jdk: From b2901abf31c280b66bce1db4e015adeddc907c7d Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Sat, 27 Jun 2020 18:01:53 +0800 Subject: [PATCH 12/16] Initial 1.16 build --- commons/pom.xml | 9 +--- .../command/dispatcher/Dispatcher.java | 10 ++-- .../command/dispatcher/Exceptions.java | 51 ++++++++++--------- .../commons/command/dispatcher/SpigotMap.java | 2 +- .../command/dispatcher/SpigotMapper.java | 2 +- .../commons/command/types/CartesianType.java | 2 +- .../com/karuslabs/commons/MockServer.java | 25 +++++++++ .../dispatcher/DispatcherCommandTest.java | 4 +- .../command/dispatcher/DispatcherTest.java | 12 ++--- .../command/dispatcher/ExceptionsTest.java | 8 +-- .../command/dispatcher/NativeMapperTest.java | 2 +- .../command/dispatcher/SpigotMapTest.java | 2 +- .../command/types/CartesianTypeTest.java | 2 +- pom.xml | 5 -- .../karuslabs/scribe/annotations/Version.java | 3 +- .../scribe/annotations/VersionTest.java | 4 +- scribe/core/pom.xml | 2 +- scribe/maven-plugin/pom.xml | 2 +- scribe/standalone/pom.xml | 2 +- 19 files changed, 84 insertions(+), 65 deletions(-) diff --git a/commons/pom.xml b/commons/pom.xml index 783c9a231..dbecad638 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -25,17 +25,10 @@ org.spigotmc spigot - 1.15-R0.1-SNAPSHOT + 1.16.1-R0.1-SNAPSHOT provided - - com.destroystokyo.paper - paper-mojangapi - 1.15.2-R0.1-SNAPSHOT - provided - - com.mojang brigadier diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java index 398738d42..b9f19f60c 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java @@ -32,10 +32,10 @@ import java.util.Map; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; -import org.bukkit.craftbukkit.v1_15_R1.CraftServer; -import org.bukkit.craftbukkit.v1_15_R1.command.CraftCommandMap; +import org.bukkit.craftbukkit.v1_16_R1.CraftServer; +import org.bukkit.craftbukkit.v1_16_R1.command.CraftCommandMap; import org.bukkit.Server; import org.bukkit.command.CommandSender; @@ -71,7 +71,7 @@ protected Dispatcher(Server server, Root root) { super(root); this.root = root; this.server = ((CraftServer) server).getServer(); - this.dispatcher = this.server.commandDispatcher.a(); + this.dispatcher = this.server.getCommandDispatcher().a(); this.walker = new TreeWalker<>(new SpigotMapper(this)); } @@ -97,7 +97,7 @@ public void update() { @EventHandler protected void update(ServerLoadEvent event) { - dispatcher = server.commandDispatcher.a(); + dispatcher = server.getCommandDispatcher().a(); walker.prune(dispatcher.getRoot(), getRoot().getChildren()); } diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Exceptions.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Exceptions.java index cea85c52a..be24c885c 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Exceptions.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Exceptions.java @@ -27,11 +27,11 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; -import org.bukkit.craftbukkit.v1_15_R1.CraftServer; -import org.bukkit.craftbukkit.v1_15_R1.command.*; -import org.bukkit.craftbukkit.v1_15_R1.entity.*; +import org.bukkit.craftbukkit.v1_16_R1.CraftServer; +import org.bukkit.craftbukkit.v1_16_R1.command.*; +import org.bukkit.craftbukkit.v1_16_R1.entity.*; import org.bukkit.command.*; import org.bukkit.entity.Player; @@ -43,7 +43,7 @@ private static final Object[] EMPTY = new Object[0]; - // Source: net.minecraft.server.CommandDispatcher #line: 187 + // Source: net.minecraft.server.CommandDispatcher #line: 188 static void report(CommandSender sender, CommandSyntaxException exception) { var listener = from(sender); @@ -53,50 +53,53 @@ static void report(CommandSender sender, CommandSyntaxException exception) { if (input != null && exception.getCursor() >= 0) { var index = Math.min(input.length(), exception.getCursor()); - var text = new ChatComponentText(""); + var text = (new ChatComponentText("")).a(EnumChatFormat.GRAY).format(modifier -> + modifier.setChatClickable(new ChatClickable(ChatClickable.EnumClickAction.SUGGEST_COMMAND, input)) + ); + if (index > 10) { - text.a("..."); + text.c("..."); } - text.a(input.substring(Math.max(0, index - 10), index)); + text.c(input.substring(Math.max(0, index - 10), index)); if (index < input.length()) { - var error = new ChatComponentText(input.substring(index)); - error.getChatModifier().setColor(EnumChatFormat.RED); - error.getChatModifier().setUnderline(true); - + var error = new ChatComponentText(input.substring(index)).a(new EnumChatFormat[]{EnumChatFormat.RED, EnumChatFormat.UNDERLINE}); text.addSibling(error); } - - var context = new ChatMessage("command.context.here", EMPTY); - context.getChatModifier().setItalic(true); - context.getChatModifier().setColor(EnumChatFormat.RED); + var context = new ChatMessage("command.context.here").a(new EnumChatFormat[]{EnumChatFormat.RED, EnumChatFormat.ITALIC}); text.addSibling(context); - text.getChatModifier().setColor(EnumChatFormat.GRAY); - text.getChatModifier().setChatClickable(new ChatClickable(ChatClickable.EnumClickAction.SUGGEST_COMMAND, input)); listener.sendFailureMessage(text); } } - // Source: net.minecraft.server.CommandDispatcher #line: 212 + // Source: net.minecraft.server.CommandDispatcher #line: 213 static void report(CommandSender sender, Exception exception) { var listener = from(sender); var message = exception.getMessage(); - var details = new ChatComponentText(message == null ? exception.getClass().getName() : message); + var details = new ChatComponentText(message == null ? exception.getClass().getName() : message); + // We send the stacktrace regardless of whether debug is enabled since we + // cannot access the CommandDispatcher's logger. var stacktrace = exception.getStackTrace(); for (int i = 0; i < Math.min(stacktrace.length, 3); i++) { - details.a("\n\n" + stacktrace[i].getMethodName() + "\n " + stacktrace[i].getFileName() + ":" + stacktrace[i].getLineNumber()); + var element = stacktrace[i]; + details.c("\n\n").c(element.getMethodName()).c("\n ").c(element.getFileName()).c(":").c(String.valueOf(element.getLineNumber())); } - var failure = new ChatMessage("command.failed", EMPTY); - failure.getChatModifier().setChatHoverable(new ChatHoverable(ChatHoverable.EnumHoverAction.SHOW_TEXT, details)); - + var failure = new ChatMessage("command.failed").format(modifier -> + modifier.setChatHoverable(new ChatHoverable(ChatHoverable.EnumHoverAction.SHOW_TEXT, details)) + ); listener.sendFailureMessage(failure); + + if (SharedConstants.d) { + listener.sendFailureMessage(new ChatComponentText(SystemUtils.d(exception))); + // We do not log the error since we cannot access the logger + } } diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMap.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMap.java index fe21b4e29..63b863d5f 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMap.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMap.java @@ -33,7 +33,7 @@ import org.bukkit.command.*; import org.bukkit.plugin.Plugin; -import org.bukkit.craftbukkit.v1_15_R1.command.CraftCommandMap; +import org.bukkit.craftbukkit.v1_16_R1.command.CraftCommandMap; import org.checkerframework.checker.nullness.qual.Nullable; diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java index 519dd82f2..d9d786552 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java @@ -34,7 +34,7 @@ import java.util.*; import java.util.function.Predicate; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; import org.bukkit.command.CommandSender; diff --git a/commons/src/main/java/com/karuslabs/commons/command/types/CartesianType.java b/commons/src/main/java/com/karuslabs/commons/command/types/CartesianType.java index 2f53baaae..9685374ba 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/types/CartesianType.java +++ b/commons/src/main/java/com/karuslabs/commons/command/types/CartesianType.java @@ -29,7 +29,7 @@ import java.util.concurrent.CompletableFuture; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; import org.bukkit.Location; import org.bukkit.entity.Player; diff --git a/commons/src/test/java/com/karuslabs/commons/MockServer.java b/commons/src/test/java/com/karuslabs/commons/MockServer.java index d7196d6c1..43e87621c 100644 --- a/commons/src/test/java/com/karuslabs/commons/MockServer.java +++ b/commons/src/test/java/com/karuslabs/commons/MockServer.java @@ -619,5 +619,30 @@ public Set getListeningPluginChannels() { public Spigot spigot() { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } + + @Override + public int getTicksPerWaterSpawns() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public int getTicksPerAmbientSpawns() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public boolean removeRecipe(NamespacedKey arg0) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public int getTicksPerWaterAmbientSpawns() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public int getWaterAmbientSpawnLimit() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherCommandTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherCommandTest.java index 88c702bad..37c250abb 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherCommandTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherCommandTest.java @@ -30,10 +30,10 @@ import java.util.List; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.plugin.Plugin; import org.junit.jupiter.api.Test; diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java index bc4d8f167..91559aa2e 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java @@ -29,13 +29,13 @@ import java.util.Map; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_15_R1.CraftServer; -import org.bukkit.craftbukkit.v1_15_R1.command.CraftCommandMap; -import org.bukkit.craftbukkit.v1_15_R1.scheduler.CraftScheduler; +import org.bukkit.craftbukkit.v1_16_R1.CraftServer; +import org.bukkit.craftbukkit.v1_16_R1.command.CraftCommandMap; +import org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftScheduler; import org.bukkit.plugin.*; import org.junit.jupiter.api.*; @@ -53,8 +53,8 @@ class DispatcherTest { CraftCommandMap map = when(mock(CraftCommandMap.class).register(any(String.class), any())).thenReturn(true).getMock(); CraftScheduler scheduler = mock(CraftScheduler.class); PluginManager manager = mock(PluginManager.class); - CommandDispatcher wrapper = mock(CommandDispatcher.class); com.mojang.brigadier.CommandDispatcher internal = new com.mojang.brigadier.CommandDispatcher(); + CommandDispatcher wrapper = when(mock(CommandDispatcher.class).a()).thenReturn(internal).getMock(); @BeforeEach @@ -66,7 +66,7 @@ void before() { when(craftserver.getPluginManager()).thenReturn(manager); server.server = craftserver; - server.commandDispatcher = when(wrapper.a()).thenReturn(internal).getMock(); + when(server.getCommandDispatcher()).thenReturn(wrapper); dispatcher = spy(Dispatcher.of(plugin)); } diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/ExceptionsTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/ExceptionsTest.java index ac8c3d839..5309a4d7d 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/ExceptionsTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/ExceptionsTest.java @@ -28,13 +28,13 @@ import java.util.stream.Stream; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; import org.bukkit.command.*; -import org.bukkit.craftbukkit.v1_15_R1.CraftServer; -import org.bukkit.craftbukkit.v1_15_R1.command.*; -import org.bukkit.craftbukkit.v1_15_R1.entity.*; +import org.bukkit.craftbukkit.v1_16_R1.CraftServer; +import org.bukkit.craftbukkit.v1_16_R1.command.*; +import org.bukkit.craftbukkit.v1_16_R1.entity.*; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java index 373eb63df..c1b67b4ad 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java @@ -35,7 +35,7 @@ import java.util.function.Predicate; -import net.minecraft.server.v1_15_R1.CommandListenerWrapper; +import net.minecraft.server.v1_16_R1.CommandListenerWrapper; import org.bukkit.command.CommandSender; diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/SpigotMapTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/SpigotMapTest.java index 9c4fe03db..936526542 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/SpigotMapTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/SpigotMapTest.java @@ -35,7 +35,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.plugin.Plugin; -import org.bukkit.craftbukkit.v1_15_R1.command.CraftCommandMap; +import org.bukkit.craftbukkit.v1_16_R1.command.CraftCommandMap; import org.junit.jupiter.api.*; diff --git a/commons/src/test/java/com/karuslabs/commons/command/types/CartesianTypeTest.java b/commons/src/test/java/com/karuslabs/commons/command/types/CartesianTypeTest.java index b66645a4b..eb51386cb 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/types/CartesianTypeTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/types/CartesianTypeTest.java @@ -31,7 +31,7 @@ import java.util.concurrent.ExecutionException; -import net.minecraft.server.v1_15_R1.*; +import net.minecraft.server.v1_16_R1.*; import org.bukkit.Location; import org.bukkit.block.Block; diff --git a/pom.xml b/pom.xml index 673a93566..10ceb4b40 100644 --- a/pom.xml +++ b/pom.xml @@ -50,11 +50,6 @@ https://repo.karuslabs.com/repository/spigot/ - - papermc - https://papermc.io/repo/repository/maven-public/ - - minecraft-libraries https://libraries.minecraft.net diff --git a/scribe/annotations/src/main/java/com/karuslabs/scribe/annotations/Version.java b/scribe/annotations/src/main/java/com/karuslabs/scribe/annotations/Version.java index 59f2369df..e33a71f22 100644 --- a/scribe/annotations/src/main/java/com/karuslabs/scribe/annotations/Version.java +++ b/scribe/annotations/src/main/java/com/karuslabs/scribe/annotations/Version.java @@ -29,7 +29,8 @@ public enum Version { INFERRED("1.13"), V1_13("1.13"), V1_14("1.14"), - V1_15("1.15"); + V1_15("1.15"), + V1_16("1.16"); private final String value; diff --git a/scribe/annotations/src/test/java/com/karuslabs/scribe/annotations/VersionTest.java b/scribe/annotations/src/test/java/com/karuslabs/scribe/annotations/VersionTest.java index 3e1e79da2..f816bc230 100644 --- a/scribe/annotations/src/test/java/com/karuslabs/scribe/annotations/VersionTest.java +++ b/scribe/annotations/src/test/java/com/karuslabs/scribe/annotations/VersionTest.java @@ -45,7 +45,9 @@ static Stream toString_parameters() { return Stream.of( of(Version.INFERRED, "1.13"), of(Version.V1_13, "1.13"), - of(Version.V1_14, "1.14") + of(Version.V1_14, "1.14"), + of(Version.V1_15, "1.15"), + of(Version.V1_16, "1.16") ); } diff --git a/scribe/core/pom.xml b/scribe/core/pom.xml index ef2fc380c..900a05dba 100644 --- a/scribe/core/pom.xml +++ b/scribe/core/pom.xml @@ -39,7 +39,7 @@ org.spigotmc spigot-api - 1.15-R0.1-SNAPSHOT + 1.16.1-R0.1-SNAPSHOT provided diff --git a/scribe/maven-plugin/pom.xml b/scribe/maven-plugin/pom.xml index 528385abd..5ec551448 100644 --- a/scribe/maven-plugin/pom.xml +++ b/scribe/maven-plugin/pom.xml @@ -53,7 +53,7 @@ org.spigotmc spigot-api - 1.15-R0.1-SNAPSHOT + 1.16.1-R0.1-SNAPSHOT compile diff --git a/scribe/standalone/pom.xml b/scribe/standalone/pom.xml index f98ee4652..6542ed044 100644 --- a/scribe/standalone/pom.xml +++ b/scribe/standalone/pom.xml @@ -55,7 +55,7 @@ org.spigotmc spigot-api - 1.15-R0.1-SNAPSHOT + 1.16.1-R0.1-SNAPSHOT provided From 0c53976437fcaed39eaff12e73ec5d91608b5d9e Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Sun, 28 Jun 2020 20:18:33 +0800 Subject: [PATCH 13/16] Get ready for 4.7.0 --- CHANGELOG.md | 15 +++++++----- README.md | 23 ++++++++++--------- .../command/ClientSuggestionProvider.java | 2 +- .../command/dispatcher/SpigotMapper.java | 3 ++- .../commons/command/types/PointType.java | 2 +- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30d71d3a1..bd50293f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,15 +1,17 @@ -## 4.7.0 - I'll be there someday (Next release) +## 4.7.0 - I'll be there someday (28/06/2020) -- Remove `com.karuslabs.commons.command.synchronization.*` - No longer needed since -the bug in Spigot has been fixed. See https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/675/overview +This update focuses on updating Chimera to support Spigot 1.16.1. ### Commons -Additional optimizations has been added for Paper through utilizing their `paper-mojangapi` -expanded API which exposes Brigadier. - +- Add `ClientSuggstionProvider.BIOMES` - Change `NativeMapper` to `SpigotMapper` +- Fix `PointType.CUBIC` displaying 2D coordinates +- Remove `com.karuslabs.commons.command.synchronization.*` - See https://hub.spigotmc.org/stash/projects/SPIGOT/repos/craftbukkit/pull-requests/675/overview + +### Scribe Annotations +- Add `com.karuslabs.scribe.annotations.Version.V1_16` ## 4.6.1 - When the road looks rough ahead (03/06/2020) @@ -20,6 +22,7 @@ This update focuses on fixing an issue with code generated using command annotat - Add `Literal(String, Execution, Predicate)` - Fix issue with the generic type of generated local variables not being inferable + ## 4.6.0 - Boy, and as the years go by (01/06/2020) This update focuses on introducing compile-time command annotations in addition diff --git a/README.md b/README.md index 82f6493d3..cf48ee14a 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ Karus Labs' mono-repository for spigot libraries & tools. | Chimera Version | Minecraft Version | |-----------------|-------------------| +| 4.7.0 | 1.16.1 | | 4.6.1 | 1.15.2 | | 4.5.0 | 1.15.2 | | 4.4.0 | 1.15 - 1.15.2 | @@ -39,12 +40,12 @@ Karus Labs' mono-repository for spigot libraries & tools. #### Annotations - Contains general purpose annotations [![releases-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-releases/com/karuslabs/chimera/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-releases/com/karuslabs/annotations/) [![snapshots-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-snapshots/com/karuslabs/chimera/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-snapshots/com/karuslabs/annotations/) -[![javadoc](https://img.shields.io/badge/javadoc-4.6.1-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.6.1/annotations/apidocs/index.html) +[![javadoc](https://img.shields.io/badge/javadoc-4.7.0-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.7.0/annotations/apidocs/index.html) ```XML com.karuslabs annotations - 4.6.1 + 4.7.0 ``` @@ -52,12 +53,12 @@ Karus Labs' mono-repository for spigot libraries & tools. #### Commons - Contains the command framework and other common utilities for Spigot plugin development [![releases-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-releases/com/karuslabs/chimera/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-releases/com/karuslabs/commons) [![snapshots-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-snapshots/com/karuslabs/chimera/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-snapshots/com/karuslabs/commons) -[![javadoc](https://img.shields.io/badge/javadoc-4.6.1-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.6.1/commons/apidocs/index.html) +[![javadoc](https://img.shields.io/badge/javadoc-4.7.0-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.7.0/commons/apidocs/index.html) ```XML com.karuslabs commons - 4.6.1 + 4.7.0 ``` @@ -65,13 +66,13 @@ Karus Labs' mono-repository for spigot libraries & tools. #### Scribe Annotations - Contains annotations that other scribe projects use to generate a plugin.yml [![releases-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-releases/com/karuslabs/scribe-annotations/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-releases/com/karuslabs/scribe-annotations) [![snapshots-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-snapshots/com/karuslabs/scribe-annotations/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-snapshots/com/karuslabs/scribe-annotations) -[![javadoc](https://img.shields.io/badge/javadoc-4.6.1-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.6.1/scribe/scribe-annotations/apidocs/index.html) +[![javadoc](https://img.shields.io/badge/javadoc-4.7.0-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.7.0/scribe/scribe-annotations/apidocs/index.html) ```XML com.karuslabs scribe-annotations - 4.6.1 + 4.7.0 ``` @@ -79,13 +80,13 @@ Karus Labs' mono-repository for spigot libraries & tools. #### Scribe Standalone - Standalone annotation processor that generates a plugin.yml [![releases-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-releases/com/karuslabs/scribe-standalone/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-releases/com/karuslabs/scribe-standalone) [![snapshots-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-snapshots/com/karuslabs/scribe-standalone/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-snapshots/com/karuslabs/scribe-standalone) -[![javadoc](https://img.shields.io/badge/javadoc-4.6.1-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.6.1/scribe/scribe-standalone/apidocs/index.html) +[![javadoc](https://img.shields.io/badge/javadoc-4.7.0-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.7.0/scribe/scribe-standalone/apidocs/index.html) ```XML com.karuslabs scribe-standalone - 4.6.1 + 4.7.0 ``` @@ -93,18 +94,18 @@ Karus Labs' mono-repository for spigot libraries & tools. #### Scribe Maven Plugin - Maven plugin that generates a plugin.yml and infers values from a project's pom.xml [![releases-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-releases/com/karuslabs/scribe-maven-plugin/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-releases/com/karuslabs/scribe-maven-plugin) [![snapshots-maven](https://img.shields.io/maven-metadata/v/https/repo.karuslabs.com/repository/chimera-snapshots/com/karuslabs/scribe-maven-plugin/maven-metadata.xml.svg)](https://repo.karuslabs.com/service/rest/repository/browse/chimera-snapshots/com/karuslabs/scribe-maven-plugin) -[![javadoc](https://img.shields.io/badge/javadoc-4.6.1-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.6.1/scribe/scribe-maven-plugin/apidocs/index.html) +[![javadoc](https://img.shields.io/badge/javadoc-4.7.0-brightgreen.svg)](https://repo.karuslabs.com/repository/chimera/4.7.0/scribe/scribe-maven-plugin/apidocs/index.html) ```XML com.karuslabs scribe-annotations - 4.6.1 + 4.7.0 com.karuslabs scribe-maven-plugin - 4.6.1 + 4.7.0 diff --git a/commons/src/main/java/com/karuslabs/commons/command/ClientSuggestionProvider.java b/commons/src/main/java/com/karuslabs/commons/command/ClientSuggestionProvider.java index 416d91e2b..1bccb06db 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/ClientSuggestionProvider.java +++ b/commons/src/main/java/com/karuslabs/commons/command/ClientSuggestionProvider.java @@ -33,7 +33,7 @@ public enum ClientSuggestionProvider implements SuggestionProvider { - ENTITIES, RECIPES, SOUNDS; + BIOMES, ENTITIES, RECIPES, SOUNDS; @Override diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java index d9d786552..7b9f2e639 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/SpigotMapper.java @@ -50,7 +50,8 @@ class SpigotMapper extends Mapper { CLIENT_SIDE = new EnumMap<>(ClientSuggestionProvider.class); CLIENT_SIDE.put(ClientSuggestionProvider.RECIPES, CompletionProviders.b); CLIENT_SIDE.put(ClientSuggestionProvider.SOUNDS, CompletionProviders.c); - CLIENT_SIDE.put(ClientSuggestionProvider.ENTITIES, CompletionProviders.d); + CLIENT_SIDE.put(ClientSuggestionProvider.BIOMES, CompletionProviders.d); + CLIENT_SIDE.put(ClientSuggestionProvider.ENTITIES, CompletionProviders.e); } diff --git a/commons/src/main/java/com/karuslabs/commons/command/types/PointType.java b/commons/src/main/java/com/karuslabs/commons/command/types/PointType.java index e7f0febe1..35b5d3732 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/types/PointType.java +++ b/commons/src/main/java/com/karuslabs/commons/command/types/PointType.java @@ -112,7 +112,7 @@ public void suggest(SuggestionsBuilder builder, String[] parts) { } -class Point3DType extends PointType implements Cartesian2DType { +class Point3DType extends PointType implements Cartesian3DType { Point3DType() { super(List.of("0 0 0", "0.0 0.0 0.0", "^ ^ ^", "~ ~ ~"), X, Y, Z); From f0215c10200f6fdaea81d55678ef05f857d23558 Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Sun, 28 Jun 2020 20:26:09 +0800 Subject: [PATCH 14/16] Fix Dispatcher.update() not updating commands --- .../commons/command/dispatcher/Dispatcher.java | 3 +++ .../commons/command/dispatcher/DispatcherTest.java | 10 ++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java index b9f19f60c..5954f089f 100644 --- a/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java +++ b/commons/src/main/java/com/karuslabs/commons/command/dispatcher/Dispatcher.java @@ -92,6 +92,9 @@ public Literal register(Literal.Builder command) { public void update() { walker.prune(dispatcher.getRoot(), getRoot().getChildren()); + for (var player : server.server.getOnlinePlayers()) { + player.updateCommands(); + } } diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java index 91559aa2e..bce5798e9 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/DispatcherTest.java @@ -27,16 +27,17 @@ import com.mojang.brigadier.tree.CommandNode; -import java.util.Map; +import java.util.*; import net.minecraft.server.v1_16_R1.*; import org.bukkit.command.CommandSender; +import org.bukkit.plugin.*; import org.bukkit.craftbukkit.v1_16_R1.CraftServer; import org.bukkit.craftbukkit.v1_16_R1.command.CraftCommandMap; +import org.bukkit.craftbukkit.v1_16_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftScheduler; -import org.bukkit.plugin.*; import org.junit.jupiter.api.*; @@ -103,11 +104,16 @@ void register_builder() { @Test void update() { + var player = mock(CraftPlayer.class); + when(craftserver.getOnlinePlayers()).thenReturn(List.of(player)); + dispatcher.getRoot().addChild(Literal.of("a").build()); dispatcher.update(); + assertNotNull(dispatcher.dispatcher.getRoot().getChild("a")); + verify(player).updateCommands(); } From 74953f73e166bf9b750a43dd1472decdeaa6ba83 Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Sun, 28 Jun 2020 20:29:08 +0800 Subject: [PATCH 15/16] Fix misnamed file --- .../dispatcher/{NativeMapperTest.java => SpigotMapperTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename commons/src/test/java/com/karuslabs/commons/command/dispatcher/{NativeMapperTest.java => SpigotMapperTest.java} (99%) diff --git a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/SpigotMapperTest.java similarity index 99% rename from commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java rename to commons/src/test/java/com/karuslabs/commons/command/dispatcher/SpigotMapperTest.java index c1b67b4ad..e97f12f89 100644 --- a/commons/src/test/java/com/karuslabs/commons/command/dispatcher/NativeMapperTest.java +++ b/commons/src/test/java/com/karuslabs/commons/command/dispatcher/SpigotMapperTest.java @@ -45,7 +45,7 @@ import static org.mockito.Mockito.*; -class NativeMapperTest { +class SpigotMapperTest { static final SuggestionProvider PROVIDER = (a, b) -> null; From dc74c0a5c9c8bffa87a10297c1ccbcf042b94020 Mon Sep 17 00:00:00 2001 From: Matthias Ngeo Date: Sun, 28 Jun 2020 21:03:15 +0800 Subject: [PATCH 16/16] Test new dependencies --- pom.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 04ca11ea5..fb38ff48e 100644 --- a/pom.xml +++ b/pom.xml @@ -192,8 +192,6 @@ https://checkerframework.org/api/ https://hub.spigotmc.org/javadocs/spigot https://repo.karuslabs.com/repository/brigadier/ - @@ -210,12 +208,12 @@ org.apache.maven.plugins maven-site-plugin - 3.7.1 + 3.9.1 org.apache.maven.wagon wagon-webdav-jackrabbit - 3.1.0 + 3.4.1 @@ -223,7 +221,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.0.0 + 3.1.0