From 5c80209ac2fac623891b92fb8bc821bf0dd86972 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Mon, 13 May 2024 21:05:34 -0700 Subject: [PATCH 1/2] Implement config reloading --- .../addon/banners/SquaremapBanners.java | 19 ++++++++--- .../addon/claimchunk/SquaremapClaimChunk.java | 11 +++++- .../addon/claimchunk/hook/SquaremapHook.java | 5 +++ .../squaremap/addon/deathspot/DeathSpots.java | 16 ++++++--- .../addon/deathspot/hook/SquaremapHook.java | 5 +++ .../essentialsx/SquaremapEssentials.java | 19 ++++++++--- .../addon/essentialsx/hook/SquaremapHook.java | 8 ++++- .../SquaremapGriefPrevention.java | 11 +++++- .../griefprevention/hook/SquaremapHook.java | 5 +++ .../squaremap/addon/signs/SignsPlugin.java | 19 ++++++++--- .../addon/worldguard/SquaremapWorldGuard.java | 10 +++++- build.gradle.kts | 4 +-- common/build.gradle.kts | 2 ++ .../squaremap/addon/common/config/Config.java | 34 +++++++++++++++++++ 14 files changed, 143 insertions(+), 25 deletions(-) diff --git a/addons/banners/src/main/java/xyz/jpenilla/squaremap/addon/banners/SquaremapBanners.java b/addons/banners/src/main/java/xyz/jpenilla/squaremap/addon/banners/SquaremapBanners.java index 04d6038..49071ae 100644 --- a/addons/banners/src/main/java/xyz/jpenilla/squaremap/addon/banners/SquaremapBanners.java +++ b/addons/banners/src/main/java/xyz/jpenilla/squaremap/addon/banners/SquaremapBanners.java @@ -24,14 +24,23 @@ public void onEnable() { this.config = new BannersConfig(this); this.config.reload(); + final Runnable load = () -> { + this.squaremapHook = new SquaremapHook(); + this.squaremapHook.load(); + + this.bannerManager = new BannersManager(this); + this.bannerManager.load(); + }; + + this.config.registerReloadCommand(() -> { + this.onDisable(); + load.run(); + }); + //noinspection unused Key loadme = Icons.WHITE; - squaremapHook = new SquaremapHook(); - squaremapHook.load(); - - bannerManager = new BannersManager(this); - bannerManager.load(); + load.run(); getServer().getPluginManager().registerEvents(new BannersListener(this), this); getServer().getPluginManager().registerEvents(new WorldListener(this), this); diff --git a/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/SquaremapClaimChunk.java b/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/SquaremapClaimChunk.java index 74bb4d5..b3183b1 100644 --- a/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/SquaremapClaimChunk.java +++ b/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/SquaremapClaimChunk.java @@ -13,7 +13,16 @@ public void onEnable() { this.config = new ClaimChunkConfig(this); this.config.reload(); - this.squaremapHook = new SquaremapHook(this); + final Runnable load = () -> { + this.squaremapHook = new SquaremapHook(this); + }; + + this.config.registerReloadCommand(() -> { + this.onDisable(); + load.run(); + }); + + load.run(); } @Override diff --git a/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/hook/SquaremapHook.java b/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/hook/SquaremapHook.java index 1e81b9c..ba9700d 100644 --- a/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/hook/SquaremapHook.java +++ b/addons/claimchunk/src/main/java/xyz/jpenilla/squaremap/addon/claimchunk/hook/SquaremapHook.java @@ -35,6 +35,11 @@ public SquaremapHook(final SquaremapClaimChunk plugin) { public void disable() { this.tasks.values().forEach(SquaremapTask::disable); + SquaremapProvider.get().mapWorlds().forEach(w -> { + if (w.layerRegistry().hasEntry(CLAIM_CHUNK_LAYER_KEY)) { + w.layerRegistry().unregister(CLAIM_CHUNK_LAYER_KEY); + } + }); this.tasks.clear(); } } diff --git a/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/DeathSpots.java b/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/DeathSpots.java index 402846a..4e040bb 100644 --- a/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/DeathSpots.java +++ b/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/DeathSpots.java @@ -26,13 +26,21 @@ public void onEnable() { this.config = new DeathSpotConfig(this); this.config.reload(); - if (!new File(this.getDataFolder(), "icon.png").exists()) { - this.saveResource("icon.png", false); - } + final Runnable load = () -> { + if (!new File(this.getDataFolder(), "icon.png").exists()) { + this.saveResource("icon.png", false); + } + this.squaremapHook = new SquaremapHook(this); + }; + + this.config.registerReloadCommand(() -> { + this.onDisable(); + load.run(); + }); this.getServer().getPluginManager().registerEvents(new PlayerListener(this), this); - this.squaremapHook = new SquaremapHook(this); + load.run(); } @Override diff --git a/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/hook/SquaremapHook.java b/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/hook/SquaremapHook.java index eb8178b..766c7f2 100644 --- a/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/hook/SquaremapHook.java +++ b/addons/deathspot/src/main/java/xyz/jpenilla/squaremap/addon/deathspot/hook/SquaremapHook.java @@ -53,6 +53,11 @@ public SquaremapHook(final DeathSpots plugin) { public void disable() { this.tasks.values().forEach(SquaremapTask::disable); + SquaremapProvider.get().mapWorlds().forEach(w -> { + if (w.layerRegistry().hasEntry(DEATH_SPOTS_LAYER_KEY)) { + w.layerRegistry().unregister(DEATH_SPOTS_LAYER_KEY); + } + }); this.tasks.clear(); } } diff --git a/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/SquaremapEssentials.java b/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/SquaremapEssentials.java index 865ce01..1ad2644 100644 --- a/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/SquaremapEssentials.java +++ b/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/SquaremapEssentials.java @@ -19,12 +19,21 @@ public void onEnable() { this.config = new EssXConfig(this); this.config.reload(); - if (!new File(this.getDataFolder(), "warp.png").exists()) { - this.saveResource("warp.png", false); - } + final Runnable load = () -> { + if (!new File(this.getDataFolder(), "warp.png").exists()) { + this.saveResource("warp.png", false); + } + + this.squaremapHook = new SquaremapHook(this); + this.squaremapHook.load(); + }; + + this.config.registerReloadCommand(() -> { + this.onDisable(); + load.run(); + }); - this.squaremapHook = new SquaremapHook(this); - this.squaremapHook.load(); + load.run(); this.getServer().getPluginManager().registerEvents(new EssentialsListener(this), this); } diff --git a/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/hook/SquaremapHook.java b/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/hook/SquaremapHook.java index aebedcb..a7e859f 100644 --- a/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/hook/SquaremapHook.java +++ b/addons/essentialsx/src/main/java/xyz/jpenilla/squaremap/addon/essentialsx/hook/SquaremapHook.java @@ -18,6 +18,7 @@ import static xyz.jpenilla.squaremap.api.Key.key; public final class SquaremapHook { + public static final Key WARP_LAYER_KEY = key("essentials_warps"); public static final Key WARP_ICON_KEY = key("essentials_warp_icon"); private final Map tasks = new HashMap<>(); @@ -45,7 +46,7 @@ public void load() { .showControls(worldConfig.warpsShowControls) .defaultHidden(worldConfig.warpsControlsHidden) .build(); - mapWorld.layerRegistry().register(Key.of("essentials_warps"), provider); + mapWorld.layerRegistry().register(WARP_LAYER_KEY, provider); SquaremapTask task = new SquaremapTask(mapWorld, worldConfig, provider); task.runTaskTimerAsynchronously(this.plugin, 0, 20L * this.plugin.config().updateInterval); this.tasks.put(mapWorld.identifier(), task); @@ -54,6 +55,11 @@ public void load() { public void disable() { this.tasks.values().forEach(SquaremapTask::disable); + SquaremapProvider.get().mapWorlds().forEach(w -> { + if (w.layerRegistry().hasEntry(WARP_LAYER_KEY)) { + w.layerRegistry().unregister(WARP_LAYER_KEY); + } + }); this.tasks.clear(); } } diff --git a/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/SquaremapGriefPrevention.java b/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/SquaremapGriefPrevention.java index 2404f84..88f2217 100644 --- a/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/SquaremapGriefPrevention.java +++ b/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/SquaremapGriefPrevention.java @@ -17,7 +17,16 @@ public void onEnable() { this.config = new GPConfig(this); this.config.reload(); - this.squaremapHook = new SquaremapHook(this); + final Runnable load = () -> { + this.squaremapHook = new SquaremapHook(this); + }; + + this.config.registerReloadCommand(() -> { + this.onDisable(); + load.run(); + }); + + load.run(); } @Override diff --git a/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/hook/SquaremapHook.java b/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/hook/SquaremapHook.java index 18dc3de..0412457 100644 --- a/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/hook/SquaremapHook.java +++ b/addons/griefprevention/src/main/java/xyz/jpenilla/squaremap/addon/griefprevention/hook/SquaremapHook.java @@ -40,6 +40,11 @@ public SquaremapHook(SquaremapGriefPrevention plugin) { public void disable() { this.tasks.values().forEach(SquaremapTask::disable); + SquaremapProvider.get().mapWorlds().forEach(w -> { + if (w.layerRegistry().hasEntry(GP_LAYER_KEY)) { + w.layerRegistry().unregister(GP_LAYER_KEY); + } + }); this.tasks.clear(); } } diff --git a/addons/signs/src/main/java/xyz/jpenilla/squaremap/addon/signs/SignsPlugin.java b/addons/signs/src/main/java/xyz/jpenilla/squaremap/addon/signs/SignsPlugin.java index f94f846..7f945b1 100644 --- a/addons/signs/src/main/java/xyz/jpenilla/squaremap/addon/signs/SignsPlugin.java +++ b/addons/signs/src/main/java/xyz/jpenilla/squaremap/addon/signs/SignsPlugin.java @@ -25,12 +25,21 @@ public void onEnable() { this.config = new SignsConfig(this); this.config.reload(); - Icons.register(this); - this.customIcons = CustomIcons.register(this); + final Runnable load = () -> { + Icons.register(this); + this.customIcons = CustomIcons.register(this); - this.layerProviderManager = new LayerProviderManager(this); - this.signManager = new SignManager(this); - this.layerProviderManager.load(); + this.layerProviderManager = new LayerProviderManager(this); + this.signManager = new SignManager(this); + this.layerProviderManager.load(); + }; + + this.config.registerReloadCommand(() -> { + this.onDisable(); + load.run(); + }); + + load.run(); this.getServer().getPluginManager().registerEvents(new SignListener(this), this); this.getServer().getPluginManager().registerEvents(new WorldListener(this), this); diff --git a/addons/worldguard/src/main/java/xyz/jpenilla/squaremap/addon/worldguard/SquaremapWorldGuard.java b/addons/worldguard/src/main/java/xyz/jpenilla/squaremap/addon/worldguard/SquaremapWorldGuard.java index e00060e..fcc9e69 100644 --- a/addons/worldguard/src/main/java/xyz/jpenilla/squaremap/addon/worldguard/SquaremapWorldGuard.java +++ b/addons/worldguard/src/main/java/xyz/jpenilla/squaremap/addon/worldguard/SquaremapWorldGuard.java @@ -27,7 +27,15 @@ public void onEnable() { this.config = new WGConfig(this); this.config.reload(); - this.squaremapHook = new SquaremapHook(this); + final Runnable load = () -> { + this.squaremapHook = new SquaremapHook(this); + }; + + this.config.registerReloadCommand(() -> { + this.onDisable(); + load.run(); + }); + this.getServer().getPluginManager().registerEvents(new EventListener(this), this); } diff --git a/build.gradle.kts b/build.gradle.kts index 6436151..5a48cb8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -29,8 +29,8 @@ tasks { minecraftVersion("1.20.1") downloadPlugins { hangar("squaremap", "1.2.0") - url("https://ci.enginehub.org/repository/download/bt10/22612:id/worldedit-bukkit-7.2.16-SNAPSHOT-dist.jar?guest=1") - url("https://ci.enginehub.org/repository/download/bt11/22585:id/worldguard-bukkit-7.0.10-SNAPSHOT-dist.jar?guest=1") + //url("https://ci.enginehub.org/repository/download/bt10/22612:id/worldedit-bukkit-7.2.16-SNAPSHOT-dist.jar?guest=1") + //url("https://ci.enginehub.org/repository/download/bt11/22585:id/worldguard-bukkit-7.0.10-SNAPSHOT-dist.jar?guest=1") } } } diff --git a/common/build.gradle.kts b/common/build.gradle.kts index d1cf0ba..acca20f 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -7,6 +7,8 @@ description = "Common code shared between all addon plugins in this repository" dependencies { api(platform("org.spongepowered:configurate-bom:4.1.2")) api("org.spongepowered:configurate-yaml") + api(platform("org.incendo:cloud-minecraft-bom:2.0.0-beta.7")) + api("org.incendo:cloud-paper") compileOnlyApi("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT") { exclude("org.yaml", "snakeyaml") diff --git a/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java b/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java index bcba458..0cbd8c4 100644 --- a/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java +++ b/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java @@ -11,12 +11,19 @@ import java.nio.file.Path; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.World; +import org.bukkit.command.CommandSender; import org.bukkit.plugin.Plugin; import org.checkerframework.checker.nullness.qual.Nullable; +import org.incendo.cloud.bukkit.BukkitCommandMeta; +import org.incendo.cloud.execution.ExecutionCoordinator; +import org.incendo.cloud.paper.PaperCommandManager; import org.spongepowered.configurate.ConfigurationNode; import org.spongepowered.configurate.serialize.SerializationException; import org.spongepowered.configurate.transformation.ConfigurationTransformation; @@ -28,6 +35,7 @@ import xyz.jpenilla.squaremap.api.WorldIdentifier; import static java.util.Objects.requireNonNull; +import static org.incendo.cloud.description.Description.description; @SuppressWarnings("unused") public abstract class Config, W extends WorldConfig> { @@ -38,6 +46,7 @@ public abstract class Config, W extends WorldConfig> { private final YamlConfigurationLoader loader; private final @Nullable Class worldConfigClass; private final @Nullable Map worldConfigs; + private final Plugin plugin; ConfigurationNode config; protected Config(final Class configClass, final Plugin plugin) { @@ -58,6 +67,31 @@ protected Config( .nodeStyle(NodeStyle.BLOCK) .defaultOptions(options -> options.serializers(builder -> builder.register(ColorSerializer.INSTANCE))) .build(); + this.plugin = plugin; + } + + public void registerReloadCommand(final Runnable callback) { + final PaperCommandManager manager = + PaperCommandManager.createNative(this.plugin, ExecutionCoordinator.simpleCoordinator()); + + manager.command( + manager.commandBuilder(this.plugin.getName().toLowerCase(Locale.ROOT)) + .literal("reload") + .permission(this.plugin.getName().toLowerCase(Locale.ROOT) + ".command.reload") + .meta(BukkitCommandMeta.BUKKIT_DESCRIPTION, this.plugin.getName() + " commands.") + .commandDescription(description("Reloads the " + this.plugin.getName() + " config.")) + .handler(ctx -> { + ctx.sender().sendMessage(Component.text("Reloading " + this.plugin.getName() + "...", NamedTextColor.GREEN)); + try { + this.reload(); + callback.run(); + } catch (final Exception e) { + ctx.sender().sendMessage(Component.text("Failed to reload. Check console for errors.", NamedTextColor.RED)); + this.plugin.getSLF4JLogger().error("Failed to reload", e); + } + ctx.sender().sendMessage(Component.text("Done reloading " + this.plugin.getName() + ".", NamedTextColor.GREEN)); + }) + ); } protected void addVersions(final ConfigurationTransformation.VersionedBuilder versionedBuilder) { From 744f39aa443ea457fa70a46c92629409073e8a3a Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Mon, 13 May 2024 21:17:40 -0700 Subject: [PATCH 2/2] Enable Brigadier --- .../java/xyz/jpenilla/squaremap/addon/common/config/Config.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java b/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java index 0cbd8c4..4a37b14 100644 --- a/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java +++ b/common/src/main/java/xyz/jpenilla/squaremap/addon/common/config/Config.java @@ -74,6 +74,8 @@ public void registerReloadCommand(final Runnable callback) { final PaperCommandManager manager = PaperCommandManager.createNative(this.plugin, ExecutionCoordinator.simpleCoordinator()); + manager.registerBrigadier(); + manager.command( manager.commandBuilder(this.plugin.getName().toLowerCase(Locale.ROOT)) .literal("reload")