add config option for auto renaming

This commit is contained in:
xGinko 2023-09-29 13:49:48 +02:00
parent 896e412a0e
commit b3ce2b2dbd
3 changed files with 59 additions and 2 deletions

View File

@ -11,6 +11,7 @@ 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 org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
@ -27,8 +28,10 @@ import java.util.List;
public class OptVillagersRadius implements VillagerOptimizerCommand, TabCompleter {
private final List<String> tabCompletes = List.of("5", "10", "25", "50");
private final Component optimizeName;
private final long cooldown;
private final int maxRadius;
private final boolean shouldRename, overwrite_name;
public OptVillagersRadius() {
Config config = VillagerOptimizer.getConfiguration();
@ -36,6 +39,12 @@ 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,
"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,
"Whether to overwrite the previous name or not.");
this.optimizeName = MiniMessage.miniMessage().deserialize(config.getString("optimization-methods.commands.optimizevillagers.name-villager.name", "<gray>Optimize",
"The MiniMessage formatted name to give optimized villagers."));
}
@Override
@ -89,6 +98,16 @@ public class OptVillagersRadius implements VillagerOptimizerCommand, TabComplete
if (wVillager.canOptimize(cooldown)) {
wVillager.setOptimization(OptimizationType.COMMAND);
wVillager.saveOptimizeTime();
if (shouldRename) {
if (overwrite_name) {
villager.customName(optimizeName);
} else {
if (villager.customName() == null)
villager.customName(optimizeName);
}
}
successCount++;
} else {
failCount++;

View File

@ -9,7 +9,9 @@ import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
import me.xginko.villageroptimizer.utils.CommonUtil;
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 org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -31,9 +33,10 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener {
private final VillagerCache villagerCache;
private final HashSet<Material> blocks_that_disable = new HashSet<>(4);
private final Component optimizeName;
private final long cooldown;
private final double search_radius;
private final boolean onlyWhileSneaking, shouldLog, shouldNotifyPlayer;
private final boolean onlyWhileSneaking, shouldRename, overwrite_name, shouldLog, shouldNotifyPlayer;
public OptimizeByBlock() {
shouldEnable();
@ -63,6 +66,12 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener {
"Only optimize/unoptimize by workstation when player is sneaking during place or break.");
this.shouldNotifyPlayer = config.getBoolean("optimization-methods.block-optimization.notify-player", true,
"Sends players a message when they successfully optimized or unoptimized a villager.");
this.shouldRename = config.getBoolean("optimization-methods.block-optimization.rename-optimized-villagers.enable", true,
"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", "<gray>Optimize",
"The MiniMessage formatted name to give optimized villagers."));
this.shouldLog = config.getBoolean("optimization-methods.block-optimization.log", false);
}
@ -114,6 +123,16 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener {
if (closestOptimizableVillager.canOptimize(cooldown) || player.hasPermission(Permissions.Bypass.BLOCK_COOLDOWN.get())) {
closestOptimizableVillager.setOptimization(OptimizationType.BLOCK);
closestOptimizableVillager.saveOptimizeTime();
if (shouldRename) {
if (overwrite_name) {
closestOptimizableVillager.villager().customName(optimizeName);
} else {
Villager villager = closestOptimizableVillager.villager();
if (villager.customName() == null) villager.customName(optimizeName);
}
}
if (shouldNotifyPlayer) {
final TextReplacementConfig vilProfession = TextReplacementConfig.builder()
.matchLiteral("%vil_profession%")

View File

@ -8,7 +8,9 @@ import me.xginko.villageroptimizer.enums.OptimizationType;
import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
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 org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -26,9 +28,10 @@ import org.bukkit.event.block.BlockPlaceEvent;
public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener {
private final VillagerCache villagerCache;
private final Component optimizeName;
private final long cooldown;
private final double search_radius;
private final boolean onlyWhileSneaking, shouldLog, shouldNotifyPlayer;
private final boolean onlyWhileSneaking, shouldRename, overwrite_name, shouldLog, shouldNotifyPlayer;
public OptimizeByWorkstation() {
shouldEnable();
@ -47,6 +50,12 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener
"Only optimize/unoptimize by workstation when player is sneaking during place or break");
this.shouldNotifyPlayer = config.getBoolean("optimization-methods.workstation-optimization.notify-player", true,
"Sends players a message when they successfully optimized a villager.");
this.shouldRename = config.getBoolean("optimization-methods.workstation-optimization.rename-optimized-villagers.enable", true,
"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", "<gray>Optimize",
"The MiniMessage formatted name to give optimized villagers."));
this.shouldLog = config.getBoolean("optimization-methods.workstation-optimization.log", false);
}
@ -98,6 +107,16 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener
if (closestOptimizableVillager.canOptimize(cooldown) || player.hasPermission(Permissions.Bypass.WORKSTATION_COOLDOWN.get())) {
closestOptimizableVillager.setOptimization(OptimizationType.WORKSTATION);
closestOptimizableVillager.saveOptimizeTime();
if (shouldRename) {
if (overwrite_name) {
closestOptimizableVillager.villager().customName(optimizeName);
} else {
Villager villager = closestOptimizableVillager.villager();
if (villager.customName() == null) villager.customName(optimizeName);
}
}
if (shouldNotifyPlayer) {
final TextReplacementConfig vilProfession = TextReplacementConfig.builder()
.matchLiteral("%vil_profession%")