Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
group = "me.xemor"
version = "8.3.13"
version = "9.0.0"
description = "superheroes"
java.sourceCompatibility = JavaVersion.VERSION_21

Expand All @@ -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/") }
Expand All @@ -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")
Expand All @@ -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")
Expand All @@ -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")
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/me/xemor/superheroes/CooldownHandler.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
}
Expand All @@ -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;
Expand Down
73 changes: 73 additions & 0 deletions src/main/java/me/xemor/superheroes/DependencyLoader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
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.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) {
// 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
}

// Only load Jackson if SkillsLibrary doesn't exist and Jackson isn't already loaded
if (!skillsLibraryExists && !jacksonAlreadyLoaded) {
MavenLibraryResolver resolver = new MavenLibraryResolver();
List<String> 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));
}

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<Path> 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;
}
}
}
43 changes: 28 additions & 15 deletions src/main/java/me/xemor/superheroes/Superheroes.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,7 +26,7 @@
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import me.xemor.foliahacks.FoliaHacks;
import org.lushplugins.unifiedprotection.UnifiedProtection;
import org.jspecify.annotations.NonNull;
import org.lushplugins.unifiedprotection.bukkit.BukkitUnifiedProtection;
import space.arim.morepaperlib.scheduling.GracefulScheduling;

Expand All @@ -42,7 +40,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;
Expand All @@ -53,10 +50,6 @@ public static Superheroes getInstance() {
return superheroes;
}

public static BukkitAudiences getBukkitAudiences() {
return bukkitAudiences;
}

public static GracefulScheduling getScheduling() {
return foliaHacks.getScheduling();
}
Expand Down Expand Up @@ -90,21 +83,42 @@ 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 = setupHeroCommand(heroCommand);

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();
}

private @NonNull BukkitCommand setupHeroCommand(HeroCommand heroCommand) {
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<String> 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 <hero> <name>");
return heroCommandBukkit;
}

@EventHandler
public void onServerLoad(ServerLoadEvent e) {
this.configHandler.loadSuperheroes(this.heroHandler);
Expand Down Expand Up @@ -193,7 +207,6 @@ public void checkForNewUpdate() {
}

public void onDisable() {
bukkitAudiences.close();
superheroes.getHeroHandler().getHeroIOHandler().shutdown();
}

Expand Down Expand Up @@ -259,7 +272,7 @@ public RerollHandler getRerollHandler() {
return this.rerollHandler;
}

private void handleAliases(final HeroCommand heroCommand, PluginCommand command) {
private void handleAliases(final HeroCommand heroCommand, BukkitCommand command) {
List<String> commandAliases = ConfigHandler.getConfigYAML().heroCommand().aliases();
if (!commandAliases.isEmpty()) {
BukkitCommand aliasCommand = new BukkitCommand(commandAliases.get(0)) {
Expand Down
11 changes: 5 additions & 6 deletions src/main/java/me/xemor/superheroes/commands/CheckCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -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()))
Expand All @@ -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())));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()));
}
}

Expand Down
5 changes: 2 additions & 3 deletions src/main/java/me/xemor/superheroes/commands/GUICommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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);
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/me/xemor/superheroes/commands/HeroCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,17 +40,16 @@ 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) {
SubCommands commandType;
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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()));
}
}

Expand Down
Loading
Loading