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.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());
}
}

View File

@ -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);
}
}
}