improve plugin renaming logic

This commit is contained in:
xGinko 2023-10-01 12:18:58 +02:00
parent 974b738b48
commit f6a91e038a
2 changed files with 30 additions and 34 deletions

View File

@ -10,8 +10,6 @@ import org.bukkit.persistence.PersistentDataType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.util.Objects;
public final class WrappedVillager { public final class WrappedVillager {
private final @NotNull Villager villager; 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; 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) { public void memorizeName(final Component customName) {
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) {
dataContainer.set(Keys.LAST_OPTIMIZE_NAME.key(), PersistentDataType.STRING, MiniMessage.miniMessage().serialize(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; 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());
}
} }

View File

@ -3,11 +3,11 @@ package me.xginko.villageroptimizer.modules;
import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.WrappedVillager;
import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.enums.OptimizationType;
import me.xginko.villageroptimizer.events.VillagerOptimizeEvent; import me.xginko.villageroptimizer.events.VillagerOptimizeEvent;
import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.entity.Villager;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
@ -50,18 +50,34 @@ public class RenameOptimizedVillagers implements VillagerOptimizerModule, Listen
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onOptimize(VillagerOptimizeEvent event) { private void onOptimize(VillagerOptimizeEvent event) {
WrappedVillager wVillager = event.getWrappedVillager(); WrappedVillager wVillager = event.getWrappedVillager();
wVillager.villager().getScheduler().runDelayed(plugin, rename -> { Villager villager = wVillager.villager();
wVillager.rename(optimized_name, overwrite_previous_name);
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); }, null, 10L);
} }
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
private void onUnOptimize(VillagerUnoptimizeEvent event) { private void onUnOptimize(VillagerUnoptimizeEvent event) {
WrappedVillager wVillager = event.getWrappedVillager(); WrappedVillager wVillager = event.getWrappedVillager();
if (wVillager.getOptimizationType().equals(OptimizationType.NAMETAG)) return; Villager villager = wVillager.villager();
wVillager.villager().getScheduler().runDelayed(plugin, rename -> { villager.getScheduler().runDelayed(plugin, rename -> {
wVillager.rename(null, overwrite_previous_name); 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); }, null, 10L);
} }
} }