diff --git a/VillagerOptimizer-1.16.5/pom.xml b/VillagerOptimizer-1.16.5/pom.xml index 507232e..f312289 100644 --- a/VillagerOptimizer-1.16.5/pom.xml +++ b/VillagerOptimizer-1.16.5/pom.xml @@ -7,7 +7,7 @@ me.xginko.VillagerOptimizer VillagerOptimizer - 1.0.0 + 1.0.1 1.16.5 diff --git a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java index 6a9016f..df4ddd7 100644 --- a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java +++ b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java @@ -126,7 +126,7 @@ public final class VillagerOptimizer extends JavaPlugin { Component.text("│ ").style(plugin_style) .append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) .append(Component.text(" │").style(plugin_style))); - else logger.info(String.format("Found language file for %s", localeString)); + else logger.info("Found language file for " + localeString); LanguageCache langCache = new LanguageCache(localeString); languageCacheMap.put(localeString, langCache); } @@ -140,7 +140,7 @@ public final class VillagerOptimizer extends JavaPlugin { Component.text("│ ").style(plugin_style) .append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) .append(Component.text(" │").style(plugin_style))); - else logger.info(String.format("Found language file for %s", localeString)); + else logger.info("Found language file for " + localeString); LanguageCache langCache = new LanguageCache(localeString); languageCacheMap.put(localeString, langCache); } diff --git a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java index 5f7bf0d..26daa8c 100644 --- a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java +++ b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java @@ -56,84 +56,85 @@ public class OptVillagersRadius implements VillagerOptimizerCommand, TabComplete return true; } - if (sender.hasPermission(Permissions.Commands.OPTIMIZE_RADIUS.get())) { - if (args.length != 1) { - VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + if (!sender.hasPermission(Permissions.Commands.OPTIMIZE_RADIUS.get())) { + sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + return true; + } + + if (args.length != 1) { + VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + return true; + } + + try { + int specifiedRadius = Integer.parseInt(args[0]); + + if (specifiedRadius > max_radius) { + final TextReplacementConfig limit = TextReplacementConfig.builder() + .matchLiteral("%distance%") + .replacement(Integer.toString(max_radius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); return true; } - try { - int specifiedRadius = Integer.parseInt(args[0]); + VillagerCache villagerCache = VillagerOptimizer.getCache(); + int successCount = 0; + int failCount = 0; + final boolean player_has_cooldown_bypass = player.hasPermission(Permissions.Bypass.COMMAND_COOLDOWN.get()); - if (specifiedRadius > max_radius) { - final TextReplacementConfig limit = TextReplacementConfig.builder() - .matchLiteral("%distance%") - .replacement(Integer.toString(max_radius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); - return true; - } + for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { + if (!entity.getType().equals(EntityType.VILLAGER)) continue; + Villager villager = (Villager) entity; + Villager.Profession profession = villager.getProfession(); + if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - VillagerCache villagerCache = VillagerOptimizer.getCache(); - int successCount = 0; - int failCount = 0; - final boolean player_has_cooldown_bypass = player.hasPermission(Permissions.Bypass.COMMAND_COOLDOWN.get()); + WrappedVillager wVillager = villagerCache.getOrAdd(villager); - for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { - if (!entity.getType().equals(EntityType.VILLAGER)) continue; - Villager villager = (Villager) entity; - Villager.Profession profession = villager.getProfession(); - if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - - WrappedVillager wVillager = villagerCache.getOrAdd(villager); - - if (player_has_cooldown_bypass || wVillager.canOptimize(cooldown)) { - VillagerOptimizeEvent optimizeEvent = new VillagerOptimizeEvent(wVillager, OptimizationType.COMMAND, player); - if (optimizeEvent.callEvent()) { - wVillager.setOptimization(optimizeEvent.getOptimizationType()); - wVillager.saveOptimizeTime(); - successCount++; - } - } else { - failCount++; + if (player_has_cooldown_bypass || wVillager.canOptimize(cooldown)) { + VillagerOptimizeEvent optimizeEvent = new VillagerOptimizeEvent(wVillager, OptimizationType.COMMAND, player); + if (optimizeEvent.callEvent()) { + wVillager.setOptimization(optimizeEvent.getOptimizationType()); + wVillager.saveOptimizeTime(); + successCount++; } + } else { + failCount++; } - - if (successCount <= 0 && failCount <= 0) { - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); - return true; - } - - if (successCount > 0) { - final TextReplacementConfig success_amount = TextReplacementConfig.builder() - .matchLiteral("%amount%") - .replacement(Integer.toString(successCount)) - .build(); - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_optimize_success.forEach(line -> player.sendMessage(line - .replaceText(success_amount) - .replaceText(radius) - )); - } - if (failCount > 0) { - final TextReplacementConfig alreadyOptimized = TextReplacementConfig.builder() - .matchLiteral("%amount%") - .replacement(Integer.toString(failCount)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_optimize_fail.forEach(line -> player.sendMessage(line.replaceText(alreadyOptimized))); - } - } catch (NumberFormatException e) { - VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } - } else { - sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + + if (successCount <= 0 && failCount <= 0) { + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); + return true; + } + + if (successCount > 0) { + final TextReplacementConfig success_amount = TextReplacementConfig.builder() + .matchLiteral("%amount%") + .replacement(Integer.toString(successCount)) + .build(); + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_optimize_success.forEach(line -> player.sendMessage(line + .replaceText(success_amount) + .replaceText(radius) + )); + } + if (failCount > 0) { + final TextReplacementConfig alreadyOptimized = TextReplacementConfig.builder() + .matchLiteral("%amount%") + .replacement(Integer.toString(failCount)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_optimize_fail.forEach(line -> player.sendMessage(line.replaceText(alreadyOptimized))); + } + } catch (NumberFormatException e) { + VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } return true; diff --git a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java index 656cd36..1652735 100644 --- a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java +++ b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java @@ -50,69 +50,70 @@ public class UnOptVillagersRadius implements VillagerOptimizerCommand, TabComple return true; } - if (sender.hasPermission(Permissions.Commands.UNOPTIMIZE_RADIUS.get())) { - if (args.length != 1) { - VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + if (!sender.hasPermission(Permissions.Commands.UNOPTIMIZE_RADIUS.get())) { + sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + return true; + } + + if (args.length != 1) { + VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + return true; + } + + try { + int specifiedRadius = Integer.parseInt(args[0]); + + if (specifiedRadius > max_radius) { + final TextReplacementConfig limit = TextReplacementConfig.builder() + .matchLiteral("%distance%") + .replacement(Integer.toString(max_radius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); return true; } - try { - int specifiedRadius = Integer.parseInt(args[0]); + VillagerCache villagerCache = VillagerOptimizer.getCache(); + int successCount = 0; - if (specifiedRadius > max_radius) { - final TextReplacementConfig limit = TextReplacementConfig.builder() - .matchLiteral("%distance%") - .replacement(Integer.toString(max_radius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); - return true; - } + for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { + if (!entity.getType().equals(EntityType.VILLAGER)) continue; + Villager villager = (Villager) entity; + Villager.Profession profession = villager.getProfession(); + if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - VillagerCache villagerCache = VillagerOptimizer.getCache(); - int successCount = 0; + WrappedVillager wVillager = villagerCache.getOrAdd(villager); - for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { - if (!entity.getType().equals(EntityType.VILLAGER)) continue; - Villager villager = (Villager) entity; - Villager.Profession profession = villager.getProfession(); - if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - - WrappedVillager wVillager = villagerCache.getOrAdd(villager); - - if (wVillager.isOptimized()) { - VillagerUnoptimizeEvent unOptimizeEvent = new VillagerUnoptimizeEvent(wVillager, player, OptimizationType.COMMAND); - if (unOptimizeEvent.callEvent()) { - wVillager.setOptimization(OptimizationType.NONE); - successCount++; - } + if (wVillager.isOptimized()) { + VillagerUnoptimizeEvent unOptimizeEvent = new VillagerUnoptimizeEvent(wVillager, player, OptimizationType.COMMAND); + if (unOptimizeEvent.callEvent()) { + wVillager.setOptimization(OptimizationType.NONE); + successCount++; } } - - if (successCount <= 0) { - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); - } else { - final TextReplacementConfig success_amount = TextReplacementConfig.builder() - .matchLiteral("%amount%") - .replacement(Integer.toString(successCount)) - .build(); - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_unoptimize_success.forEach(line -> player.sendMessage(line - .replaceText(success_amount) - .replaceText(radius) - )); - } - } catch (NumberFormatException e) { - VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } - } else { - sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + + if (successCount <= 0) { + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); + } else { + final TextReplacementConfig success_amount = TextReplacementConfig.builder() + .matchLiteral("%amount%") + .replacement(Integer.toString(successCount)) + .build(); + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_unoptimize_success.forEach(line -> player.sendMessage(line + .replaceText(success_amount) + .replaceText(radius) + )); + } + } catch (NumberFormatException e) { + VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } return true; diff --git a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/Config.java b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/Config.java index eb753a5..9f169d0 100644 --- a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/Config.java +++ b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/Config.java @@ -31,11 +31,9 @@ public class Config { } private ConfigFile loadConfig(File ymlFile) throws Exception { - File parent = new File(ymlFile.getParent()); + File parent = ymlFile.getParentFile(); if (!parent.exists() && !parent.mkdir()) VillagerOptimizer.getLog().severe("Unable to create plugin config directory."); - if (!ymlFile.exists()) - ymlFile.createNewFile(); // Result can be ignored because this method only returns false if the file already exists return ConfigFile.loadConfig(ymlFile); } diff --git a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java index 962b4c0..65fdac5 100644 --- a/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java +++ b/VillagerOptimizer-1.16.5/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java @@ -12,7 +12,6 @@ import java.util.List; public class LanguageCache { private final @NotNull ConfigFile lang; - private final @NotNull MiniMessage miniMessage; public final @NotNull Component no_permission; public final @NotNull List nametag_optimize_success, nametag_on_optimize_cooldown, nametag_unoptimize_success, @@ -22,9 +21,18 @@ public class LanguageCache { command_specify_radius, command_radius_invalid, command_no_villagers_nearby, trades_restocked, optimize_for_trading, villager_leveling_up; - public LanguageCache(String lang) throws Exception { - this.lang = loadLang(new File(VillagerOptimizer.getInstance().getDataFolder() + File.separator + "lang", lang + ".yml")); - this.miniMessage = MiniMessage.miniMessage(); + public LanguageCache(String locale) throws Exception { + VillagerOptimizer plugin = VillagerOptimizer.getInstance(); + File langYML = new File(plugin.getDataFolder() + File.separator + "lang", locale + ".yml"); + // Check if the lang folder has already been created + File parent = langYML.getParentFile(); + if (!parent.exists() && !parent.mkdir()) + VillagerOptimizer.getLog().severe("Unable to create lang directory."); + // Check if the file already exists and save the one from the plugins resources folder if it does not + if (!langYML.exists()) + plugin.saveResource("lang/" + locale + ".yml", false); + // Finally load the lang file with configmaster + this.lang = ConfigFile.loadConfig(langYML); // General this.no_permission = getTranslation("messages.no-permission", @@ -72,20 +80,6 @@ public class LanguageCache { this.command_no_villagers_nearby = getListTranslation("messages.command.no-villagers-nearby", List.of("Couldn't find any employed villagers within a radius of %radius%.")); - saveLang(); - } - - private ConfigFile loadLang(File ymlFile) throws Exception { - File parent = new File(ymlFile.getParent()); - if (!parent.exists()) - if (!parent.mkdir()) - VillagerOptimizer.getLog().severe("Unable to create lang directory."); - if (!ymlFile.exists()) - ymlFile.createNewFile(); // Result can be ignored because this method only returns false if the file already exists - return ConfigFile.loadConfig(ymlFile); - } - - private void saveLang() { try { lang.save(); } catch (Exception e) { @@ -95,21 +89,21 @@ public class LanguageCache { public @NotNull Component getTranslation(@NotNull String path, @NotNull String defaultTranslation) { lang.addDefault(path, defaultTranslation); - return miniMessage.deserialize(lang.getString(path, defaultTranslation)); + return MiniMessage.miniMessage().deserialize(lang.getString(path, defaultTranslation)); } public @NotNull Component getTranslation(@NotNull String path, @NotNull String defaultTranslation, @NotNull String comment) { lang.addDefault(path, defaultTranslation, comment); - return miniMessage.deserialize(lang.getString(path, defaultTranslation)); + return MiniMessage.miniMessage().deserialize(lang.getString(path, defaultTranslation)); } public @NotNull List getListTranslation(@NotNull String path, @NotNull List defaultTranslation) { lang.addDefault(path, defaultTranslation); - return lang.getStringList(path).stream().map(miniMessage::deserialize).toList(); + return lang.getStringList(path).stream().map(MiniMessage.miniMessage()::deserialize).toList(); } public @NotNull List getListTranslation(@NotNull String path, @NotNull List defaultTranslation, @NotNull String comment) { lang.addDefault(path, defaultTranslation, comment); - return lang.getStringList(path).stream().map(miniMessage::deserialize).toList(); + return lang.getStringList(path).stream().map(MiniMessage.miniMessage()::deserialize).toList(); } } diff --git a/VillagerOptimizer-1.20.2/pom.xml b/VillagerOptimizer-1.20.2/pom.xml index d9806ae..bc9e8ca 100644 --- a/VillagerOptimizer-1.20.2/pom.xml +++ b/VillagerOptimizer-1.20.2/pom.xml @@ -7,7 +7,7 @@ me.xginko.VillagerOptimizer VillagerOptimizer - 1.0.0 + 1.0.1 1.20.2 diff --git a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java index 6a9016f..df4ddd7 100644 --- a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java +++ b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java @@ -126,7 +126,7 @@ public final class VillagerOptimizer extends JavaPlugin { Component.text("│ ").style(plugin_style) .append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) .append(Component.text(" │").style(plugin_style))); - else logger.info(String.format("Found language file for %s", localeString)); + else logger.info("Found language file for " + localeString); LanguageCache langCache = new LanguageCache(localeString); languageCacheMap.put(localeString, langCache); } @@ -140,7 +140,7 @@ public final class VillagerOptimizer extends JavaPlugin { Component.text("│ ").style(plugin_style) .append(Component.text(" "+localeString).color(NamedTextColor.WHITE).decorate(TextDecoration.BOLD)) .append(Component.text(" │").style(plugin_style))); - else logger.info(String.format("Found language file for %s", localeString)); + else logger.info("Found language file for " + localeString); LanguageCache langCache = new LanguageCache(localeString); languageCacheMap.put(localeString, langCache); } diff --git a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java index 5f7bf0d..26daa8c 100644 --- a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java +++ b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java @@ -56,84 +56,85 @@ public class OptVillagersRadius implements VillagerOptimizerCommand, TabComplete return true; } - if (sender.hasPermission(Permissions.Commands.OPTIMIZE_RADIUS.get())) { - if (args.length != 1) { - VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + if (!sender.hasPermission(Permissions.Commands.OPTIMIZE_RADIUS.get())) { + sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + return true; + } + + if (args.length != 1) { + VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + return true; + } + + try { + int specifiedRadius = Integer.parseInt(args[0]); + + if (specifiedRadius > max_radius) { + final TextReplacementConfig limit = TextReplacementConfig.builder() + .matchLiteral("%distance%") + .replacement(Integer.toString(max_radius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); return true; } - try { - int specifiedRadius = Integer.parseInt(args[0]); + VillagerCache villagerCache = VillagerOptimizer.getCache(); + int successCount = 0; + int failCount = 0; + final boolean player_has_cooldown_bypass = player.hasPermission(Permissions.Bypass.COMMAND_COOLDOWN.get()); - if (specifiedRadius > max_radius) { - final TextReplacementConfig limit = TextReplacementConfig.builder() - .matchLiteral("%distance%") - .replacement(Integer.toString(max_radius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); - return true; - } + for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { + if (!entity.getType().equals(EntityType.VILLAGER)) continue; + Villager villager = (Villager) entity; + Villager.Profession profession = villager.getProfession(); + if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - VillagerCache villagerCache = VillagerOptimizer.getCache(); - int successCount = 0; - int failCount = 0; - final boolean player_has_cooldown_bypass = player.hasPermission(Permissions.Bypass.COMMAND_COOLDOWN.get()); + WrappedVillager wVillager = villagerCache.getOrAdd(villager); - for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { - if (!entity.getType().equals(EntityType.VILLAGER)) continue; - Villager villager = (Villager) entity; - Villager.Profession profession = villager.getProfession(); - if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - - WrappedVillager wVillager = villagerCache.getOrAdd(villager); - - if (player_has_cooldown_bypass || wVillager.canOptimize(cooldown)) { - VillagerOptimizeEvent optimizeEvent = new VillagerOptimizeEvent(wVillager, OptimizationType.COMMAND, player); - if (optimizeEvent.callEvent()) { - wVillager.setOptimization(optimizeEvent.getOptimizationType()); - wVillager.saveOptimizeTime(); - successCount++; - } - } else { - failCount++; + if (player_has_cooldown_bypass || wVillager.canOptimize(cooldown)) { + VillagerOptimizeEvent optimizeEvent = new VillagerOptimizeEvent(wVillager, OptimizationType.COMMAND, player); + if (optimizeEvent.callEvent()) { + wVillager.setOptimization(optimizeEvent.getOptimizationType()); + wVillager.saveOptimizeTime(); + successCount++; } + } else { + failCount++; } - - if (successCount <= 0 && failCount <= 0) { - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); - return true; - } - - if (successCount > 0) { - final TextReplacementConfig success_amount = TextReplacementConfig.builder() - .matchLiteral("%amount%") - .replacement(Integer.toString(successCount)) - .build(); - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_optimize_success.forEach(line -> player.sendMessage(line - .replaceText(success_amount) - .replaceText(radius) - )); - } - if (failCount > 0) { - final TextReplacementConfig alreadyOptimized = TextReplacementConfig.builder() - .matchLiteral("%amount%") - .replacement(Integer.toString(failCount)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_optimize_fail.forEach(line -> player.sendMessage(line.replaceText(alreadyOptimized))); - } - } catch (NumberFormatException e) { - VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } - } else { - sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + + if (successCount <= 0 && failCount <= 0) { + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); + return true; + } + + if (successCount > 0) { + final TextReplacementConfig success_amount = TextReplacementConfig.builder() + .matchLiteral("%amount%") + .replacement(Integer.toString(successCount)) + .build(); + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_optimize_success.forEach(line -> player.sendMessage(line + .replaceText(success_amount) + .replaceText(radius) + )); + } + if (failCount > 0) { + final TextReplacementConfig alreadyOptimized = TextReplacementConfig.builder() + .matchLiteral("%amount%") + .replacement(Integer.toString(failCount)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_optimize_fail.forEach(line -> player.sendMessage(line.replaceText(alreadyOptimized))); + } + } catch (NumberFormatException e) { + VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } return true; diff --git a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java index 656cd36..1652735 100644 --- a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java +++ b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java @@ -50,69 +50,70 @@ public class UnOptVillagersRadius implements VillagerOptimizerCommand, TabComple return true; } - if (sender.hasPermission(Permissions.Commands.UNOPTIMIZE_RADIUS.get())) { - if (args.length != 1) { - VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + if (!sender.hasPermission(Permissions.Commands.UNOPTIMIZE_RADIUS.get())) { + sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + return true; + } + + if (args.length != 1) { + VillagerOptimizer.getLang(player.locale()).command_specify_radius.forEach(player::sendMessage); + return true; + } + + try { + int specifiedRadius = Integer.parseInt(args[0]); + + if (specifiedRadius > max_radius) { + final TextReplacementConfig limit = TextReplacementConfig.builder() + .matchLiteral("%distance%") + .replacement(Integer.toString(max_radius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); return true; } - try { - int specifiedRadius = Integer.parseInt(args[0]); + VillagerCache villagerCache = VillagerOptimizer.getCache(); + int successCount = 0; - if (specifiedRadius > max_radius) { - final TextReplacementConfig limit = TextReplacementConfig.builder() - .matchLiteral("%distance%") - .replacement(Integer.toString(max_radius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_radius_limit_exceed.forEach(line -> player.sendMessage(line.replaceText(limit))); - return true; - } + for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { + if (!entity.getType().equals(EntityType.VILLAGER)) continue; + Villager villager = (Villager) entity; + Villager.Profession profession = villager.getProfession(); + if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - VillagerCache villagerCache = VillagerOptimizer.getCache(); - int successCount = 0; + WrappedVillager wVillager = villagerCache.getOrAdd(villager); - for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) { - if (!entity.getType().equals(EntityType.VILLAGER)) continue; - Villager villager = (Villager) entity; - Villager.Profession profession = villager.getProfession(); - if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue; - - WrappedVillager wVillager = villagerCache.getOrAdd(villager); - - if (wVillager.isOptimized()) { - VillagerUnoptimizeEvent unOptimizeEvent = new VillagerUnoptimizeEvent(wVillager, player, OptimizationType.COMMAND); - if (unOptimizeEvent.callEvent()) { - wVillager.setOptimization(OptimizationType.NONE); - successCount++; - } + if (wVillager.isOptimized()) { + VillagerUnoptimizeEvent unOptimizeEvent = new VillagerUnoptimizeEvent(wVillager, player, OptimizationType.COMMAND); + if (unOptimizeEvent.callEvent()) { + wVillager.setOptimization(OptimizationType.NONE); + successCount++; } } - - if (successCount <= 0) { - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); - } else { - final TextReplacementConfig success_amount = TextReplacementConfig.builder() - .matchLiteral("%amount%") - .replacement(Integer.toString(successCount)) - .build(); - final TextReplacementConfig radius = TextReplacementConfig.builder() - .matchLiteral("%radius%") - .replacement(Integer.toString(specifiedRadius)) - .build(); - VillagerOptimizer.getLang(player.locale()).command_unoptimize_success.forEach(line -> player.sendMessage(line - .replaceText(success_amount) - .replaceText(radius) - )); - } - } catch (NumberFormatException e) { - VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } - } else { - sender.sendMessage(VillagerOptimizer.getLang(sender).no_permission); + + if (successCount <= 0) { + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_no_villagers_nearby.forEach(line -> player.sendMessage(line.replaceText(radius))); + } else { + final TextReplacementConfig success_amount = TextReplacementConfig.builder() + .matchLiteral("%amount%") + .replacement(Integer.toString(successCount)) + .build(); + final TextReplacementConfig radius = TextReplacementConfig.builder() + .matchLiteral("%radius%") + .replacement(Integer.toString(specifiedRadius)) + .build(); + VillagerOptimizer.getLang(player.locale()).command_unoptimize_success.forEach(line -> player.sendMessage(line + .replaceText(success_amount) + .replaceText(radius) + )); + } + } catch (NumberFormatException e) { + VillagerOptimizer.getLang(player.locale()).command_radius_invalid.forEach(player::sendMessage); } return true; diff --git a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/Config.java b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/Config.java index eb753a5..9f169d0 100644 --- a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/Config.java +++ b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/Config.java @@ -31,11 +31,9 @@ public class Config { } private ConfigFile loadConfig(File ymlFile) throws Exception { - File parent = new File(ymlFile.getParent()); + File parent = ymlFile.getParentFile(); if (!parent.exists() && !parent.mkdir()) VillagerOptimizer.getLog().severe("Unable to create plugin config directory."); - if (!ymlFile.exists()) - ymlFile.createNewFile(); // Result can be ignored because this method only returns false if the file already exists return ConfigFile.loadConfig(ymlFile); } diff --git a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java index 962b4c0..0af1bec 100644 --- a/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java +++ b/VillagerOptimizer-1.20.2/src/main/java/me/xginko/villageroptimizer/config/LanguageCache.java @@ -12,7 +12,6 @@ import java.util.List; public class LanguageCache { private final @NotNull ConfigFile lang; - private final @NotNull MiniMessage miniMessage; public final @NotNull Component no_permission; public final @NotNull List nametag_optimize_success, nametag_on_optimize_cooldown, nametag_unoptimize_success, @@ -22,9 +21,18 @@ public class LanguageCache { command_specify_radius, command_radius_invalid, command_no_villagers_nearby, trades_restocked, optimize_for_trading, villager_leveling_up; - public LanguageCache(String lang) throws Exception { - this.lang = loadLang(new File(VillagerOptimizer.getInstance().getDataFolder() + File.separator + "lang", lang + ".yml")); - this.miniMessage = MiniMessage.miniMessage(); + public LanguageCache(String locale) throws Exception { + VillagerOptimizer plugin = VillagerOptimizer.getInstance(); + File langYML = new File(plugin.getDataFolder() + File.separator + "lang", locale + ".yml"); + // Check if the lang folder has already been created + File parent = langYML.getParentFile(); + if (!parent.exists() && !parent.mkdir()) + VillagerOptimizer.getLog().severe("Unable to create lang directory."); + // Check if the file already exists and save the one from the plugins resources folder if it does not + if (!langYML.exists()) + plugin.saveResource("lang/" + locale + ".yml", false); + // Finally load the lang file with configmaster + this.lang = ConfigFile.loadConfig(langYML); // General this.no_permission = getTranslation("messages.no-permission", @@ -72,20 +80,6 @@ public class LanguageCache { this.command_no_villagers_nearby = getListTranslation("messages.command.no-villagers-nearby", List.of("Couldn't find any employed villagers within a radius of %radius%.")); - saveLang(); - } - - private ConfigFile loadLang(File ymlFile) throws Exception { - File parent = new File(ymlFile.getParent()); - if (!parent.exists()) - if (!parent.mkdir()) - VillagerOptimizer.getLog().severe("Unable to create lang directory."); - if (!ymlFile.exists()) - ymlFile.createNewFile(); // Result can be ignored because this method only returns false if the file already exists - return ConfigFile.loadConfig(ymlFile); - } - - private void saveLang() { try { lang.save(); } catch (Exception e) { @@ -95,21 +89,21 @@ public class LanguageCache { public @NotNull Component getTranslation(@NotNull String path, @NotNull String defaultTranslation) { lang.addDefault(path, defaultTranslation); - return miniMessage.deserialize(lang.getString(path, defaultTranslation)); + return MiniMessage.miniMessage().deserialize(lang.getString(path, defaultTranslation)); } public @NotNull Component getTranslation(@NotNull String path, @NotNull String defaultTranslation, @NotNull String comment) { lang.addDefault(path, defaultTranslation, comment); - return miniMessage.deserialize(lang.getString(path, defaultTranslation)); + return MiniMessage.miniMessage().deserialize(lang.getString(path, defaultTranslation)); } public @NotNull List getListTranslation(@NotNull String path, @NotNull List defaultTranslation) { lang.addDefault(path, defaultTranslation); - return lang.getStringList(path).stream().map(miniMessage::deserialize).toList(); + return lang.getStringList(path).stream().map(MiniMessage.miniMessage()::deserialize).toList(); } public @NotNull List getListTranslation(@NotNull String path, @NotNull List defaultTranslation, @NotNull String comment) { lang.addDefault(path, defaultTranslation, comment); - return lang.getStringList(path).stream().map(miniMessage::deserialize).toList(); + return lang.getStringList(path).stream().map(MiniMessage.miniMessage()::deserialize).toList(); } -} +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0fcca38..7a846e3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.xginko.VillagerOptimizer VillagerOptimizer - 1.0.0 + 1.0.1 VillagerOptimizer-1.20.2 VillagerOptimizer-1.16.5