diff --git a/pom.xml b/pom.xml index 56fd26e..8b8e179 100644 --- a/pom.xml +++ b/pom.xml @@ -66,8 +66,9 @@ *:* - module-info.class META-INF/MANIFEST.MF + META-INF/LICENSE + META-INF/LICENSE.txt diff --git a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java index fbc8d90..2495b61 100644 --- a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java +++ b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java @@ -5,11 +5,10 @@ import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.config.LanguageCache; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; +import me.xginko.villageroptimizer.utils.GenericUtil; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.Style; -import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.logger.slf4j.ComponentLogger; import org.bstats.bukkit.Metrics; @@ -29,8 +28,6 @@ import java.util.stream.Collectors; import java.util.zip.ZipEntry; public final class VillagerOptimizer extends JavaPlugin { - public static final TextColor COLOR = TextColor.color(102,255,230); - public static final Style STYLE = Style.style(COLOR, TextDecoration.BOLD); private static VillagerOptimizer instance; private static VillagerCache villagerCache; @@ -39,49 +36,49 @@ public final class VillagerOptimizer extends JavaPlugin { private static Config config; private static BukkitAudiences audiences; private static ComponentLogger logger; - private Metrics metrics; + private static Metrics bStats; @Override public void onEnable() { instance = this; foliaLib = new FoliaLib(this); audiences = BukkitAudiences.create(this); - logger = ComponentLogger.logger(this.getName()); - metrics = new Metrics(this, 19954); + logger = ComponentLogger.logger(getLogger().getName()); + bStats = new Metrics(this, 19954); - logger.info(Component.text("╭────────────────────────────────────────────────────────────╮").style(STYLE)); - logger.info(Component.text("│ │").style(STYLE)); - logger.info(Component.text("│ │").style(STYLE)); - logger.info(Component.text("│ _ __ _ __ __ │").style(STYLE)); - logger.info(Component.text("│ | | / /(_)/ // /___ _ ___ _ ___ ____ │").style(STYLE)); - logger.info(Component.text("│ | |/ // // // // _ `// _ `// -_)/ __/ │").style(STYLE)); - logger.info(Component.text("│ |___//_//_//_/ \\_,_/ \\_, / \\__//_/ │").style(STYLE)); - logger.info(Component.text("│ ____ __ _ /___/_ │").style(STYLE)); - logger.info(Component.text("│ / __ \\ ___ / /_ (_)__ _ (_)___ ___ ____ │").style(STYLE)); - logger.info(Component.text("│ / /_/ // _ \\/ __// // ' \\ / //_ // -_)/ __/ │").style(STYLE)); - logger.info(Component.text("│ \\____// .__/\\__//_//_/_/_//_/ /__/\\__//_/ │").style(STYLE)); - logger.info(Component.text("│ /_/ by xGinko │").style(STYLE)); - logger.info(Component.text("│ │").style(STYLE)); - logger.info(Component.text("│ │").style(STYLE)); + logger.info(Component.text("╭────────────────────────────────────────────────────────────╮").style(GenericUtil.STYLE)); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ _ __ _ __ __ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ | | / /(_)/ // /___ _ ___ _ ___ ____ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ | |/ // // // // _ `// _ `// -_)/ __/ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ |___//_//_//_/ \\_,_/ \\_, / \\__//_/ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ ____ __ _ /___/_ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ / __ \\ ___ / /_ (_)__ _ (_)___ ___ ____ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ / /_/ // _ \\/ __// // ' \\ / //_ // -_)/ __/ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ \\____// .__/\\__//_//_/_/_//_/ /__/\\__//_/ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ /_/ by xGinko │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); logger.info(Component.text("│ ") - .style(STYLE).append(Component.text("https://github.com/xGinko/VillagerOptimizer") - .color(NamedTextColor.GRAY)).append(Component.text(" │").style(STYLE))); - logger.info(Component.text("│ │").style(STYLE)); - logger.info(Component.text("│ │").style(STYLE)); + .style(GenericUtil.STYLE).append(Component.text("https://github.com/xGinko/VillagerOptimizer") + .color(NamedTextColor.GRAY)).append(Component.text(" │").style(GenericUtil.STYLE))); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); logger.info(Component.text("│ ") - .style(STYLE).append(Component.text(" ➤ Loading Translations...").style(STYLE)) - .append(Component.text(" │").style(STYLE))); + .style(GenericUtil.STYLE).append(Component.text(" ➤ Loading Translations...").style(GenericUtil.STYLE)) + .append(Component.text(" │").style(GenericUtil.STYLE))); reloadLang(true); logger.info(Component.text("│ ") - .style(STYLE).append(Component.text(" ➤ Loading Config...").style(STYLE)) - .append(Component.text(" │").style(STYLE))); + .style(GenericUtil.STYLE).append(Component.text(" ➤ Loading Config...").style(GenericUtil.STYLE)) + .append(Component.text(" │").style(GenericUtil.STYLE))); reloadConfiguration(); logger.info(Component.text("│ ") - .style(STYLE).append(Component.text(" ✓ Done.").color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) - .append(Component.text(" │").style(STYLE))); - logger.info(Component.text("│ │").style(STYLE)); - logger.info(Component.text("│ │").style(STYLE)); - logger.info(Component.text("╰────────────────────────────────────────────────────────────╯").style(STYLE)); + .style(GenericUtil.STYLE).append(Component.text(" ✓ Done.").color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) + .append(Component.text(" │").style(GenericUtil.STYLE))); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); + logger.info(Component.text("│ │").style(GenericUtil.STYLE)); + logger.info(Component.text("╰────────────────────────────────────────────────────────────╯").style(GenericUtil.STYLE)); } @Override @@ -100,9 +97,9 @@ public final class VillagerOptimizer extends JavaPlugin { audiences.close(); audiences = null; } - if (metrics != null) { - metrics.shutdown(); - metrics = null; + if (bStats != null) { + bStats.shutdown(); + bStats = null; } config = null; languageCacheMap = null; @@ -164,9 +161,9 @@ public final class VillagerOptimizer extends JavaPlugin { for (String fileName : getDefaultLanguageFiles()) { final String localeString = fileName.substring(fileName.lastIndexOf('/') + 1, fileName.lastIndexOf('.')); if (startup) logger.info( - Component.text("│ ").style(STYLE) + Component.text("│ ").style(GenericUtil.STYLE) .append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) - .append(Component.text(" │").style(STYLE))); + .append(Component.text(" │").style(GenericUtil.STYLE))); else logger.info(String.format("Found language file for %s", localeString)); languageCacheMap.put(localeString, new LanguageCache(localeString)); } @@ -177,9 +174,9 @@ public final class VillagerOptimizer extends JavaPlugin { String localeString = langMatcher.group(1).toLowerCase(); if (!languageCacheMap.containsKey(localeString)) { // make sure it wasn't a default file that we already loaded if (startup) logger.info( - Component.text("│ ").style(STYLE) + Component.text("│ ").style(GenericUtil.STYLE) .append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) - .append(Component.text(" │").style(STYLE))); + .append(Component.text(" │").style(GenericUtil.STYLE))); else logger.info(String.format("Found language file for %s", localeString)); languageCacheMap.put(localeString, new LanguageCache(localeString)); } @@ -187,9 +184,9 @@ public final class VillagerOptimizer extends JavaPlugin { } } catch (Exception e) { if (startup) logger.error( - Component.text("│ ").style(STYLE) + Component.text("│ ").style(GenericUtil.STYLE) .append(Component.text("LANG ERROR").color(NamedTextColor.RED).decorate(TextDecoration.BOLD)) - .append(Component.text(" │").style(STYLE)), e); + .append(Component.text(" │").style(GenericUtil.STYLE)), e); else logger.error("Error loading language files!", e); } } diff --git a/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java b/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java index 3075ab1..49f0d4c 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java @@ -6,8 +6,7 @@ import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.enums.OptimizationType; -import me.xginko.villageroptimizer.enums.permissions.Bypass; -import me.xginko.villageroptimizer.enums.permissions.Commands; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.events.VillagerOptimizeEvent; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; @@ -50,7 +49,7 @@ public class OptVillagersRadius implements VillagerOptimizerCommand { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (!sender.hasPermission(Commands.OPTIMIZE_RADIUS.get())) { + if (!sender.hasPermission(Permissions.Commands.OPTIMIZE_RADIUS.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return true; } @@ -93,7 +92,7 @@ public class OptVillagersRadius implements VillagerOptimizerCommand { VillagerCache villagerCache = VillagerOptimizer.getCache(); int successCount = 0; int failCount = 0; - final boolean player_has_cooldown_bypass = player.hasPermission(Bypass.COMMAND_COOLDOWN.get()); + final boolean player_has_cooldown_bypass = player.hasPermission(Permissions.Bypass.COMMAND_COOLDOWN.get()); for (Entity entity : player.getNearbyEntities(safeRadius, safeRadius, safeRadius)) { if (!entity.getType().equals(EntityType.VILLAGER)) continue; diff --git a/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java b/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java index 7257548..0e805c6 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java @@ -5,7 +5,7 @@ import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand; import me.xginko.villageroptimizer.enums.OptimizationType; -import me.xginko.villageroptimizer.enums.permissions.Commands; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; @@ -44,7 +44,7 @@ public class UnOptVillagersRadius implements VillagerOptimizerCommand { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { - if (!sender.hasPermission(Commands.UNOPTIMIZE_RADIUS.get())) { + if (!sender.hasPermission(Permissions.Commands.UNOPTIMIZE_RADIUS.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return true; } diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java index 175a193..4c903fd 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/VillagerOptimizerCmd.java @@ -1,12 +1,12 @@ package me.xginko.villageroptimizer.commands.villageroptimizer; -import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.commands.SubCommand; import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand; import me.xginko.villageroptimizer.commands.villageroptimizer.subcommands.DisableSubCmd; import me.xginko.villageroptimizer.commands.villageroptimizer.subcommands.ReloadSubCmd; import me.xginko.villageroptimizer.commands.villageroptimizer.subcommands.VersionSubCmd; -import me.xginko.villageroptimizer.enums.permissions.Commands; +import me.xginko.villageroptimizer.enums.Permissions; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; @@ -57,19 +57,19 @@ public class VillagerOptimizerCmd implements VillagerOptimizerCommand { } private void sendCommandOverview(CommandSender sender) { - if (!sender.hasPermission(Commands.RELOAD.get()) && !sender.hasPermission(Commands.VERSION.get())) return; + if (!sender.hasPermission(Permissions.Commands.RELOAD.get()) && !sender.hasPermission(Permissions.Commands.VERSION.get())) return; KyoriUtil.sendMessage(sender, Component.text("-----------------------------------------------------").color(NamedTextColor.GRAY)); - KyoriUtil.sendMessage(sender, Component.text("VillagerOptimizer Commands").color(VillagerOptimizer.COLOR)); + KyoriUtil.sendMessage(sender, Component.text("VillagerOptimizer Commands").color(GenericUtil.COLOR)); KyoriUtil.sendMessage(sender, Component.text("-----------------------------------------------------").color(NamedTextColor.GRAY)); subCommands.forEach(subCommand -> KyoriUtil.sendMessage(sender, subCommand.getSyntax().append(Component.text(" - ").color(NamedTextColor.DARK_GRAY)).append(subCommand.getDescription()))); KyoriUtil.sendMessage(sender, - Component.text("/optimizevillagers ").color(VillagerOptimizer.COLOR) + Component.text("/optimizevillagers ").color(GenericUtil.COLOR) .append(Component.text(" - ").color(NamedTextColor.DARK_GRAY)) .append(Component.text("Optimize villagers in a radius").color(NamedTextColor.GRAY)) ); KyoriUtil.sendMessage(sender, - Component.text("/unoptmizevillagers ").color(VillagerOptimizer.COLOR) + Component.text("/unoptmizevillagers ").color(GenericUtil.COLOR) .append(Component.text(" - ").color(NamedTextColor.DARK_GRAY)) .append(Component.text("Unoptimize villagers in a radius").color(NamedTextColor.GRAY)) ); diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java index 728b667..d86535a 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/DisableSubCmd.java @@ -2,8 +2,9 @@ package me.xginko.villageroptimizer.commands.villageroptimizer.subcommands; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.commands.SubCommand; -import me.xginko.villageroptimizer.enums.permissions.Commands; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; @@ -24,12 +25,12 @@ public class DisableSubCmd extends SubCommand { @Override public TextComponent getSyntax() { - return Component.text("/villageroptimizer disable").color(VillagerOptimizer.COLOR); + return Component.text("/villageroptimizer disable").color(GenericUtil.COLOR); } @Override public void perform(CommandSender sender, String[] args) { - if (!sender.hasPermission(Commands.DISABLE.get())) { + if (!sender.hasPermission(Permissions.Commands.DISABLE.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return; } diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java index f0619f7..d3b269f 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/ReloadSubCmd.java @@ -2,7 +2,8 @@ package me.xginko.villageroptimizer.commands.villageroptimizer.subcommands; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.commands.SubCommand; -import me.xginko.villageroptimizer.enums.permissions.Commands; +import me.xginko.villageroptimizer.enums.Permissions; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; @@ -23,12 +24,12 @@ public class ReloadSubCmd extends SubCommand { @Override public TextComponent getSyntax() { - return Component.text("/villageroptimizer reload").color(VillagerOptimizer.COLOR); + return Component.text("/villageroptimizer reload").color(GenericUtil.COLOR); } @Override public void perform(CommandSender sender, String[] args) { - if (!sender.hasPermission(Commands.RELOAD.get())) { + if (!sender.hasPermission(Permissions.Commands.RELOAD.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return; } diff --git a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java index de42b8e..a4b8146 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/villageroptimizer/subcommands/VersionSubCmd.java @@ -3,7 +3,8 @@ package me.xginko.villageroptimizer.commands.villageroptimizer.subcommands; import io.papermc.paper.plugin.configuration.PluginMeta; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.commands.SubCommand; -import me.xginko.villageroptimizer.enums.permissions.Commands; +import me.xginko.villageroptimizer.enums.Permissions; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextComponent; @@ -26,13 +27,13 @@ public class VersionSubCmd extends SubCommand { @Override public TextComponent getSyntax() { - return Component.text("/villageroptimizer version").color(VillagerOptimizer.COLOR); + return Component.text("/villageroptimizer version").color(GenericUtil.COLOR); } @Override @SuppressWarnings({"deprecation", "UnstableApiUsage"}) public void perform(CommandSender sender, String[] args) { - if (!sender.hasPermission(Commands.VERSION.get())) { + if (!sender.hasPermission(Permissions.Commands.VERSION.get())) { KyoriUtil.sendMessage(sender, VillagerOptimizer.getLang(sender).no_permission); return; } @@ -56,7 +57,7 @@ public class VersionSubCmd extends SubCommand { KyoriUtil.sendMessage(sender, Component.newline() .append( Component.text(name + " " + version) - .style(VillagerOptimizer.STYLE) + .style(GenericUtil.STYLE) .clickEvent(ClickEvent.openUrl(website)) ) .append(Component.text(" by ").color(NamedTextColor.GRAY)) diff --git a/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java b/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java index d7eaf93..701355f 100644 --- a/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java +++ b/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java @@ -2,6 +2,7 @@ package me.xginko.villageroptimizer.config; import io.github.thatsmusic99.configurationmaster.api.ConfigFile; import me.xginko.villageroptimizer.VillagerOptimizer; +import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import org.jetbrains.annotations.NotNull; @@ -91,11 +92,11 @@ public class LanguageCache { public @NotNull Component getTranslation(@NotNull String path, @NotNull String defaultTranslation) { this.lang.addDefault(path, defaultTranslation); - return MiniMessage.miniMessage().deserialize(this.lang.getString(path, defaultTranslation)); + return MiniMessage.miniMessage().deserialize(KyoriUtil.translateChatColor(this.lang.getString(path, defaultTranslation))); } public @NotNull List getListTranslation(@NotNull String path, @NotNull String... defaultTranslation) { this.lang.addDefault(path, Arrays.asList(defaultTranslation)); - return this.lang.getStringList(path).stream().map(MiniMessage.miniMessage()::deserialize).collect(Collectors.toList()); + return this.lang.getStringList(path).stream().map(KyoriUtil::translateChatColor).map(MiniMessage.miniMessage()::deserialize).collect(Collectors.toList()); } } \ No newline at end of file diff --git a/src/main/java/me/xginko/villageroptimizer/enums/Keyring.java b/src/main/java/me/xginko/villageroptimizer/enums/Keyring.java index 7f5fd5a..cfd1e7d 100644 --- a/src/main/java/me/xginko/villageroptimizer/enums/Keyring.java +++ b/src/main/java/me/xginko/villageroptimizer/enums/Keyring.java @@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Locale; -public class Keyring { +public final class Keyring { public enum Spaces implements Namespaced { @@ -52,8 +52,7 @@ public class Keyring { OPTIMIZATION_TYPE("optimization-type"), LAST_OPTIMIZE("last-optimize"), LAST_LEVELUP("last-levelup"), - LAST_RESTOCK("last-restock"), - LAST_OPTIMIZE_NAME("last-optimize-name"); + LAST_RESTOCK("last-restock"); private final @NotNull NamespacedKey key; diff --git a/src/main/java/me/xginko/villageroptimizer/enums/Permissions.java b/src/main/java/me/xginko/villageroptimizer/enums/Permissions.java new file mode 100644 index 0000000..f48df83 --- /dev/null +++ b/src/main/java/me/xginko/villageroptimizer/enums/Permissions.java @@ -0,0 +1,74 @@ +package me.xginko.villageroptimizer.enums; + +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; + +public final class Permissions { + + public enum Bypass { + TRADE_PREVENTION(new Permission("villageroptimizer.bypass.tradeprevention", + "Permission to bypass unoptimized trade prevention", PermissionDefault.FALSE)), + RESTOCK_COOLDOWN(new Permission("villageroptimizer.bypass.restockcooldown", + "Permission to bypass restock cooldown on optimized villagers", PermissionDefault.FALSE)), + NAMETAG_COOLDOWN(new Permission("villageroptimizer.bypass.nametagcooldown", + "Permission to bypass Nametag optimization cooldown", PermissionDefault.FALSE)), + BLOCK_COOLDOWN(new Permission("villageroptimizer.bypass.blockcooldown", + "Permission to bypass Block optimization cooldown", PermissionDefault.FALSE)), + WORKSTATION_COOLDOWN(new Permission("villageroptimizer.bypass.workstationcooldown", + "Permission to bypass Workstation optimization cooldown", PermissionDefault.FALSE)), + COMMAND_COOLDOWN(new Permission("villageroptimizer.bypass.commandcooldown", + "Permission to bypass command optimization cooldown", PermissionDefault.FALSE)); + + private final Permission permission; + + Bypass(Permission permission) { + this.permission = permission; + } + + public Permission get() { + return permission; + } + } + + public enum Commands { + VERSION(new Permission("villageroptimizer.cmd.version", + "Permission get the plugin version", PermissionDefault.OP)), + RELOAD(new Permission("villageroptimizer.cmd.reload", + "Permission to reload the plugin config", PermissionDefault.OP)), + DISABLE(new Permission("villageroptimizer.cmd.disable", + "Permission to disable the plugin", PermissionDefault.OP)), + OPTIMIZE_RADIUS(new Permission("villageroptimizer.cmd.optimize", + "Permission to optimize villagers in a radius", PermissionDefault.TRUE)), + UNOPTIMIZE_RADIUS(new Permission("villageroptimizer.cmd.unoptimize", + "Permission to unoptimize villagers in a radius", PermissionDefault.TRUE)); + + private final Permission permission; + + Commands(Permission permission) { + this.permission = permission; + } + + public Permission get() { + return permission; + } + } + + public enum Optimize { + NAMETAG(new Permission("villageroptimizer.optimize.nametag", + "Permission to optimize / unoptimize using Nametags", PermissionDefault.TRUE)), + BLOCK(new Permission("villageroptimizer.optimize.block", + "Permission to optimize / unoptimize using Blocks", PermissionDefault.TRUE)), + WORKSTATION(new Permission("villageroptimizer.optimize.workstation", + "Permission to optimize / unoptimize using Workstations", PermissionDefault.TRUE)); + + private final Permission permission; + + Optimize(Permission permission) { + this.permission = permission; + } + + public Permission get() { + return permission; + } + } +} diff --git a/src/main/java/me/xginko/villageroptimizer/enums/permissions/Bypass.java b/src/main/java/me/xginko/villageroptimizer/enums/permissions/Bypass.java deleted file mode 100644 index 1913891..0000000 --- a/src/main/java/me/xginko/villageroptimizer/enums/permissions/Bypass.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.xginko.villageroptimizer.enums.permissions; - -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -public enum Bypass { - TRADE_PREVENTION(new Permission("villageroptimizer.bypass.tradeprevention", - "Permission to bypass unoptimized trade prevention", PermissionDefault.FALSE)), - RESTOCK_COOLDOWN(new Permission("villageroptimizer.bypass.restockcooldown", - "Permission to bypass restock cooldown on optimized villagers", PermissionDefault.FALSE)), - NAMETAG_COOLDOWN(new Permission("villageroptimizer.bypass.nametagcooldown", - "Permission to bypass Nametag optimization cooldown", PermissionDefault.FALSE)), - BLOCK_COOLDOWN(new Permission("villageroptimizer.bypass.blockcooldown", - "Permission to bypass Block optimization cooldown", PermissionDefault.FALSE)), - WORKSTATION_COOLDOWN(new Permission("villageroptimizer.bypass.workstationcooldown", - "Permission to bypass Workstation optimization cooldown", PermissionDefault.FALSE)), - COMMAND_COOLDOWN(new Permission("villageroptimizer.bypass.commandcooldown", - "Permission to bypass command optimization cooldown", PermissionDefault.FALSE)); - - private final Permission permission; - Bypass(Permission permission) { - this.permission = permission; - } - - public Permission get() { - return permission; - } -} diff --git a/src/main/java/me/xginko/villageroptimizer/enums/permissions/Commands.java b/src/main/java/me/xginko/villageroptimizer/enums/permissions/Commands.java deleted file mode 100644 index e51f294..0000000 --- a/src/main/java/me/xginko/villageroptimizer/enums/permissions/Commands.java +++ /dev/null @@ -1,26 +0,0 @@ -package me.xginko.villageroptimizer.enums.permissions; - -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -public enum Commands { - VERSION(new Permission("villageroptimizer.cmd.version", - "Permission get the plugin version", PermissionDefault.OP)), - RELOAD(new Permission("villageroptimizer.cmd.reload", - "Permission to reload the plugin config", PermissionDefault.OP)), - DISABLE(new Permission("villageroptimizer.cmd.disable", - "Permission to disable the plugin", PermissionDefault.OP)), - OPTIMIZE_RADIUS(new Permission("villageroptimizer.cmd.optimize", - "Permission to optimize villagers in a radius", PermissionDefault.TRUE)), - UNOPTIMIZE_RADIUS(new Permission("villageroptimizer.cmd.unoptimize", - "Permission to unoptimize villagers in a radius", PermissionDefault.TRUE)); - - private final Permission permission; - Commands(Permission permission) { - this.permission = permission; - } - - public Permission get() { - return permission; - } -} diff --git a/src/main/java/me/xginko/villageroptimizer/enums/permissions/Optimize.java b/src/main/java/me/xginko/villageroptimizer/enums/permissions/Optimize.java deleted file mode 100644 index 9962cc1..0000000 --- a/src/main/java/me/xginko/villageroptimizer/enums/permissions/Optimize.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.xginko.villageroptimizer.enums.permissions; - -import org.bukkit.permissions.Permission; -import org.bukkit.permissions.PermissionDefault; - -public enum Optimize { - NAMETAG(new Permission("villageroptimizer.optimize.nametag", - "Permission to optimize / unoptimize using Nametags", PermissionDefault.TRUE)), - BLOCK(new Permission("villageroptimizer.optimize.block", - "Permission to optimize / unoptimize using Blocks", PermissionDefault.TRUE)), - WORKSTATION(new Permission("villageroptimizer.optimize.workstation", - "Permission to optimize / unoptimize using Workstations", PermissionDefault.TRUE)); - - private final Permission permission; - Optimize(Permission permission) { - this.permission = permission; - } - - public Permission get() { - return permission; - } -} diff --git a/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java b/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java index 378eb93..e8664e7 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java @@ -5,7 +5,7 @@ import com.tcoded.folialib.wrapper.task.WrappedTask; import me.xginko.villageroptimizer.VillagerCache; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.config.Config; -import me.xginko.villageroptimizer.utils.CommonUtil; +import me.xginko.villageroptimizer.utils.GenericUtil; import net.kyori.adventure.text.Component; import org.bukkit.Chunk; import org.bukkit.Server; @@ -92,7 +92,7 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener { this.periodic_chunk_check = scheduler.runTimer(() -> { for (World world : server.getWorlds()) { for (Chunk chunk : world.getLoadedChunks()) { - if (!skip_unloaded_entity_chunks || CommonUtil.isEntitiesLoaded(chunk)) { + if (!skip_unloaded_entity_chunks || GenericUtil.isEntitiesLoaded(chunk)) { this.manageVillagerCount(chunk); } } @@ -157,7 +157,7 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener { if (log_enabled) { VillagerOptimizer.getLog().info(Component.text( "Removed unoptimized villager with profession '" + villager.getProfession().name() + "' at " + - CommonUtil.formatLocation(villager.getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(villager.getLocation())).color(GenericUtil.COLOR)); } }); } @@ -180,7 +180,7 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener { if (log_enabled) { VillagerOptimizer.getLog().info(Component.text("Removed optimized villager with profession '" + villager.getProfession().name() + "' at " + - CommonUtil.formatLocation(villager.getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(villager.getLocation())).color(GenericUtil.COLOR)); } }); } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java index 0fd9581..ad411e3 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java @@ -5,7 +5,7 @@ import me.xginko.villageroptimizer.VillagerCache; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import me.xginko.villageroptimizer.utils.CommonUtil; +import me.xginko.villageroptimizer.utils.GenericUtil; import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Material; @@ -87,7 +87,7 @@ public class EnableLeashingVillagers implements VillagerOptimizerModule, Listene if (log_enabled) { VillagerOptimizer.getLog().info(Component.text(player.getName() + " leashed a villager at " + - CommonUtil.formatLocation(villager.getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(villager.getLocation())).color(GenericUtil.COLOR)); } }); } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java index 8d6d77d..0c17af7 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java @@ -6,7 +6,7 @@ import me.xginko.villageroptimizer.VillagerCache; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import me.xginko.villageroptimizer.utils.CommonUtil; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.TextReplacementConfig; import org.bukkit.entity.Player; @@ -88,7 +88,7 @@ public class LevelOptimizedProfession implements VillagerOptimizerModule, Listen Player player = (Player) event.getPlayer(); final TextReplacementConfig timeLeft = TextReplacementConfig.builder() .matchLiteral("%time%") - .replacement(CommonUtil.formatDuration(Duration.ofMillis(wVillager.getLevelCooldownMillis(cooldown_millis)))) + .replacement(GenericUtil.formatDuration(Duration.ofMillis(wVillager.getLevelCooldownMillis(cooldown_millis)))) .build(); VillagerOptimizer.getLang(player.locale()).villager_leveling_up .forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft))); diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java index c0e8b57..2591528 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java @@ -3,7 +3,7 @@ package me.xginko.villageroptimizer.modules.gameplay; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.VillagerCache; import me.xginko.villageroptimizer.config.Config; -import me.xginko.villageroptimizer.enums.permissions.Bypass; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.utils.KyoriUtil; import org.bukkit.entity.Player; @@ -52,7 +52,7 @@ public class PreventUnoptimizedTrading implements VillagerOptimizerModule, Liste @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onTradeOpen(TradeSelectEvent event) { if (!event.getInventory().getType().equals(InventoryType.MERCHANT)) return; - if (event.getWhoClicked().hasPermission(Bypass.TRADE_PREVENTION.get())) return; + if (event.getWhoClicked().hasPermission(Permissions.Bypass.TRADE_PREVENTION.get())) return; if (!(event.getInventory().getHolder() instanceof Villager)) return; if (villagerCache.getOrAdd((Villager) event.getInventory().getHolder()).isOptimized()) return; @@ -68,7 +68,7 @@ public class PreventUnoptimizedTrading implements VillagerOptimizerModule, Liste @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onInventoryClick(InventoryClickEvent event) { if (!event.getInventory().getType().equals(InventoryType.MERCHANT)) return; - if (event.getWhoClicked().hasPermission(Bypass.TRADE_PREVENTION.get())) return; + if (event.getWhoClicked().hasPermission(Permissions.Bypass.TRADE_PREVENTION.get())) return; if (!(event.getInventory().getHolder() instanceof Villager)) return; if (villagerCache.getOrAdd((Villager) event.getInventory().getHolder()).isOptimized()) return; diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java index 5f70b79..94b2e0b 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java @@ -4,9 +4,9 @@ import me.xginko.villageroptimizer.VillagerCache; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.config.Config; -import me.xginko.villageroptimizer.enums.permissions.Bypass; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import me.xginko.villageroptimizer.utils.CommonUtil; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; @@ -65,7 +65,7 @@ public class RestockOptimizedTrades implements VillagerOptimizerModule, Listener if (!wVillager.isOptimized()) return; final Player player = event.getPlayer(); - final boolean player_bypassing = player.hasPermission(Bypass.RESTOCK_COOLDOWN.get()); + final boolean player_bypassing = player.hasPermission(Permissions.Bypass.RESTOCK_COOLDOWN.get()); if (wVillager.canRestock(restock_delay_millis) || player_bypassing) { wVillager.restock(); @@ -74,7 +74,7 @@ public class RestockOptimizedTrades implements VillagerOptimizerModule, Listener if (notify_player && !player_bypassing) { final TextReplacementConfig timeLeft = TextReplacementConfig.builder() .matchLiteral("%time%") - .replacement(CommonUtil.formatDuration(Duration.ofMillis(wVillager.getRestockCooldownMillis(restock_delay_millis)))) + .replacement(GenericUtil.formatDuration(Duration.ofMillis(wVillager.getRestockCooldownMillis(restock_delay_millis)))) .build(); VillagerOptimizer.getLang(player.locale()).trades_restocked .forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft))); @@ -82,7 +82,7 @@ public class RestockOptimizedTrades implements VillagerOptimizerModule, Listener if (log_enabled) { VillagerOptimizer.getLog().info(Component.text("Restocked optimized villager at " + - CommonUtil.formatLocation(wVillager.villager().getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(wVillager.villager().getLocation())).color(GenericUtil.COLOR)); } } } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java index 7a60066..94324e0 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java @@ -5,12 +5,11 @@ import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.enums.OptimizationType; -import me.xginko.villageroptimizer.enums.permissions.Bypass; -import me.xginko.villageroptimizer.enums.permissions.Optimize; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.events.VillagerOptimizeEvent; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import me.xginko.villageroptimizer.utils.CommonUtil; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; @@ -97,7 +96,7 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { final Block placed = event.getBlock(); if (!blocks_that_disable.contains(placed.getType())) return; final Player player = event.getPlayer(); - if (!player.hasPermission(Optimize.BLOCK.get())) return; + if (!player.hasPermission(Permissions.Optimize.BLOCK.get())) return; if (only_while_sneaking && !player.isSneaking()) return; final Location blockLoc = placed.getLocation().toCenterLocation(); @@ -119,7 +118,7 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { if (closestOptimizableVillager == null) return; - if (closestOptimizableVillager.canOptimize(cooldown_millis) || player.hasPermission(Bypass.BLOCK_COOLDOWN.get())) { + if (closestOptimizableVillager.canOptimize(cooldown_millis) || player.hasPermission(Permissions.Bypass.BLOCK_COOLDOWN.get())) { VillagerOptimizeEvent optimizeEvent = new VillagerOptimizeEvent( closestOptimizableVillager, OptimizationType.BLOCK, @@ -146,14 +145,14 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { if (log_enabled) { VillagerOptimizer.getLog().info(Component.text(player.getName() + " optimized villager by block at " + - CommonUtil.formatLocation(closestOptimizableVillager.villager().getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(closestOptimizableVillager.villager().getLocation())).color(GenericUtil.COLOR)); } } else { closestOptimizableVillager.sayNo(); if (notify_player) { final TextReplacementConfig timeLeft = TextReplacementConfig.builder() .matchLiteral("%time%") - .replacement(CommonUtil.formatDuration(Duration.ofMillis(closestOptimizableVillager.getOptimizeCooldownMillis(cooldown_millis)))) + .replacement(GenericUtil.formatDuration(Duration.ofMillis(closestOptimizableVillager.getOptimizeCooldownMillis(cooldown_millis)))) .build(); VillagerOptimizer.getLang(player.locale()).block_on_optimize_cooldown .forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft))); @@ -166,7 +165,7 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { final Block broken = event.getBlock(); if (!blocks_that_disable.contains(broken.getType())) return; final Player player = event.getPlayer(); - if (!player.hasPermission(Optimize.BLOCK.get())) return; + if (!player.hasPermission(Permissions.Optimize.BLOCK.get())) return; if (only_while_sneaking && !player.isSneaking()) return; final Location blockLoc = broken.getLocation().toCenterLocation(); @@ -211,7 +210,7 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { if (log_enabled) { VillagerOptimizer.getLog().info(Component.text(player.getName() + " unoptimized villager by block at " + - CommonUtil.formatLocation(closestOptimizedVillager.villager().getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(closestOptimizedVillager.villager().getLocation())).color(GenericUtil.COLOR)); } } } \ No newline at end of file diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java index cd29920..3dd9a35 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java @@ -5,12 +5,11 @@ import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.enums.OptimizationType; -import me.xginko.villageroptimizer.enums.permissions.Bypass; -import me.xginko.villageroptimizer.enums.permissions.Optimize; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.events.VillagerOptimizeEvent; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import me.xginko.villageroptimizer.utils.CommonUtil; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; @@ -81,7 +80,7 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener { private void onPlayerInteractEntity(PlayerInteractEntityEvent event) { if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return; final Player player = event.getPlayer(); - if (!player.hasPermission(Optimize.NAMETAG.get())) return; + if (!player.hasPermission(Permissions.Optimize.NAMETAG.get())) return; final ItemStack usedItem = player.getInventory().getItem(event.getHand()); if (usedItem != null && !usedItem.getType().equals(Material.NAME_TAG)) return; @@ -92,12 +91,12 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener { // Get component name first, so we can manually name the villager when canceling the event to avoid item consumption. final Component newVillagerName = meta.displayName(); assert newVillagerName != null; // Legitimate since we checked for hasDisplayName() - final String nameTagPlainText = CommonUtil.plainTextSerializer.serialize(newVillagerName); + final String nameTagPlainText = GenericUtil.plainTextSerializer.serialize(newVillagerName); final Villager villager = (Villager) event.getRightClicked(); final WrappedVillager wVillager = villagerCache.getOrAdd(villager); if (nametags.contains(nameTagPlainText.toLowerCase())) { - if (wVillager.canOptimize(cooldown) || player.hasPermission(Bypass.NAMETAG_COOLDOWN.get())) { + if (wVillager.canOptimize(cooldown) || player.hasPermission(Permissions.Bypass.NAMETAG_COOLDOWN.get())) { VillagerOptimizeEvent optimizeEvent = new VillagerOptimizeEvent( wVillager, OptimizationType.NAMETAG, @@ -123,7 +122,7 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener { if (log_enabled) { VillagerOptimizer.getLog().info(Component.text(player.getName() + " optimized villager by nametag '" + nameTagPlainText + "' at " + - CommonUtil.formatLocation(wVillager.villager().getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(wVillager.villager().getLocation())).color(GenericUtil.COLOR)); } } else { event.setCancelled(true); @@ -131,7 +130,7 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener { if (notify_player) { final TextReplacementConfig timeLeft = TextReplacementConfig.builder() .matchLiteral("%time%") - .replacement(CommonUtil.formatDuration(Duration.ofMillis(wVillager.getOptimizeCooldownMillis(cooldown)))) + .replacement(GenericUtil.formatDuration(Duration.ofMillis(wVillager.getOptimizeCooldownMillis(cooldown)))) .build(); VillagerOptimizer.getLang(player.locale()).nametag_on_optimize_cooldown .forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft))); @@ -157,7 +156,7 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener { if (log_enabled) { VillagerOptimizer.getLog().info(Component.text(player.getName() + " unoptimized villager by nametag '" + nameTagPlainText + "' at " + - CommonUtil.formatLocation(wVillager.villager().getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(wVillager.villager().getLocation())).color(GenericUtil.COLOR)); } } } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByWorkstation.java b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByWorkstation.java index f0556d5..3a4e8b7 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByWorkstation.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByWorkstation.java @@ -9,12 +9,11 @@ import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.enums.OptimizationType; -import me.xginko.villageroptimizer.enums.permissions.Bypass; -import me.xginko.villageroptimizer.enums.permissions.Optimize; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.events.VillagerOptimizeEvent; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import me.xginko.villageroptimizer.utils.CommonUtil; +import me.xginko.villageroptimizer.utils.GenericUtil; import me.xginko.villageroptimizer.utils.KyoriUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; @@ -111,10 +110,10 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onBlockPlace(BlockPlaceEvent event) { final Block placed = event.getBlock(); - final Villager.Profession workstationProfession = CommonUtil.getWorkstationProfession(placed.getType()); + final Villager.Profession workstationProfession = GenericUtil.getWorkstationProfession(placed.getType()); if (workstationProfession.equals(Villager.Profession.NONE)) return; final Player player = event.getPlayer(); - if (!player.hasPermission(Optimize.WORKSTATION.get())) return; + if (!player.hasPermission(Permissions.Optimize.WORKSTATION.get())) return; if (only_while_sneaking && !player.isSneaking()) return; final Location workstationLoc = placed.getLocation().toCenterLocation(); @@ -141,12 +140,12 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener WrappedVillager finalToOptimize = toOptimize; pending_optimizations.put(placed.getLocation(), scheduler.runAtLocationLater(workstationLoc, () -> { - if (!finalToOptimize.canOptimize(cooldown_millis) && !player.hasPermission(Bypass.WORKSTATION_COOLDOWN.get())) { + if (!finalToOptimize.canOptimize(cooldown_millis) && !player.hasPermission(Permissions.Bypass.WORKSTATION_COOLDOWN.get())) { finalToOptimize.sayNo(); if (notify_player) { final TextReplacementConfig timeLeft = TextReplacementConfig.builder() .matchLiteral("%time%") - .replacement(CommonUtil.formatDuration(Duration.ofMillis(finalToOptimize.getOptimizeCooldownMillis(cooldown_millis)))) + .replacement(GenericUtil.formatDuration(Duration.ofMillis(finalToOptimize.getOptimizeCooldownMillis(cooldown_millis)))) .build(); VillagerOptimizer.getLang(player.locale()).nametag_on_optimize_cooldown .forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft))); @@ -182,7 +181,7 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener if (log_enabled) { VillagerOptimizer.getLog().info(Component.text(player.getName() + " optimized villager by workstation (" + placed.getType().toString().toLowerCase() + ") at " + - CommonUtil.formatLocation(finalToOptimize.villager().getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(finalToOptimize.villager().getLocation())).color(GenericUtil.COLOR)); } }, toOptimize.canLooseProfession() ? resettable_delay_millis : delay_millis, TimeUnit.MILLISECONDS)); } @@ -194,10 +193,10 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener WrappedTask pendingOpt = pending_optimizations.getIfPresent(broken.getLocation()); if (pendingOpt != null) pendingOpt.cancel(); - final Villager.Profession workstationProfession = CommonUtil.getWorkstationProfession(broken.getType()); + final Villager.Profession workstationProfession = GenericUtil.getWorkstationProfession(broken.getType()); if (workstationProfession.equals(Villager.Profession.NONE)) return; final Player player = event.getPlayer(); - if (!player.hasPermission(Optimize.WORKSTATION.get())) return; + if (!player.hasPermission(Permissions.Optimize.WORKSTATION.get())) return; if (only_while_sneaking && !player.isSneaking()) return; final Location workstationLoc = broken.getLocation(); @@ -247,7 +246,7 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener if (log_enabled) { VillagerOptimizer.getLog().info(Component.text(player.getName() + " unoptimized villager by workstation (" + broken.getType().toString().toLowerCase() + ") at " + - CommonUtil.formatLocation(closestOptimizedVillager.villager().getLocation())).color(VillagerOptimizer.COLOR)); + GenericUtil.formatLocation(closestOptimizedVillager.villager().getLocation())).color(GenericUtil.COLOR)); } } } \ No newline at end of file diff --git a/src/main/java/me/xginko/villageroptimizer/utils/CommonUtil.java b/src/main/java/me/xginko/villageroptimizer/utils/GenericUtil.java similarity index 90% rename from src/main/java/me/xginko/villageroptimizer/utils/CommonUtil.java rename to src/main/java/me/xginko/villageroptimizer/utils/GenericUtil.java index 74acffe..da0a742 100644 --- a/src/main/java/me/xginko/villageroptimizer/utils/CommonUtil.java +++ b/src/main/java/me/xginko/villageroptimizer/utils/GenericUtil.java @@ -1,5 +1,8 @@ package me.xginko.villageroptimizer.utils; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextColor; +import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Chunk; import org.bukkit.Location; @@ -9,7 +12,10 @@ import org.jetbrains.annotations.NotNull; import java.time.Duration; -public class CommonUtil { +public class GenericUtil { + + public static final TextColor COLOR = TextColor.color(102,255,230); + public static final Style STYLE = Style.style(COLOR, TextDecoration.BOLD); public static final PlainTextComponentSerializer plainTextSerializer = PlainTextComponentSerializer.plainText(); public static @NotNull String formatDuration(Duration duration) { diff --git a/src/main/java/me/xginko/villageroptimizer/utils/KyoriUtil.java b/src/main/java/me/xginko/villageroptimizer/utils/KyoriUtil.java index a488010..bf6a6d3 100644 --- a/src/main/java/me/xginko/villageroptimizer/utils/KyoriUtil.java +++ b/src/main/java/me/xginko/villageroptimizer/utils/KyoriUtil.java @@ -2,8 +2,11 @@ package me.xginko.villageroptimizer.utils; import me.xginko.villageroptimizer.VillagerOptimizer; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextReplacementConfig; import org.bukkit.command.CommandSender; +import java.util.Locale; + public class KyoriUtil { public static void sendMessage(CommandSender sender, Component message) { @@ -13,4 +16,37 @@ public class KyoriUtil { public static void sendActionBar(CommandSender sender, Component message) { VillagerOptimizer.getAudiences().sender(sender).sendActionBar(message); } + + public static Component toUpperCase(Component input, Locale locale) { + return input.replaceText(TextReplacementConfig.builder() + .match("(?s).*") + .replacement((result, builder) -> builder.content(result.group(0).toUpperCase(locale))) + .build()); + } + + public static String translateChatColor(String string) { + string = string.replace("&0", ""); + string = string.replace("&1", ""); + string = string.replace("&2", ""); + string = string.replace("&3", ""); + string = string.replace("&4", ""); + string = string.replace("&5", ""); + string = string.replace("&6", ""); + string = string.replace("&7", ""); + string = string.replace("&8", ""); + string = string.replace("&9", ""); + string = string.replace("&a", ""); + string = string.replace("&b", ""); + string = string.replace("&c", ""); + string = string.replace("&d", ""); + string = string.replace("&e", ""); + string = string.replace("&f", ""); + string = string.replace("&k", ""); + string = string.replace("&l", ""); + string = string.replace("&m", ""); + string = string.replace("&n", ""); + string = string.replace("&o", ""); + string = string.replace("&r", ""); + return string; + } }