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;
+ }
}