From 52c3c731abe43a1576bb106738e5d57374171f8a Mon Sep 17 00:00:00 2001 From: Xemor Date: Fri, 2 Jan 2026 23:48:32 +0000 Subject: [PATCH 1/4] Rewrite to be a paper plugin --- build.gradle.kts | 12 ++--- .../me/xemor/superheroes/CooldownHandler.java | 6 +-- .../xemor/superheroes/DependencyLoader.java | 32 +++++++++++++ .../me/xemor/superheroes/Superheroes.java | 37 +++++++++------ .../superheroes/commands/CheckCommand.java | 11 ++--- .../superheroes/commands/ExportCommand.java | 7 ++- .../superheroes/commands/GUICommand.java | 5 +- .../superheroes/commands/HeroCommand.java | 5 +- .../superheroes/commands/ImportCommand.java | 9 ++-- .../superheroes/commands/ReloadCommand.java | 7 ++- .../superheroes/commands/RerollCommand.java | 9 ++-- .../superheroes/commands/SelectCommand.java | 9 ++-- .../xemor/superheroes/data/HeroHandler.java | 19 +++----- .../superheroes/data/SuperheroPlayer.java | 4 +- .../events/HeroBlockBreakEvent.java | 3 +- .../skills/implementations/EraserSkill.java | 11 ++--- .../implementations/PotionGifterSkill.java | 4 +- .../skills/implementations/SpellSkill.java | 3 +- .../implementations/StrongmanSkill.java | 3 +- src/main/resources/paper-plugin.yml | 26 ++++++++++ src/main/resources/plugin.yml | 47 ------------------- 21 files changed, 134 insertions(+), 135 deletions(-) create mode 100644 src/main/java/me/xemor/superheroes/DependencyLoader.java create mode 100644 src/main/resources/paper-plugin.yml delete mode 100644 src/main/resources/plugin.yml diff --git a/build.gradle.kts b/build.gradle.kts index ba3d8e1..7c5188c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,11 @@ plugins { repositories { mavenLocal() mavenCentral() + maven { + name = "papermc" + url = uri("https://repo.papermc.io/repository/maven-public/") + } maven { url = uri("https://repo.xemor.zip/releases")} - maven { url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") } maven { url = uri("https://repo.papermc.io/repository/maven-public/")} maven { url = uri("https://repo.codemc.org/repository/maven-public") } maven { url = uri("https://repo.minebench.de/") } @@ -35,9 +38,9 @@ repositories { } dependencies { - compileOnly("org.spigotmc:spigot-api:1.21.8-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:1.21.10-R0.1-SNAPSHOT") compileOnly("com.sk89q.worldguard:worldguard-bukkit:7.0.9") - compileOnly("me.xemor:skillslibrary:4.1.3") + compileOnly("me.xemor:skillslibrary:4.2.0") compileOnly("com.fasterxml.jackson.core:jackson-core:2.18.0") compileOnly("com.fasterxml.jackson.core:jackson-databind:2.18.2") compileOnly("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.0") @@ -46,8 +49,6 @@ dependencies { shadow("org.bstats:bstats-bukkit:1.7") shadow("me.xemor:userinterfaces:2.0.2-SNAPSHOT") shadow("org.jetbrains:annotations:20.1.0") - shadow("net.kyori:adventure-platform-bukkit:4.4.0") - shadow("net.kyori:adventure-text-minimessage:4.17.0") shadow("mysql:mysql-connector-java:8.0.29") shadow("me.sepdron:HeadCreator:2.1.1") shadow("com.zaxxer:HikariCP:4.0.3") @@ -64,7 +65,6 @@ java { tasks.shadowJar { minimize() - relocate("net.kyori", "me.xemor.superheroes.kyori") relocate("me.xemor.configurationdata", "me.xemor.superheroes.configurationdata") relocate("org.jetbrains", "me.xemor.superheroes.org.jetbrains") relocate("mysql", "me.xemor.superheroes.mysql") diff --git a/src/main/java/me/xemor/superheroes/CooldownHandler.java b/src/main/java/me/xemor/superheroes/CooldownHandler.java index 944d60c..a5b3d78 100644 --- a/src/main/java/me/xemor/superheroes/CooldownHandler.java +++ b/src/main/java/me/xemor/superheroes/CooldownHandler.java @@ -1,12 +1,12 @@ package me.xemor.superheroes; -import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.md_5.bungee.api.ChatMessageType; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; import java.util.HashMap; import java.util.UUID; @@ -38,7 +38,7 @@ public boolean isCooldownOver(UUID uuid, String cooldownMessage) { long seconds = getCurrentCooldown(uuid); if (!cooldownMessage.equals("") && seconds > 0) { Component component = MiniMessage.miniMessage().deserialize(cooldownMessage, Placeholder.unparsed("currentcooldown",String.valueOf(seconds))); - Audience player = Superheroes.getBukkitAudiences().player(Bukkit.getPlayer(uuid)); + Player player = Bukkit.getPlayer(uuid); if (chatMessageType == ChatMessageType.ACTION_BAR) { player.sendActionBar(component); } @@ -53,7 +53,7 @@ public long getCurrentCooldown(UUID uuid) { if (timeAtCooldownStart <= System.currentTimeMillis()) { return 0; } - return ((timeAtCooldownStart - System.currentTimeMillis()) / 1000); + return (timeAtCooldownStart - System.currentTimeMillis()) / 1000; } else { return 0; diff --git a/src/main/java/me/xemor/superheroes/DependencyLoader.java b/src/main/java/me/xemor/superheroes/DependencyLoader.java new file mode 100644 index 0000000..6e4361c --- /dev/null +++ b/src/main/java/me/xemor/superheroes/DependencyLoader.java @@ -0,0 +1,32 @@ +package me.xemor.superheroes; + +import io.papermc.paper.plugin.loader.PluginClasspathBuilder; +import io.papermc.paper.plugin.loader.PluginLoader; +import io.papermc.paper.plugin.loader.library.impl.MavenLibraryResolver; +import org.eclipse.aether.artifact.DefaultArtifact; +import org.eclipse.aether.graph.Dependency; +import org.eclipse.aether.repository.RemoteRepository; + +import java.util.List; + +public class DependencyLoader implements PluginLoader { + + @Override + public void classloader(PluginClasspathBuilder classpathBuilder) { + MavenLibraryResolver resolver = new MavenLibraryResolver(); + List mavenCentralDependencies = + List.of( + "com.fasterxml.jackson.core:jackson-core:2.18.0", + "com.fasterxml.jackson.core:jackson-databind:2.18.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.0" + ); + for (String dependency : mavenCentralDependencies) { + resolver.addDependency(new Dependency(new DefaultArtifact(dependency), null)); + } + + resolver.addRepository(new RemoteRepository.Builder("central", "default", MavenLibraryResolver.MAVEN_CENTRAL_DEFAULT_MIRROR).build()); + + classpathBuilder.addLibrary(resolver); + } + +} diff --git a/src/main/java/me/xemor/superheroes/Superheroes.java b/src/main/java/me/xemor/superheroes/Superheroes.java index af72751..9c4d434 100644 --- a/src/main/java/me/xemor/superheroes/Superheroes.java +++ b/src/main/java/me/xemor/superheroes/Superheroes.java @@ -10,12 +10,10 @@ import me.xemor.superheroes.sentry.SentryInitializer; import me.xemor.superheroes.skills.implementations.*; import me.xemor.userinterface.ChestHandler; -import net.kyori.adventure.platform.bukkit.BukkitAudiences; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; -import org.bukkit.command.PluginCommand; import org.bukkit.command.defaults.BukkitCommand; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -28,7 +26,6 @@ import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import me.xemor.foliahacks.FoliaHacks; -import org.lushplugins.unifiedprotection.UnifiedProtection; import org.lushplugins.unifiedprotection.bukkit.BukkitUnifiedProtection; import space.arim.morepaperlib.scheduling.GracefulScheduling; @@ -42,7 +39,6 @@ public final class Superheroes extends JavaPlugin implements Listener { private ConfigHandler configHandler; private HeroHandler heroHandler; private RerollHandler rerollHandler; - private static BukkitAudiences bukkitAudiences; private boolean hasSkillsLibrary; private static Superheroes superheroes; private WorldGuardSupport worldGuardSupport; @@ -53,10 +49,6 @@ public static Superheroes getInstance() { return superheroes; } - public static BukkitAudiences getBukkitAudiences() { - return bukkitAudiences; - } - public static GracefulScheduling getScheduling() { return foliaHacks.getScheduling(); } @@ -90,17 +82,33 @@ public void onEnable() { this.registerSkills(); this.getServer().getPluginManager().registerEvents(this, this); HeroCommand heroCommand = new HeroCommand(this.heroHandler); - PluginCommand command = this.getCommand("hero"); - command.setExecutor(heroCommand); - command.setTabCompleter(heroCommand); + + // Register hero command + BukkitCommand heroCommandBukkit = new BukkitCommand("hero") { + @Override + public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { + return heroCommand.onCommand(sender, this, commandLabel, args); + } + + @NotNull + @Override + public List tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException { + return heroCommand.onTabComplete(sender, this, alias, args); + } + }; + heroCommandBukkit.setDescription("The root command of all of the commands within Superheroes"); + heroCommandBukkit.setUsage("/hero "); + + CommandMap commandMap = foliaHacks.getMorePaperLib().commandRegistration().getServerCommandMap(); + commandMap.register("superheroes", heroCommandBukkit); + handleMetrics(); plusUltraAdvertisement(); checkForNewUpdate(); - bukkitAudiences = BukkitAudiences.create(this); if (this.hasSkillsLibrary) { this.runSkillsLibraryChanges(); } - handleAliases(heroCommand, command); + handleAliases(heroCommand, heroCommandBukkit); registerUserInterfaces(); handleWorldGuardCompatibility(); } @@ -193,7 +201,6 @@ public void checkForNewUpdate() { } public void onDisable() { - bukkitAudiences.close(); superheroes.getHeroHandler().getHeroIOHandler().shutdown(); } @@ -259,7 +266,7 @@ public RerollHandler getRerollHandler() { return this.rerollHandler; } - private void handleAliases(final HeroCommand heroCommand, PluginCommand command) { + private void handleAliases(final HeroCommand heroCommand, BukkitCommand command) { List commandAliases = ConfigHandler.getConfigYAML().heroCommand().aliases(); if (!commandAliases.isEmpty()) { BukkitCommand aliasCommand = new BukkitCommand(commandAliases.get(0)) { diff --git a/src/main/java/me/xemor/superheroes/commands/CheckCommand.java b/src/main/java/me/xemor/superheroes/commands/CheckCommand.java index d94da60..fdcc5ba 100644 --- a/src/main/java/me/xemor/superheroes/commands/CheckCommand.java +++ b/src/main/java/me/xemor/superheroes/commands/CheckCommand.java @@ -18,32 +18,31 @@ public class CheckCommand implements SubCommand { @Override public void onCommand(CommandSender sender, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); if (sender.hasPermission("superheroes.hero.check")) { if (args.length > 1) { if (sender.hasPermission("superheroes.hero.check.others")) { Player other = Bukkit.getPlayer(args[1]); if (other == null) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidPlayerMessage(), + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidPlayerMessage(), Placeholder.unparsed("player", sender.getName()))); return; } Superhero hero = Superheroes.getInstance().getHeroHandler().getSuperhero(other); - audience.sendMessage( + sender.sendMessage( MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getCurrentHero(), Placeholder.unparsed("player", other.getName()), Placeholder.unparsed("hero", hero.getName())) ); } else { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); } } else { if (sender instanceof Player player) { Superhero hero = Superheroes.getInstance().getHeroHandler().getSuperhero(player); - audience.sendMessage( + sender.sendMessage( MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", player.getName()), Placeholder.unparsed("hero", hero.getName())) @@ -52,7 +51,7 @@ public void onCommand(CommandSender sender, String[] args) { } } else { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); } } diff --git a/src/main/java/me/xemor/superheroes/commands/ExportCommand.java b/src/main/java/me/xemor/superheroes/commands/ExportCommand.java index 8fbbefb..01227a3 100644 --- a/src/main/java/me/xemor/superheroes/commands/ExportCommand.java +++ b/src/main/java/me/xemor/superheroes/commands/ExportCommand.java @@ -20,15 +20,14 @@ public ExportCommand() { @Override public void onCommand(CommandSender sender, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); if (sender.hasPermission("superheroes.hero.export")) { - audience.sendMessage(exporting); + sender.sendMessage(exporting); Superheroes.getInstance().getHeroHandler().getHeroIOHandler().exportFiles(); Superheroes.getInstance().getConfigHandler().reloadConfig(Superheroes.getInstance().getHeroHandler()); - audience.sendMessage(done); + sender.sendMessage(done); } else { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); } } diff --git a/src/main/java/me/xemor/superheroes/commands/GUICommand.java b/src/main/java/me/xemor/superheroes/commands/GUICommand.java index c8f29e1..6cabc40 100644 --- a/src/main/java/me/xemor/superheroes/commands/GUICommand.java +++ b/src/main/java/me/xemor/superheroes/commands/GUICommand.java @@ -16,9 +16,8 @@ public class GUICommand implements SubCommand { @Override public void onCommand(CommandSender sender, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); if (!sender.hasPermission("superheroes.hero.gui")) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); return; } HeroHandler heroHandler = Superheroes.getInstance().getHeroHandler(); @@ -31,7 +30,7 @@ public void onCommand(CommandSender sender, String[] args) { Player player = Bukkit.getPlayer(args[1]); if (player == null) { var component = MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidPlayerMessage(), Placeholder.unparsed("player", sender.getName())); - audience.sendMessage(component); + sender.sendMessage(component); return; } heroHandler.openHeroGUI(player); diff --git a/src/main/java/me/xemor/superheroes/commands/HeroCommand.java b/src/main/java/me/xemor/superheroes/commands/HeroCommand.java index 4e63808..8781932 100644 --- a/src/main/java/me/xemor/superheroes/commands/HeroCommand.java +++ b/src/main/java/me/xemor/superheroes/commands/HeroCommand.java @@ -40,9 +40,8 @@ public HeroCommand(HeroHandler heroHandler) { } public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); if (!sender.hasPermission("superheroes.hero")) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); return true; } if (args.length >= 1) { @@ -50,7 +49,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command try { commandType = SubCommands.valueOf(args[0].toUpperCase()); } catch (IllegalArgumentException e) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidCommandMessage(), Placeholder.unparsed("player", sender.getName()))); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidCommandMessage(), Placeholder.unparsed("player", sender.getName()))); return true; } switch (commandType) { diff --git a/src/main/java/me/xemor/superheroes/commands/ImportCommand.java b/src/main/java/me/xemor/superheroes/commands/ImportCommand.java index b60bdfa..ebd1ad7 100644 --- a/src/main/java/me/xemor/superheroes/commands/ImportCommand.java +++ b/src/main/java/me/xemor/superheroes/commands/ImportCommand.java @@ -24,18 +24,17 @@ public ImportCommand() { @Override public void onCommand(CommandSender sender, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); ConfigHandler configHandler = Superheroes.getInstance().getConfigHandler(); if (sender.hasPermission("superheroes.hero.import")) { - audience.sendMessage(notReload); - audience.sendMessage(importing); + sender.sendMessage(notReload); + sender.sendMessage(importing); HeroHandler heroHandler = Superheroes.getInstance().getHeroHandler(); heroHandler.getHeroIOHandler().importFiles() .thenAccept((ignored) -> Superheroes.getScheduling().asyncScheduler().run(() -> configHandler.reloadConfig(heroHandler))); - audience.sendMessage(done); + sender.sendMessage(done); } else { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); } } diff --git a/src/main/java/me/xemor/superheroes/commands/ReloadCommand.java b/src/main/java/me/xemor/superheroes/commands/ReloadCommand.java index 79edba2..2c32c83 100644 --- a/src/main/java/me/xemor/superheroes/commands/ReloadCommand.java +++ b/src/main/java/me/xemor/superheroes/commands/ReloadCommand.java @@ -25,14 +25,13 @@ public ReloadCommand(HeroHandler heroHandler, ConfigHandler configHandler) { @Override public void onCommand(CommandSender sender, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); if (sender.hasPermission("superheroes.hero.reload")) { - audience.sendMessage(reloading); + sender.sendMessage(reloading); configHandler.reloadConfig(heroHandler); - audience.sendMessage(done); + sender.sendMessage(done); } else { - audience.sendMessage(noPermission); + sender.sendMessage(noPermission); } } diff --git a/src/main/java/me/xemor/superheroes/commands/RerollCommand.java b/src/main/java/me/xemor/superheroes/commands/RerollCommand.java index f6a99b8..b69cfee 100644 --- a/src/main/java/me/xemor/superheroes/commands/RerollCommand.java +++ b/src/main/java/me/xemor/superheroes/commands/RerollCommand.java @@ -20,7 +20,6 @@ public class RerollCommand implements SubCommand, Listener { @Override public void onCommand(CommandSender sender, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); if (sender.hasPermission("superheroes.hero.reroll")) { RerollHandler rerollHandler = Superheroes.getInstance().getRerollHandler(); String rerollGroupName; @@ -30,19 +29,19 @@ public void onCommand(CommandSender sender, String[] args) { rerollGroupName = "default"; } if (!sender.hasPermission("superheroes.hero.reroll." + rerollGroupName)) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); return; } RerollGroup rerollGroup = rerollHandler.getWeightedHeroes(rerollGroupName); if (rerollGroup == null) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidRerollGroupMessage(), Placeholder.unparsed("player", sender.getName()))); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidRerollGroupMessage(), Placeholder.unparsed("player", sender.getName()))); return; } Player player; if (args.length >= 3) { player = Bukkit.getPlayer(args[2]); if (player == null) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidPlayerMessage(), Placeholder.unparsed("player", sender.getName()))); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidPlayerMessage(), Placeholder.unparsed("player", sender.getName()))); return; } } else if (sender instanceof Player) { @@ -52,7 +51,7 @@ public void onCommand(CommandSender sender, String[] args) { } Superheroes.getInstance().getHeroHandler().setHero(player, rerollGroup.chooseHero(player), true, PlayerChangedSuperheroEvent.Cause.REROLL); } else { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission())); } } diff --git a/src/main/java/me/xemor/superheroes/commands/SelectCommand.java b/src/main/java/me/xemor/superheroes/commands/SelectCommand.java index 664847b..6de682d 100644 --- a/src/main/java/me/xemor/superheroes/commands/SelectCommand.java +++ b/src/main/java/me/xemor/superheroes/commands/SelectCommand.java @@ -28,9 +28,8 @@ public SelectCommand(HeroHandler heroHandler, ConfigHandler configHandler) { @Override public void onCommand(CommandSender sender, String[] args) { - Audience audience = Superheroes.getBukkitAudiences().sender(sender); if (!sender.hasPermission("superheroes.hero.select")) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); return; } Superhero power; @@ -47,19 +46,19 @@ public void onCommand(CommandSender sender, String[] args) { power = heroHandler.getSuperhero(args[1].toLowerCase()); } if (power == null) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidHeroMessage(), + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getInvalidHeroMessage(), Placeholder.unparsed("player", sender.getName()), Placeholder.unparsed("hero", args[1]) )); return; } if (!sender.hasPermission("superheroes.hero.select." + power.getName().toLowerCase()) && Superheroes.getInstance().getRerollHandler().getRerollConfig().getGlobalRerollSettings().doesEachHeroRequirePermissions()) { - audience.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); + sender.sendMessage(MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getNoPermission(), Placeholder.unparsed("player", sender.getName()))); return; } if (sender instanceof Player senderPlayer) { SuperheroPlayer superheroPlayer = heroHandler.getSuperheroPlayer(senderPlayer); - if (!sender.hasPermission("superheroes.hero.select.bypasscooldown") && !superheroPlayer.handleCooldown(senderPlayer, audience)) { + if (!sender.hasPermission("superheroes.hero.select.bypasscooldown") && !superheroPlayer.handleCooldown(senderPlayer)) { return; } } diff --git a/src/main/java/me/xemor/superheroes/data/HeroHandler.java b/src/main/java/me/xemor/superheroes/data/HeroHandler.java index f53e315..69da51f 100644 --- a/src/main/java/me/xemor/superheroes/data/HeroHandler.java +++ b/src/main/java/me/xemor/superheroes/data/HeroHandler.java @@ -6,13 +6,11 @@ import me.xemor.superheroes.events.PlayerAsyncCheckSuperheroEvent; import me.xemor.superheroes.events.SuperheroPlayerJoinEvent; import me.xemor.superheroes.reroll.RerollGroup; -import me.xemor.superheroes.skills.Skill; import me.xemor.userinterface.ChestInterface; -import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import net.kyori.adventure.title.Title; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Sound; @@ -20,6 +18,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.time.Duration; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; @@ -151,7 +150,7 @@ public void openHeroGUI(final Player player) { if (superhero.getIcon() == null) continue; chestInterface.getInventory().addItem(superhero.getIcon()); chestInterface.getInteractions().addSimpleInteraction(superhero.getIcon(), p -> { - if (getSuperheroPlayer(player).handleCooldown(player, Superheroes.getBukkitAudiences().player(player))) { + if (getSuperheroPlayer(player).handleCooldown(player)) { setHero(p, superhero); } chestInterface.getInteractions().getData()[0] = true; @@ -211,16 +210,10 @@ public Superhero getRandomHero(Player player) { public void showHero(Player player, Superhero hero) { Component colouredName = MiniMessage.miniMessage().deserialize(hero.getColouredName()); Component description = MiniMessage.miniMessage().deserialize(hero.getDescription()); - Audience playerAudience = Superheroes.getBukkitAudiences().player(player); - /* + Title title = Title.title(colouredName, description, Title.Times.times(Duration.ofMillis(500L), Duration.ofMillis(5000L), Duration.ofMillis(500L))); - playerAudience.showTitle(title); + player.showTitle(title); - Adventure Developers aren't on top of maintaining adventure platform bukkit, so I will use a work around to prevent sendTitle from breaking every 3 milliseconds. - */ - String colouredNameSpigot = LegacyComponentSerializer.builder().useUnusualXRepeatedCharacterHexFormat().hexColors().build().serialize(colouredName); - String descriptionSpigot = LegacyComponentSerializer.builder().useUnusualXRepeatedCharacterHexFormat().hexColors().build().serialize(description); - player.sendTitle(colouredNameSpigot, descriptionSpigot, 10, 100, 10); if (hero.getHeroGainedSound() != null) player.playSound( player.getLocation(), @@ -230,7 +223,7 @@ public void showHero(Player player, Superhero hero) { ); else player.playSound(player.getLocation(), Sound.ITEM_TOTEM_USE, 0.5f, 1.0f); Component heroGainedMessage = MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getGainedHero(), Placeholder.component("hero", colouredName), Placeholder.unparsed("player", player.getName())); - playerAudience.sendMessage(heroGainedMessage); + player.sendMessage(heroGainedMessage); } @Nullable diff --git a/src/main/java/me/xemor/superheroes/data/SuperheroPlayer.java b/src/main/java/me/xemor/superheroes/data/SuperheroPlayer.java index 724d852..7f2f055 100644 --- a/src/main/java/me/xemor/superheroes/data/SuperheroPlayer.java +++ b/src/main/java/me/xemor/superheroes/data/SuperheroPlayer.java @@ -63,14 +63,14 @@ public long getCooldownLeft() { return cooldown - (System.currentTimeMillis() - this.getHeroCommandTimestamp()); } - public boolean handleCooldown(Player player, Audience audience) { + public boolean handleCooldown(Player player) { long seconds = this.getCooldownLeft() / 1000; if (!player.hasPermission("superheroes.hero.select.bypasscooldown") && !this.isCooldownOver()) { Component message = MiniMessage.miniMessage().deserialize(ConfigHandler.getLanguageYAML().chatLanguageSettings().getHeroCommandCooldown(), Placeholder.unparsed("player", player.getName()), Placeholder.unparsed("currentcooldown", String.valueOf(Math.round(seconds))), Placeholder.unparsed("cooldown", String.valueOf(ConfigHandler.getConfigYAML().heroCommand().cooldown()))); - audience.sendMessage(message); + player.sendMessage(message); return false; } setHeroCommandTimestamp(System.currentTimeMillis()); diff --git a/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java b/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java index 6c6cf0c..a7143b7 100644 --- a/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java +++ b/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java @@ -35,8 +35,9 @@ public void setDrops(Collection drops) { changed = true; } - public void callEvent() { + public boolean callEvent() { Bukkit.getServer().getPluginManager().callEvent(this); + return false; } @Override diff --git a/src/main/java/me/xemor/superheroes/skills/implementations/EraserSkill.java b/src/main/java/me/xemor/superheroes/skills/implementations/EraserSkill.java index c95072c..93719b4 100644 --- a/src/main/java/me/xemor/superheroes/skills/implementations/EraserSkill.java +++ b/src/main/java/me/xemor/superheroes/skills/implementations/EraserSkill.java @@ -69,20 +69,17 @@ public void temporarilyRemoveHero(@NotNull Player player, @Nullable Player remov heroHandler.setHeroInMemory(player, erased); Component removedMessage = MiniMessage.miniMessage().deserialize(eraserData.getRemovedMessage(), Placeholder.unparsed("player", player.getName())); if (remover != null) { - Audience removerAudience = Superheroes.getBukkitAudiences().player(remover); - removerAudience.sendMessage(removedMessage); + remover.sendMessage(removedMessage); } - Audience playerAudience = Superheroes.getBukkitAudiences().player(player); - playerAudience.sendMessage(removedMessage); + player.sendMessage(removedMessage); Superheroes.getScheduling().entitySpecificScheduler(player).runDelayed(() -> { if (heroHandler.getSuperhero(player) == erased) { heroHandler.setHeroInMemory(player, oldPower); Component returnedMessage = MiniMessage.miniMessage().deserialize(eraserData.getReturnedMessage(), Placeholder.unparsed("player", player.getName())); if (remover != null) { - Audience removerAudience = Superheroes.getBukkitAudiences().player(remover); - removerAudience.sendMessage(returnedMessage); + remover.sendMessage(returnedMessage); } - playerAudience.sendMessage(returnedMessage); + player.sendMessage(returnedMessage); } }, () -> {}, eraserData.getDuration()); } diff --git a/src/main/java/me/xemor/superheroes/skills/implementations/PotionGifterSkill.java b/src/main/java/me/xemor/superheroes/skills/implementations/PotionGifterSkill.java index 4d52967..bf4bbab 100644 --- a/src/main/java/me/xemor/superheroes/skills/implementations/PotionGifterSkill.java +++ b/src/main/java/me/xemor/superheroes/skills/implementations/PotionGifterSkill.java @@ -44,12 +44,12 @@ public void onPlayerInteract(PlayerInteractEntityEvent e) { gifterData.getPotionEffect().ifPresent(lEntity::addPotionEffect); skillCooldownHandler.startCooldown(gifterData, gifterData.getCooldown(), player.getUniqueId()); Component giverMessage = MiniMessage.miniMessage().deserialize(gifterData.getGiverMessage(), Placeholder.unparsed("player",player.getName())); - Superheroes.getBukkitAudiences().player(player).sendMessage(giverMessage); + player.sendMessage(giverMessage); if (lEntity instanceof Player receiver) { Component receiverMessage = MiniMessage.miniMessage().deserialize(gifterData.getReceiverMessage(), Placeholder.unparsed("gifter", player.getName()), Placeholder.unparsed("player", receiver.getName())); - Superheroes.getBukkitAudiences().player(receiver).sendMessage(receiverMessage); + receiver.sendMessage(receiverMessage); } }, player, lEntity); } diff --git a/src/main/java/me/xemor/superheroes/skills/implementations/SpellSkill.java b/src/main/java/me/xemor/superheroes/skills/implementations/SpellSkill.java index f82afc3..e7e055b 100644 --- a/src/main/java/me/xemor/superheroes/skills/implementations/SpellSkill.java +++ b/src/main/java/me/xemor/superheroes/skills/implementations/SpellSkill.java @@ -115,8 +115,7 @@ private void handleSpells(Player player, SpellData spellData, PlayerInteractEven } else { Component moreFuelNeeded = MiniMessage.miniMessage().deserialize(spellData.getMoreFuelMessage(), Placeholder.unparsed("fuel", fuel.name()), Placeholder.unparsed("fuelneeded", String.valueOf(cost))); - Audience playerAudience = Superheroes.getBukkitAudiences().player(player); - playerAudience.sendActionBar(moreFuelNeeded); + player.sendActionBar(moreFuelNeeded); } } diff --git a/src/main/java/me/xemor/superheroes/skills/implementations/StrongmanSkill.java b/src/main/java/me/xemor/superheroes/skills/implementations/StrongmanSkill.java index ff9904a..2c5152e 100644 --- a/src/main/java/me/xemor/superheroes/skills/implementations/StrongmanSkill.java +++ b/src/main/java/me/xemor/superheroes/skills/implementations/StrongmanSkill.java @@ -42,8 +42,7 @@ public void onInteract(PlayerInteractEntityEvent e) { } if (e.getRightClicked() instanceof Vehicle) { Component tooMuscular = MiniMessage.miniMessage().deserialize(strongmanData.getTooMuscularMessage(), Placeholder.unparsed("player", player.getName())); - Audience playerAudience = Superheroes.getBukkitAudiences().player(player); - playerAudience.sendActionBar(tooMuscular); + player.sendActionBar(tooMuscular); } }, player, e.getRightClicked()); } diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml new file mode 100644 index 0000000..71494ab --- /dev/null +++ b/src/main/resources/paper-plugin.yml @@ -0,0 +1,26 @@ +name: Superheroes +version: ${version} +main: me.xemor.superheroes.Superheroes +api-version: '1.21.10' +description: Adds superheroes to your server - these can be customized completely and are extremely modular. +loader: me.xemor.superheroes.DependencyLoader +dependencies: + server: + SkillsLibrary2: + load: BEFORE + required: false + WorldGuard: + load: BEFORE + required: false + GriefPrevention: + load: BEFORE + required: false + HuskClaims: + load: BEFORE + required: false + HuskTowns: + load: BEFORE + required: false + PvPToggle: + load: BEFORE + required: false \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml deleted file mode 100644 index ee17895..0000000 --- a/src/main/resources/plugin.yml +++ /dev/null @@ -1,47 +0,0 @@ -name: Superheroes -version: ${version} -main: me.xemor.superheroes.Superheroes -api-version: 1.16 -authors: [Xemor_] -softdepend: [SkillsLibrary2, WorldGuard, GriefPrevention, HuskClaims, HuskTowns, PvPToggle] -folia-supported: true -description: Adds superheroes to your world - these can be customized completely and are extremely modular. -libraries: - - "com.fasterxml.jackson.core:jackson-core:2.18.0" - - "com.fasterxml.jackson.core:jackson-databind:2.18.2" - - "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.0" -commands: - hero: - description: The root command of all of the commands within Superheroes - usage: /hero -permissions: - superheroes.hero: - description: Allows them to use /hero - default: op - superheroes.hero.reroll: - description: Allows them to use /reroll - default: op - superheroes.hero.select.others: - description: Allows them to use /hero on other people - default: op - superheroes.hero.select.bypasscooldown: - description: Allows them to use /hero regardless of whether it is on cooldown or not - default: op - superheroes.notify: - description: Get informed about new updates to the Superheroes plugin! - default: op - superheroes.hero.check: - description: Allows the user to check what their own hero is - default: true - superheroes.hero.check.others: - description: Allows the user to check what other people's hero is - default: op - superheroes.hero.reload: - description: Reloads the plugin - default: op - superheroes.hero.import: - description: Imports from the export file into your current database - default: op - superheroes.hero.export: - description: Exports the current database to a YAML file - default: op \ No newline at end of file From 942119253a062572ad1ab35092d3964e1061bb3b Mon Sep 17 00:00:00 2001 From: Xemor Date: Fri, 2 Jan 2026 23:57:39 +0000 Subject: [PATCH 2/4] Optimistically list folia-supported as true --- src/main/resources/paper-plugin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index 71494ab..2ba215d 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -4,6 +4,7 @@ main: me.xemor.superheroes.Superheroes api-version: '1.21.10' description: Adds superheroes to your server - these can be customized completely and are extremely modular. loader: me.xemor.superheroes.DependencyLoader +folia-supported: true dependencies: server: SkillsLibrary2: From c313892d1aca4834db1aba13082112e548b38af0 Mon Sep 17 00:00:00 2001 From: Xemor Date: Sat, 3 Jan 2026 14:47:46 +0000 Subject: [PATCH 3/4] Drop callEvent implementation --- .../me/xemor/superheroes/Superheroes.java | 32 +++++++++++-------- .../events/HeroBlockBreakEvent.java | 5 --- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/main/java/me/xemor/superheroes/Superheroes.java b/src/main/java/me/xemor/superheroes/Superheroes.java index 9c4d434..f75a209 100644 --- a/src/main/java/me/xemor/superheroes/Superheroes.java +++ b/src/main/java/me/xemor/superheroes/Superheroes.java @@ -26,6 +26,7 @@ import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import me.xemor.foliahacks.FoliaHacks; +import org.jspecify.annotations.NonNull; import org.lushplugins.unifiedprotection.bukkit.BukkitUnifiedProtection; import space.arim.morepaperlib.scheduling.GracefulScheduling; @@ -84,6 +85,23 @@ public void onEnable() { HeroCommand heroCommand = new HeroCommand(this.heroHandler); // Register hero command + BukkitCommand heroCommandBukkit = setupHeroCommand(heroCommand); + + CommandMap commandMap = foliaHacks.getMorePaperLib().commandRegistration().getServerCommandMap(); + commandMap.register("superheroes", heroCommandBukkit); + + handleMetrics(); + plusUltraAdvertisement(); + checkForNewUpdate(); + if (this.hasSkillsLibrary) { + this.runSkillsLibraryChanges(); + } + handleAliases(heroCommand, heroCommandBukkit); + registerUserInterfaces(); + handleWorldGuardCompatibility(); + } + + private @NonNull BukkitCommand setupHeroCommand(HeroCommand heroCommand) { BukkitCommand heroCommandBukkit = new BukkitCommand("hero") { @Override public boolean execute(@NotNull CommandSender sender, @NotNull String commandLabel, @NotNull String[] args) { @@ -98,19 +116,7 @@ public List tabComplete(@NotNull CommandSender sender, @NotNull String a }; heroCommandBukkit.setDescription("The root command of all of the commands within Superheroes"); heroCommandBukkit.setUsage("/hero "); - - CommandMap commandMap = foliaHacks.getMorePaperLib().commandRegistration().getServerCommandMap(); - commandMap.register("superheroes", heroCommandBukkit); - - handleMetrics(); - plusUltraAdvertisement(); - checkForNewUpdate(); - if (this.hasSkillsLibrary) { - this.runSkillsLibraryChanges(); - } - handleAliases(heroCommand, heroCommandBukkit); - registerUserInterfaces(); - handleWorldGuardCompatibility(); + return heroCommandBukkit; } @EventHandler diff --git a/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java b/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java index a7143b7..ed69dec 100644 --- a/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java +++ b/src/main/java/me/xemor/superheroes/events/HeroBlockBreakEvent.java @@ -35,11 +35,6 @@ public void setDrops(Collection drops) { changed = true; } - public boolean callEvent() { - Bukkit.getServer().getPluginManager().callEvent(this); - return false; - } - @Override public @NotNull HandlerList getHandlers() { return HANDLERS; From c2d7a90bb981d65d31c8bbd471467bef1bca865f Mon Sep 17 00:00:00 2001 From: Xemor Date: Sat, 21 Feb 2026 17:14:29 +0000 Subject: [PATCH 4/4] Paper Rewrite --- build.gradle.kts | 2 +- .../xemor/superheroes/DependencyLoader.java | 65 +++++++++++++++---- .../xemor/superheroes/data/ConfigHandler.java | 2 +- .../me/xemor/superheroes/skills/Skill.java | 1 - .../skills/implementations/DecoySkill.java | 4 +- src/main/resources/paper-plugin.yml | 8 ++- src/main/resources/powers/speleologist.yml | 2 +- 7 files changed, 66 insertions(+), 18 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7c5188c..d544e65 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ group = "me.xemor" -version = "8.3.13" +version = "9.0.0" description = "superheroes" java.sourceCompatibility = JavaVersion.VERSION_21 diff --git a/src/main/java/me/xemor/superheroes/DependencyLoader.java b/src/main/java/me/xemor/superheroes/DependencyLoader.java index 6e4361c..eb34d33 100644 --- a/src/main/java/me/xemor/superheroes/DependencyLoader.java +++ b/src/main/java/me/xemor/superheroes/DependencyLoader.java @@ -7,26 +7,67 @@ import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.repository.RemoteRepository; +import java.io.File; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.List; +import java.util.stream.Stream; public class DependencyLoader implements PluginLoader { - @Override public void classloader(PluginClasspathBuilder classpathBuilder) { - MavenLibraryResolver resolver = new MavenLibraryResolver(); - List mavenCentralDependencies = - List.of( - "com.fasterxml.jackson.core:jackson-core:2.18.0", - "com.fasterxml.jackson.core:jackson-databind:2.18.2", - "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.0" - ); - for (String dependency : mavenCentralDependencies) { - resolver.addDependency(new Dependency(new DefaultArtifact(dependency), null)); + // Check if SkillsLibrary2 plugin exists (will provide its own Jackson) + boolean skillsLibraryExists = checkForSkillsLibrary(); + + // Check if Jackson is already loaded + boolean jacksonAlreadyLoaded = false; + try { + Class.forName("com.fasterxml.jackson.dataformat.yaml.YAMLFactory"); + jacksonAlreadyLoaded = true; + } catch (ClassNotFoundException ignored) { + // Dependencies not loaded } - resolver.addRepository(new RemoteRepository.Builder("central", "default", MavenLibraryResolver.MAVEN_CENTRAL_DEFAULT_MIRROR).build()); + // Only load Jackson if SkillsLibrary doesn't exist and Jackson isn't already loaded + if (!skillsLibraryExists && !jacksonAlreadyLoaded) { + MavenLibraryResolver resolver = new MavenLibraryResolver(); + List mavenCentralDependencies = + List.of( + "com.fasterxml.jackson.core:jackson-databind:2.18.2", + "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.7.0" + ); + for (String dependency : mavenCentralDependencies) { + resolver.addDependency(new Dependency(new DefaultArtifact(dependency), null)); + } - classpathBuilder.addLibrary(resolver); + resolver.addRepository(new RemoteRepository.Builder("central", "default", MavenLibraryResolver.MAVEN_CENTRAL_DEFAULT_MIRROR).build()); + + classpathBuilder.addLibrary(resolver); + } } + private boolean checkForSkillsLibrary() { + try { + // Get the directory where this plugin jar is located + File jarFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()); + File pluginsDir = jarFile.getParentFile(); + + if (pluginsDir == null || !pluginsDir.exists()) { + return false; + } + + // Search for any file containing "skillslibrary" (case-insensitive) + try (Stream paths = Files.walk(pluginsDir.toPath())) { + return paths + .filter(Files::isRegularFile) + .map(Path::getFileName) + .map(Path::toString) + .anyMatch(name -> name.toLowerCase().contains("skillslibrary")); + } + } catch (Exception e) { + // If we can't determine, assume it doesn't exist + return false; + } + } } diff --git a/src/main/java/me/xemor/superheroes/data/ConfigHandler.java b/src/main/java/me/xemor/superheroes/data/ConfigHandler.java index fac8ab4..59d9e34 100644 --- a/src/main/java/me/xemor/superheroes/data/ConfigHandler.java +++ b/src/main/java/me/xemor/superheroes/data/ConfigHandler.java @@ -133,7 +133,7 @@ private File getPowersFolder() { } public ObjectMapper setupObjectMapper() { - ObjectMapper objectMapper = ConfigurationData.setupObjectMapperForConfigurationData(new ObjectMapper(new YAMLFactory()));; + ObjectMapper objectMapper = ConfigurationData.setupObjectMapperForConfigurationData(new ObjectMapper(new YAMLFactory())); if (superheroes.hasSkillsLibrary()) objectMapper = SkillsLibrary.getInstance().setupObjectMapper(objectMapper); objectMapper.registerSubtypes(Skill.getNamedTypes()); objectMapper.registerSubtypes(Spells.getNamedTypes()); diff --git a/src/main/java/me/xemor/superheroes/skills/Skill.java b/src/main/java/me/xemor/superheroes/skills/Skill.java index 6eb992d..981ff6f 100644 --- a/src/main/java/me/xemor/superheroes/skills/Skill.java +++ b/src/main/java/me/xemor/superheroes/skills/Skill.java @@ -11,7 +11,6 @@ public class Skill { - private static int counter = 0; private static final BiMap> skillToData = HashBiMap.create(); static { diff --git a/src/main/java/me/xemor/superheroes/skills/implementations/DecoySkill.java b/src/main/java/me/xemor/superheroes/skills/implementations/DecoySkill.java index 5799306..f7b086f 100644 --- a/src/main/java/me/xemor/superheroes/skills/implementations/DecoySkill.java +++ b/src/main/java/me/xemor/superheroes/skills/implementations/DecoySkill.java @@ -1,5 +1,6 @@ package me.xemor.superheroes.skills.implementations; +import it.unimi.dsi.fastutil.Hash; import me.xemor.superheroes.Superhero; import me.xemor.superheroes.Superheroes; import me.xemor.superheroes.data.HeroHandler; @@ -26,11 +27,12 @@ import java.util.Collection; import java.util.HashMap; +import java.util.Map; import java.util.UUID; public class DecoySkill extends SkillImplementation { - final HashMap> playerToDecoy = new HashMap<>(); + final Map> playerToDecoy = new HashMap<>(); final NamespacedKey namespacedKey; public DecoySkill(HeroHandler heroHandler) { diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index 2ba215d..577cee4 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -10,18 +10,24 @@ dependencies: SkillsLibrary2: load: BEFORE required: false + join-classpath: true WorldGuard: load: BEFORE required: false + join-classpath: true GriefPrevention: load: BEFORE required: false + join-classpath: true HuskClaims: load: BEFORE required: false + join-classpath: true HuskTowns: load: BEFORE required: false + join-classpath: true PvPToggle: load: BEFORE - required: false \ No newline at end of file + required: false + join-classpath: true \ No newline at end of file diff --git a/src/main/resources/powers/speleologist.yml b/src/main/resources/powers/speleologist.yml index d6c3fab..5e0730e 100644 --- a/src/main/resources/powers/speleologist.yml +++ b/src/main/resources/powers/speleologist.yml @@ -7,7 +7,7 @@ skills: ignoreSilkTouch: false ignoredBlocks: - REDSTONE - - DECORATING_POT + - DECORATED_POT convertMap: RAW_IRON: type: IRON_INGOT