From 545e9d0d2088cbd272b684d111ec7379d608dd06 Mon Sep 17 00:00:00 2001 From: xGinko Date: Tue, 5 Sep 2023 11:05:30 +0200 Subject: [PATCH] more cleanup --- .../villageroptimizer/VillagerCache.java | 40 ----------- .../villageroptimizer/VillagerManager.java | 72 +++++++++++++++++++ .../villageroptimizer/VillagerOptimizer.java | 6 +- .../villageroptimizer/config/Config.java | 2 +- .../models/WrappedVillager.java | 10 --- .../utils/VillagerUtils.java | 29 -------- 6 files changed, 78 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/me/xginko/villageroptimizer/VillagerCache.java create mode 100644 src/main/java/me/xginko/villageroptimizer/VillagerManager.java delete mode 100644 src/main/java/me/xginko/villageroptimizer/utils/VillagerUtils.java diff --git a/src/main/java/me/xginko/villageroptimizer/VillagerCache.java b/src/main/java/me/xginko/villageroptimizer/VillagerCache.java deleted file mode 100644 index a7246e9..0000000 --- a/src/main/java/me/xginko/villageroptimizer/VillagerCache.java +++ /dev/null @@ -1,40 +0,0 @@ -package me.xginko.villageroptimizer; - -import com.github.benmanes.caffeine.cache.Cache; -import com.github.benmanes.caffeine.cache.Caffeine; -import me.xginko.villageroptimizer.models.WrappedVillager; -import org.bukkit.World; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Villager; -import org.bukkit.plugin.java.JavaPlugin; - -import java.time.Duration; -import java.util.Map; -import java.util.UUID; - -public class VillagerCache { - private final Cache villagerCache = Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(30)).build(); - - public VillagerCache(JavaPlugin plugin) { - plugin.getServer().getGlobalRegionScheduler().run(plugin, populateCache -> { - for (World world : plugin.getServer().getWorlds()) { - for (Entity entity : world.getEntities()) { - if (entity instanceof Villager villager) { - this.villagerCache.put(villager.getUniqueId(), new WrappedVillager(villager)); - } - } - } - }); - } - - public WrappedVillager getVillager(Villager villager) { - WrappedVillager wrappedVillager = villagerCache.getIfPresent(villager.getUniqueId()); - if (wrappedVillager == null) wrappedVillager = new WrappedVillager(villager); - this.villagerCache.put(villager.getUniqueId(), wrappedVillager); - return wrappedVillager; - } - - public Map get() { - return this.villagerCache.asMap(); - } -} diff --git a/src/main/java/me/xginko/villageroptimizer/VillagerManager.java b/src/main/java/me/xginko/villageroptimizer/VillagerManager.java new file mode 100644 index 0000000..059d437 --- /dev/null +++ b/src/main/java/me/xginko/villageroptimizer/VillagerManager.java @@ -0,0 +1,72 @@ +package me.xginko.villageroptimizer; + +import com.github.benmanes.caffeine.cache.Cache; +import com.github.benmanes.caffeine.cache.Caffeine; +import me.xginko.villageroptimizer.config.Config; +import me.xginko.villageroptimizer.enums.OptimizationType; +import me.xginko.villageroptimizer.models.WrappedVillager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Villager; +import org.bukkit.entity.memory.MemoryKey; +import org.bukkit.plugin.java.JavaPlugin; + +import java.time.Duration; +import java.util.Collection; +import java.util.UUID; + +public class VillagerManager { + + private final Cache villagerCache = Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(30)).build(); + private final Config config; + + protected VillagerManager(JavaPlugin plugin) { + this.config = VillagerOptimizer.getConfiguration(); + plugin.getServer().getGlobalRegionScheduler().run(plugin, reCache -> { + for (World world : plugin.getServer().getWorlds()) { + for (Villager villager : world.getEntitiesByClass(Villager.class)) { + this.villagerCache.put(villager.getUniqueId(), new WrappedVillager(villager)); + } + } + }); + } + + public Collection getCachedVillagers() { + return this.villagerCache.asMap().values(); + } + + public WrappedVillager wrap(Villager villager) { + WrappedVillager wrappedVillager = villagerCache.getIfPresent(villager.getUniqueId()); + if (wrappedVillager == null) wrappedVillager = new WrappedVillager(villager); + this.villagerCache.put(villager.getUniqueId(), wrappedVillager); + return wrappedVillager; + } + + public OptimizationType computeOptimization(Villager villager) { + Component nameTag = villager.customName(); + if ( + nameTag != null + && config.names_that_disable.contains(PlainTextComponentSerializer.plainText().serialize(nameTag).toLowerCase()) + ) { + // Optimized by nametag + + } + + if (config.blocks_that_disable.contains(villager.getLocation().getBlock().getRelative(BlockFace.DOWN).getType())) { + // Optimized by Block + + } + + final Location jobSite = villager.getMemory(MemoryKey.JOB_SITE); + if ( + jobSite != null + && config.workstations_that_disable.contains(jobSite.getBlock().getType()) + ) { + // Optimized by Workstation + + } + } +} diff --git a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java index 9b74450..70e863c 100644 --- a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java +++ b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java @@ -24,6 +24,7 @@ public final class VillagerOptimizer extends JavaPlugin { private static Logger logger; private static Config config; private static HashMap languageCacheMap; + private static VillagerManager villagerManager; @Override public void onEnable() { @@ -68,7 +69,7 @@ public final class VillagerOptimizer extends JavaPlugin { public void reloadPlugin() { reloadLang(); reloadConfiguration(); - + villagerManager = new VillagerManager(this); } private void reloadConfiguration() { @@ -143,4 +144,7 @@ public final class VillagerOptimizer extends JavaPlugin { public static Logger getLog() { return logger; } + public static VillagerManager getVillagerManager() { + return villagerManager; + } } diff --git a/src/main/java/me/xginko/villageroptimizer/config/Config.java b/src/main/java/me/xginko/villageroptimizer/config/Config.java index ebe92da..45edb0c 100644 --- a/src/main/java/me/xginko/villageroptimizer/config/Config.java +++ b/src/main/java/me/xginko/villageroptimizer/config/Config.java @@ -33,7 +33,7 @@ public class Config { // AI-Disabling - this.names_that_disable.addAll(getList("ai-disabling.names-that-disable", List.of("Optimize", "DisableAI"))); + this.names_that_disable.addAll(getList("ai-disabling.names-that-disable", List.of("Optimize", "DisableAI")).stream().map(String::toLowerCase).toList()); getList("ai-disabling.blocks-that-disable", List.of("EMERALD_BLOCK", "COBBLESTONE")).forEach(configuredMaterial -> { try { Material disableBlock = Material.valueOf(configuredMaterial); diff --git a/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java b/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java index 69bb512..fdd1bd1 100644 --- a/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java +++ b/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java @@ -8,16 +8,6 @@ import org.bukkit.persistence.PersistentDataType; public record WrappedVillager(Villager villager) { - public int level() { - // Villager Level depending on their XP (source: https://minecraft.fandom.com/wiki/Trading#Mechanics) - final int experience = villager.getVillagerExperience(); - if (experience >= 250) return 5; - if (experience >= 150) return 4; - if (experience >= 70) return 3; - if (experience >= 10) return 2; - return 1; - } - public boolean isOptimized() { return villager.getPersistentDataContainer().has(NamespacedKeys.OPTIMIZED.key()); } diff --git a/src/main/java/me/xginko/villageroptimizer/utils/VillagerUtils.java b/src/main/java/me/xginko/villageroptimizer/utils/VillagerUtils.java deleted file mode 100644 index 2a65b25..0000000 --- a/src/main/java/me/xginko/villageroptimizer/utils/VillagerUtils.java +++ /dev/null @@ -1,29 +0,0 @@ -package me.xginko.villageroptimizer.utils; - -import me.xginko.villageroptimizer.VillagerOptimizer; -import me.xginko.villageroptimizer.models.WrappedVillager; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; -import org.bukkit.block.BlockFace; -import org.bukkit.entity.Villager; - -public class VillagerUtils { - - public static boolean shouldDisable(Villager villager) { - // Check nametag - Component nameTag = villager.customName(); - if (nameTag != null) { - if (VillagerOptimizer.getConfiguration().names_that_disable.contains(PlainTextComponentSerializer.plainText().serialize(nameTag))) { - return true; - } - } - - // Check block below - if (VillagerOptimizer.getConfiguration().blocks_that_disable.contains(villager.getLocation().getBlock().getRelative(BlockFace.DOWN).getType())) { - return true; - } - - // Check Workstation - return new WrappedVillager(villager).isOptimized(); - } -}