From 8d1f339729b9e888309bf486218b17b92128ac03 Mon Sep 17 00:00:00 2001 From: xGinko Date: Fri, 29 Sep 2023 14:10:16 +0200 Subject: [PATCH] improve renaming logic --- .../optimizevillagers/OptVillagersRadius.java | 6 +++--- .../UnOptVillagersRadius.java | 18 +++++++++++++++++- .../modules/optimizations/OptimizeByBlock.java | 17 ++++++++++++++--- .../optimizations/OptimizeByWorkstation.java | 15 +++++++++++++-- 4 files changed, 47 insertions(+), 9 deletions(-) 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 86e6a24..c91f804 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/optimizevillagers/OptVillagersRadius.java @@ -39,11 +39,11 @@ public class OptVillagersRadius implements VillagerOptimizerCommand, TabComplete this.cooldown = config.getInt("optimization-methods.commands.optimizevillagers.cooldown-seconds", 600, """ Cooldown in seconds until a villager can be optimized again using the command.\s Here for configuration freedom. Recommended to leave as is to not enable any exploitable behavior.""") * 1000L; - this.shouldRename = config.getBoolean("optimization-methods.commands.optimizevillagers.rename-optimized-villagers.enable", true, + this.shouldRename = config.getBoolean("optimization-methods.commands.rename-optimized-villagers.enable", true, "Renames villagers to what you configure below when they're optimized."); - this.overwrite_name = config.getBoolean("optimization-methods.commands.optimizevillagers.rename-optimized-villagers.overwrite-previous-name", false, + this.overwrite_name = config.getBoolean("optimization-methods.commands.rename-optimized-villagers.overwrite-previous-name", false, "Whether to overwrite the previous name or not."); - this.optimizeName = MiniMessage.miniMessage().deserialize(config.getString("optimization-methods.commands.optimizevillagers.name-villager.name", "Optimize", + this.optimizeName = MiniMessage.miniMessage().deserialize(config.getString("optimization-methods.commands.name-villager.name", "Optimized", "The MiniMessage formatted name to give optimized villagers.")); } 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 4896f0e..46bbac2 100644 --- a/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java +++ b/src/main/java/me/xginko/villageroptimizer/commands/unoptimizevillagers/UnOptVillagersRadius.java @@ -4,12 +4,15 @@ import me.xginko.villageroptimizer.VillagerCache; import me.xginko.villageroptimizer.VillagerOptimizer; 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; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabCompleter; @@ -26,10 +29,15 @@ import java.util.List; public class UnOptVillagersRadius implements VillagerOptimizerCommand, TabCompleter { private final List tabCompletes = List.of("5", "10", "25", "50"); + private final String optimizeName; private final int maxRadius; + private final boolean shouldRename; public UnOptVillagersRadius() { - this.maxRadius = VillagerOptimizer.getConfiguration().getInt("optimization-methods.commands.unoptimizevillagers.max-block-radius", 100); + Config config = VillagerOptimizer.getConfiguration(); + this.maxRadius = config.getInt("optimization-methods.commands.unoptimizevillagers.max-block-radius", 100); + this.shouldRename = config.getBoolean("optimization-methods.commands.rename-optimized-villagers.enable", true); + this.optimizeName = MiniMessage.miniMessage().stripTags(config.getString("optimization-methods.commands.name-villager.name", "Optimized")); } @Override @@ -81,6 +89,14 @@ public class UnOptVillagersRadius implements VillagerOptimizerCommand, TabComple if (wVillager.isOptimized()) { wVillager.setOptimization(OptimizationType.NONE); + + if (shouldRename) { + Component vilName = villager.customName(); + if (vilName != null && PlainTextComponentSerializer.plainText().serialize(vilName).equalsIgnoreCase(optimizeName)) { + villager.customName(null); + } + } + successCount++; } } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java index 552d6df..47ce352 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByBlock.java @@ -12,6 +12,7 @@ import me.xginko.villageroptimizer.utils.LogUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -70,7 +71,7 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { "Renames villagers to what you configure below when they're optimized."); this.overwrite_name = config.getBoolean("optimization-methods.block-optimization.rename-optimized-villagers.overwrite-previous-name", false, "Whether to overwrite the previous name or not."); - this.optimizeName = MiniMessage.miniMessage().deserialize(config.getString("optimization-methods.block-optimization.name-villager.name", "Optimize", + this.optimizeName = MiniMessage.miniMessage().deserialize(config.getString("optimization-methods.block-optimization.name-villager.name", "Block Optimized", "The MiniMessage formatted name to give optimized villagers.")); this.shouldLog = config.getBoolean("optimization-methods.block-optimization.log", false); } @@ -189,10 +190,20 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { if (closestOptimizedVillager == null) return; closestOptimizedVillager.setOptimization(OptimizationType.NONE); + + Villager villager = closestOptimizedVillager.villager(); + + if (shouldRename) { + Component vilName = villager.customName(); + if (vilName != null && PlainTextComponentSerializer.plainText().serialize(vilName).equalsIgnoreCase(PlainTextComponentSerializer.plainText().serialize(optimizeName))) { + villager.customName(null); + } + } + if (shouldNotifyPlayer) { final TextReplacementConfig vilProfession = TextReplacementConfig.builder() .matchLiteral("%vil_profession%") - .replacement(closestOptimizedVillager.villager().getProfession().toString().toLowerCase()) + .replacement(villager.getProfession().toString().toLowerCase()) .build(); final TextReplacementConfig brokenMaterial = TextReplacementConfig.builder() .matchLiteral("%blocktype%") @@ -206,4 +217,4 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener { if (shouldLog) VillagerOptimizer.getLog().info("Villager unoptimized because nearby optimization block broken at: "+closestOptimizedVillager.villager().getLocation()); } -} +} \ No newline at end of file diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java index 9098938..e86733f 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimizations/OptimizeByWorkstation.java @@ -11,6 +11,7 @@ import me.xginko.villageroptimizer.utils.CommonUtil; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -54,7 +55,7 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener "Renames villagers to what you configure below when they're optimized."); this.overwrite_name = config.getBoolean("optimization-methods.workstation-optimization.rename-optimized-villagers.overwrite-previous-name", false, "Whether to overwrite the previous name or not."); - this.optimizeName = MiniMessage.miniMessage().deserialize(config.getString("optimization-methods.workstation-optimization.name-villager.name", "Optimize", + this.optimizeName = MiniMessage.miniMessage().deserialize(config.getString("optimization-methods.workstation-optimization.name-villager.name", "Workstation Optimized", "The MiniMessage formatted name to give optimized villagers.")); this.shouldLog = config.getBoolean("optimization-methods.workstation-optimization.log", false); } @@ -177,10 +178,20 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener if (closestOptimizedVillager == null) return; closestOptimizedVillager.setOptimization(OptimizationType.NONE); + + Villager villager = closestOptimizedVillager.villager(); + + if (shouldRename) { + Component vilName = villager.customName(); + if (vilName != null && PlainTextComponentSerializer.plainText().serialize(vilName).equalsIgnoreCase(PlainTextComponentSerializer.plainText().serialize(optimizeName))) { + villager.customName(null); + } + } + if (shouldNotifyPlayer) { final TextReplacementConfig vilProfession = TextReplacementConfig.builder() .matchLiteral("%vil_profession%") - .replacement(closestOptimizedVillager.villager().getProfession().toString().toLowerCase()) + .replacement(villager.getProfession().toString().toLowerCase()) .build(); final TextReplacementConfig brokenWorkstation = TextReplacementConfig.builder() .matchLiteral("%workstation%")