From f6a91e038ad2df1a6e6973f23c4d51cc42e228b7 Mon Sep 17 00:00:00 2001 From: xGinko Date: Sun, 1 Oct 2023 12:18:58 +0200 Subject: [PATCH] improve plugin renaming logic --- .../villageroptimizer/WrappedVillager.java | 34 ++++--------------- .../modules/RenameOptimizedVillagers.java | 30 ++++++++++++---- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java b/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java index 0e54855..6294ad6 100644 --- a/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java +++ b/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java @@ -10,8 +10,6 @@ import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Objects; - public final class WrappedVillager { private final @NotNull Villager villager; @@ -180,33 +178,15 @@ public final class WrappedVillager { return dataContainer.has(Keys.LAST_LEVELUP.key(), PersistentDataType.LONG) ? (villager.getWorld().getFullTime() - (dataContainer.get(Keys.LAST_LEVELUP.key(), PersistentDataType.LONG) + cooldown_millis)) : cooldown_millis; } - public void rename(final @Nullable Component newName, final boolean replace_existing_name) { - if (replace_existing_name) { - villager.customName(newName); - if (newName == null) dataContainer.remove(Keys.LAST_OPTIMIZE_NAME.key()); - else saveOptimizeName(newName); - } else { - Component currentName = villager.customName(); - if (currentName == null) { - villager.customName(newName); - if (newName == null) dataContainer.remove(Keys.LAST_OPTIMIZE_NAME.key()); - else saveOptimizeName(newName); - } else { - Component lastName = getOptimizeName(); - if (Objects.equals(currentName, lastName)) { - villager.customName(newName); - if (newName == null) dataContainer.remove(Keys.LAST_OPTIMIZE_NAME.key()); - else saveOptimizeName(newName); - } - } - } - } - - public void saveOptimizeName(final Component customName) { + public void memorizeName(final Component customName) { dataContainer.set(Keys.LAST_OPTIMIZE_NAME.key(), PersistentDataType.STRING, MiniMessage.miniMessage().serialize(customName)); } - public @Nullable Component getOptimizeName() { + public @Nullable Component getMemorizedName() { return dataContainer.has(Keys.LAST_OPTIMIZE_NAME.key()) ? MiniMessage.miniMessage().deserialize(dataContainer.get(Keys.LAST_OPTIMIZE_NAME.key(), PersistentDataType.STRING)) : null; } -} + + public void forgetName() { + dataContainer.remove(Keys.LAST_OPTIMIZE_NAME.key()); + } +} \ No newline at end of file diff --git a/src/main/java/me/xginko/villageroptimizer/modules/RenameOptimizedVillagers.java b/src/main/java/me/xginko/villageroptimizer/modules/RenameOptimizedVillagers.java index be0e856..d14f6b4 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/RenameOptimizedVillagers.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/RenameOptimizedVillagers.java @@ -3,11 +3,11 @@ package me.xginko.villageroptimizer.modules; 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.events.VillagerOptimizeEvent; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; @@ -50,18 +50,34 @@ public class RenameOptimizedVillagers implements VillagerOptimizerModule, Listen @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onOptimize(VillagerOptimizeEvent event) { WrappedVillager wVillager = event.getWrappedVillager(); - wVillager.villager().getScheduler().runDelayed(plugin, rename -> { - wVillager.rename(optimized_name, overwrite_previous_name); + Villager villager = wVillager.villager(); + + villager.getScheduler().runDelayed(plugin, rename -> { + if (overwrite_previous_name) { + villager.customName(optimized_name); + wVillager.memorizeName(optimized_name); + } else { + final Component currentName = villager.customName(); + if (currentName == null) { + villager.customName(optimized_name); + wVillager.memorizeName(optimized_name); + } + } }, null, 10L); } @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onUnOptimize(VillagerUnoptimizeEvent event) { WrappedVillager wVillager = event.getWrappedVillager(); - if (wVillager.getOptimizationType().equals(OptimizationType.NAMETAG)) return; + Villager villager = wVillager.villager(); - wVillager.villager().getScheduler().runDelayed(plugin, rename -> { - wVillager.rename(null, overwrite_previous_name); + villager.getScheduler().runDelayed(plugin, rename -> { + final Component currentName = villager.customName(); + final Component memorizedName = wVillager.getMemorizedName(); + if (memorizedName != null) + wVillager.forgetName(); + if (currentName != null && currentName.equals(memorizedName)) + villager.customName(null); }, null, 10L); } -} +} \ No newline at end of file