more fitting refactor

This commit is contained in:
xGinko 2023-09-12 10:58:44 +02:00
parent 5ceb1b7484
commit dd85eaf013
14 changed files with 71 additions and 72 deletions

View File

@ -1,8 +1,7 @@
package me.xginko.villageroptimizer.cache;
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.Bukkit;
import org.bukkit.entity.Villager;
import org.jetbrains.annotations.NotNull;
@ -12,11 +11,11 @@ import java.time.Duration;
import java.util.UUID;
import java.util.concurrent.ConcurrentMap;
public class VillagerManager {
public final class CachedVillagers {
private final Cache<UUID, WrappedVillager> villagerCache;
private final @NotNull Cache<UUID, WrappedVillager> villagerCache;
public VillagerManager(long expireAfterWriteSeconds) {
CachedVillagers(long expireAfterWriteSeconds) {
this.villagerCache = Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(expireAfterWriteSeconds)).build();
}

View File

@ -1,6 +1,5 @@
package me.xginko.villageroptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.config.LanguageCache;
@ -32,7 +31,7 @@ public final class VillagerOptimizer extends JavaPlugin {
private static VillagerOptimizer instance;
private static HashMap<String, LanguageCache> languageCacheMap;
private static VillagerManager villagerManager;
private static CachedVillagers cachedVillagers;
private static Config config;
private static Logger logger;
@ -75,8 +74,8 @@ public final class VillagerOptimizer extends JavaPlugin {
public static VillagerOptimizer getInstance() {
return instance;
}
public static VillagerManager getVillagerManager() {
return villagerManager;
public static CachedVillagers getCachedVillagers() {
return cachedVillagers;
}
public static Config getConfiguration() {
return config;
@ -97,7 +96,7 @@ public final class VillagerOptimizer extends JavaPlugin {
private void reloadConfiguration() {
try {
config = new Config();
villagerManager = new VillagerManager(config.cache_keep_time_seconds);
cachedVillagers = new CachedVillagers(config.cache_keep_time_seconds);
VillagerOptimizerModule.reloadModules();
config.saveConfig();
} catch (Exception e) {

View File

@ -1,6 +1,5 @@
package me.xginko.villageroptimizer.models;
package me.xginko.villageroptimizer;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.enums.Keys;
import me.xginko.villageroptimizer.enums.OptimizationType;
import org.bukkit.entity.Villager;
@ -13,7 +12,7 @@ public final class WrappedVillager {
private final @NotNull Villager villager;
private final @NotNull PersistentDataContainer dataContainer;
public WrappedVillager(@NotNull Villager villager) {
WrappedVillager(@NotNull Villager villager) {
this.villager = villager;
this.dataContainer = this.villager.getPersistentDataContainer();
}

View File

@ -1,11 +1,11 @@
package me.xginko.villageroptimizer.commands.optimizevillagers;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand;
import me.xginko.villageroptimizer.enums.OptimizationType;
import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.WrappedVillager;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig;
import net.kyori.adventure.text.format.NamedTextColor;
@ -56,7 +56,7 @@ public class OptVillagersRadius implements VillagerOptimizerCommand, TabComplete
try {
int specifiedRadius = Integer.parseInt(args[0]) / 2;
VillagerManager villagerManager = VillagerOptimizer.getVillagerManager();
CachedVillagers cachedVillagers = VillagerOptimizer.getCachedVillagers();
int successCount = 0;
int failCount = 0;
@ -66,7 +66,7 @@ public class OptVillagersRadius implements VillagerOptimizerCommand, TabComplete
Villager.Profession profession = villager.getProfession();
if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue;
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
WrappedVillager wVillager = cachedVillagers.getOrAdd(villager);
if (!wVillager.isOptimized()) {
wVillager.setOptimization(OptimizationType.COMMAND);

View File

@ -1,11 +1,11 @@
package me.xginko.villageroptimizer.commands.unoptimizevillagers;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand;
import me.xginko.villageroptimizer.enums.OptimizationType;
import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.WrappedVillager;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig;
import net.kyori.adventure.text.format.NamedTextColor;
@ -47,7 +47,7 @@ public class UnOptVillagersRadius implements VillagerOptimizerCommand {
try {
int specifiedRadius = Integer.parseInt(args[0]) / 2;
VillagerManager villagerManager = VillagerOptimizer.getVillagerManager();
CachedVillagers cachedVillagers = VillagerOptimizer.getCachedVillagers();
int successCount = 0;
for (Entity entity : player.getNearbyEntities(specifiedRadius, specifiedRadius, specifiedRadius)) {
@ -56,7 +56,7 @@ public class UnOptVillagersRadius implements VillagerOptimizerCommand {
Villager.Profession profession = villager.getProfession();
if (profession.equals(Villager.Profession.NITWIT) || profession.equals(Villager.Profession.NONE)) continue;
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
WrappedVillager wVillager = cachedVillagers.getOrAdd(villager);
if (wVillager.isOptimized()) {
wVillager.setOptimization(OptimizationType.OFF);

View File

@ -3,9 +3,9 @@ package me.xginko.villageroptimizer.modules;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.enums.OptimizationType;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.WrappedVillager;
import me.xginko.villageroptimizer.utils.CommonUtils;
import me.xginko.villageroptimizer.utils.LogUtils;
import net.kyori.adventure.text.TextReplacementConfig;
@ -34,7 +34,7 @@ public class BlockOptimization implements VillagerOptimizerModule, Listener {
* TODO: Think of better logic than just checking under the villagers feet for block
* */
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private final HashSet<Material> blocks_that_disable = new HashSet<>(4);
private final boolean shouldLog, shouldNotifyPlayer;
private final int maxVillagers;
@ -42,7 +42,7 @@ public class BlockOptimization implements VillagerOptimizerModule, Listener {
protected BlockOptimization() {
shouldEnable();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("optimization-methods.block-optimization.enable", """
When enabled, villagers standing on the configured specific blocks will become optimized once a\s
@ -97,7 +97,7 @@ public class BlockOptimization implements VillagerOptimizerModule, Listener {
if (counter >= maxVillagers) return;
if (!entity.getType().equals(EntityType.VILLAGER)) continue;
WrappedVillager wVillager = villagerManager.getOrAdd((Villager) entity);
WrappedVillager wVillager = cachedVillagers.getOrAdd((Villager) entity);
final OptimizationType type = wVillager.getOptimizationType();
if (!type.equals(OptimizationType.OFF) && !type.equals(OptimizationType.COMMAND)) continue;
@ -137,7 +137,7 @@ public class BlockOptimization implements VillagerOptimizerModule, Listener {
for (Entity entity : broken.getRelative(BlockFace.UP).getLocation().getNearbyEntities(0.5,1,0.5)) {
if (!entity.getType().equals(EntityType.VILLAGER)) continue;
WrappedVillager wVillager = villagerManager.getOrAdd((Villager) entity);
WrappedVillager wVillager = cachedVillagers.getOrAdd((Villager) entity);
if (wVillager.getOptimizationType().equals(OptimizationType.BLOCK)) {
if (counter >= maxVillagers) return;
@ -165,7 +165,7 @@ public class BlockOptimization implements VillagerOptimizerModule, Listener {
Player player = event.getPlayer();
if (!player.hasPermission(Permissions.Optimize.BLOCK.get())) return;
WrappedVillager wVillager = villagerManager.getOrAdd((Villager) interacted);
WrappedVillager wVillager = cachedVillagers.getOrAdd((Villager) interacted);
final Location entityLegs = interacted.getLocation();
if (

View File

@ -1,9 +1,9 @@
package me.xginko.villageroptimizer.modules;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.WrappedVillager;
import me.xginko.villageroptimizer.utils.CommonUtils;
import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.entity.Player;
@ -20,14 +20,14 @@ import org.bukkit.potion.PotionEffectType;
public class LevelVillagers implements VillagerOptimizerModule, Listener {
private final VillagerOptimizer plugin;
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private final boolean shouldNotify;
private final long cooldown;
public LevelVillagers() {
shouldEnable();
this.plugin = VillagerOptimizer.getInstance();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("gameplay.villager-leveling.enable", """
This is needed to allow optimized villagers to level up.\s
@ -61,13 +61,15 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
event.getInventory().getType().equals(InventoryType.MERCHANT)
&& event.getInventory().getHolder() instanceof Villager villager
) {
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
WrappedVillager wVillager = cachedVillagers.getOrAdd(villager);
if (!wVillager.isOptimized()) return;
if (wVillager.canLevelUp(cooldown)) {
if (wVillager.calculateLevel() > villager.getVillagerLevel()) {
villager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, (int) (20 + (cooldown / 50L)), 120, false, false));
villager.getScheduler().run(plugin, enableAI -> villager.setAware(true), null);
villager.getScheduler().run(plugin, enableAI -> {
villager.setAware(true);
villager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, (int) (20 + (cooldown / 50L)), 120, false, false));
}, null);
villager.getScheduler().runDelayed(plugin, disableAI -> {
villager.setAware(false);
wVillager.saveLastLevelUp();

View File

@ -2,11 +2,11 @@ package me.xginko.villageroptimizer.modules;
import io.papermc.paper.event.player.PlayerNameEntityEvent;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.enums.OptimizationType;
import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.WrappedVillager;
import me.xginko.villageroptimizer.utils.CommonUtils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig;
@ -26,14 +26,14 @@ import java.util.List;
public class NametagOptimization implements VillagerOptimizerModule, Listener {
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private final HashSet<String> nametags = new HashSet<>(4);
private final boolean shouldLog, shouldNotifyPlayer, consumeNametag;
private final long cooldown;
protected NametagOptimization() {
shouldEnable();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("optimization-methods.nametag-optimization.enable", """
Enable optimization by naming villagers to one of the names configured below.\s
@ -75,7 +75,7 @@ public class NametagOptimization implements VillagerOptimizerModule, Listener {
if (name == null) return;
final String nameTag = PlainTextComponentSerializer.plainText().serialize(name);
WrappedVillager wVillager = villagerManager.getOrAdd((Villager) event.getEntity());
WrappedVillager wVillager = cachedVillagers.getOrAdd((Villager) event.getEntity());
if (nametags.contains(nameTag.toLowerCase())) {
if (wVillager.isOptimized()) return;

View File

@ -1,7 +1,7 @@
package me.xginko.villageroptimizer.modules;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.enums.Permissions;
import org.bukkit.entity.Player;
@ -16,12 +16,12 @@ import org.bukkit.event.inventory.TradeSelectEvent;
public class PreventUnoptimizedTrading implements VillagerOptimizerModule, Listener {
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private final boolean notifyPlayer;
protected PreventUnoptimizedTrading() {
shouldEnable();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("gameplay.prevent-trading-with-unoptimized.enable", """
Will prevent players from selecting and using trades of unoptimized villagers.\s
@ -54,7 +54,7 @@ public class PreventUnoptimizedTrading implements VillagerOptimizerModule, Liste
if (
event.getInventory().getType().equals(InventoryType.MERCHANT)
&& event.getInventory().getHolder() instanceof Villager villager
&& !villagerManager.getOrAdd(villager).isOptimized()
&& !cachedVillagers.getOrAdd(villager).isOptimized()
) {
event.setCancelled(true);
if (notifyPlayer)
@ -69,7 +69,7 @@ public class PreventUnoptimizedTrading implements VillagerOptimizerModule, Liste
if (
event.getInventory().getType().equals(InventoryType.MERCHANT)
&& event.getInventory().getHolder() instanceof Villager villager
&& !villagerManager.getOrAdd(villager).isOptimized()
&& !cachedVillagers.getOrAdd(villager).isOptimized()
) {
event.setCancelled(true);
if (notifyPlayer)

View File

@ -2,7 +2,7 @@ package me.xginko.villageroptimizer.modules;
import io.papermc.paper.event.entity.EntityPushedByEntityAttackEvent;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.config.Config;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@ -17,12 +17,12 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
public class PreventVillagerDamage implements VillagerOptimizerModule, Listener {
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private final boolean block, player, mob, other, push;
protected PreventVillagerDamage() {
shouldEnable();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("gameplay.prevent-damage.enable",
"Configure what kind of damage you want to cancel for optimized villagers here.");
@ -58,7 +58,7 @@ public class PreventVillagerDamage implements VillagerOptimizerModule, Listener
private void onDamageReceive(EntityDamageByEntityEvent event) {
if (
event.getEntityType().equals(EntityType.VILLAGER)
&& villagerManager.getOrAdd((Villager) event.getEntity()).isOptimized()
&& cachedVillagers.getOrAdd((Villager) event.getEntity()).isOptimized()
) {
Entity damager = event.getDamager();
if (damager.getType().equals(EntityType.PLAYER)) {
@ -82,7 +82,7 @@ public class PreventVillagerDamage implements VillagerOptimizerModule, Listener
if (
block
&& event.getEntityType().equals(EntityType.VILLAGER)
&& villagerManager.getOrAdd((Villager) event.getEntity()).isOptimized()
&& cachedVillagers.getOrAdd((Villager) event.getEntity()).isOptimized()
) {
event.setCancelled(true);
}
@ -93,7 +93,7 @@ public class PreventVillagerDamage implements VillagerOptimizerModule, Listener
if (
push
&& event.getEntityType().equals(EntityType.VILLAGER)
&& villagerManager.getOrAdd((Villager) event.getEntity()).isOptimized()
&& cachedVillagers.getOrAdd((Villager) event.getEntity()).isOptimized()
) {
event.setCancelled(true);
}

View File

@ -2,7 +2,7 @@ package me.xginko.villageroptimizer.modules;
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Mob;
@ -16,10 +16,10 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
public class PreventVillagerTargetting implements VillagerOptimizerModule, Listener {
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
protected PreventVillagerTargetting() {
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
}
@Override
@ -46,7 +46,7 @@ public class PreventVillagerTargetting implements VillagerOptimizerModule, Liste
if (
target != null
&& target.getType().equals(EntityType.VILLAGER)
&& villagerManager.getOrAdd((Villager) target).isOptimized()
&& cachedVillagers.getOrAdd((Villager) target).isOptimized()
) {
event.setCancelled(true);
}
@ -58,7 +58,7 @@ public class PreventVillagerTargetting implements VillagerOptimizerModule, Liste
if (
target != null
&& target.getType().equals(EntityType.VILLAGER)
&& villagerManager.getOrAdd((Villager) target).isOptimized()
&& cachedVillagers.getOrAdd((Villager) target).isOptimized()
) {
event.setCancelled(true);
}
@ -69,7 +69,7 @@ public class PreventVillagerTargetting implements VillagerOptimizerModule, Liste
if (
event.getEntityType().equals(EntityType.VILLAGER)
&& event.getDamager() instanceof Mob attacker
&& villagerManager.getOrAdd((Villager) event.getEntity()).isOptimized()
&& cachedVillagers.getOrAdd((Villager) event.getEntity()).isOptimized()
) {
attacker.setTarget(null);
}

View File

@ -1,10 +1,10 @@
package me.xginko.villageroptimizer.modules;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.WrappedVillager;
import me.xginko.villageroptimizer.utils.CommonUtils;
import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.entity.EntityType;
@ -22,13 +22,13 @@ public class RestockTrades implements VillagerOptimizerModule, Listener {
* TODO: Disable notify message for cooldown bypassers
* */
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private final long restock_delay_millis;
private final boolean shouldLog, notifyPlayer;
protected RestockTrades() {
shouldEnable();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("gameplay.trade-restocking.enable", """
This is for automatic restocking of trades for optimized villagers. Optimized Villagers\s
@ -60,7 +60,7 @@ public class RestockTrades implements VillagerOptimizerModule, Listener {
private void onInteract(PlayerInteractEntityEvent event) {
if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return;
WrappedVillager wVillager = villagerManager.getOrAdd((Villager) event.getRightClicked());
WrappedVillager wVillager = cachedVillagers.getOrAdd((Villager) event.getRightClicked());
if (!wVillager.isOptimized()) return;
Player player = event.getPlayer();

View File

@ -2,7 +2,7 @@ package me.xginko.villageroptimizer.modules;
import io.papermc.paper.threadedregions.scheduler.ScheduledTask;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.utils.LogUtils;
import org.bukkit.Chunk;
@ -28,7 +28,7 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
* */
private final VillagerOptimizer plugin;
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private ScheduledTask scheduledTask;
private final List<Villager.Profession> removalPriority = new ArrayList<>(16);
private final int global_max_villagers_per_chunk, max_unoptimized_per_chunk, max_optimized_per_chunk;
@ -38,7 +38,7 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
protected VillagerChunkLimit() {
shouldEnable();
this.plugin = VillagerOptimizer.getInstance();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("villager-chunk-limit.enable", """
Checks chunks for too many villagers and removes excess villagers based on priority.\s
@ -138,6 +138,6 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
private int getProfessionPriority(Villager villager) {
final Villager.Profession profession = villager.getProfession();
return removalPriority.contains(profession) && !villagerManager.getOrAdd(villager).isOptimized() ? removalPriority.indexOf(profession) : Integer.MAX_VALUE;
return removalPriority.contains(profession) && !cachedVillagers.getOrAdd(villager).isOptimized() ? removalPriority.indexOf(profession) : Integer.MAX_VALUE;
}
}

View File

@ -1,11 +1,11 @@
package me.xginko.villageroptimizer.modules;
import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.CachedVillagers;
import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.enums.OptimizationType;
import me.xginko.villageroptimizer.enums.Permissions;
import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.WrappedVillager;
import me.xginko.villageroptimizer.utils.CommonUtils;
import me.xginko.villageroptimizer.utils.LogUtils;
import net.kyori.adventure.text.TextReplacementConfig;
@ -31,7 +31,7 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
* TODO: Make placed workstation villager profession related.
* */
private final VillagerManager villagerManager;
private final CachedVillagers cachedVillagers;
private final HashSet<Material> workstations_that_disable = new HashSet<>(14);
private final boolean shouldLog, shouldNotifyPlayer;
private final long cooldown;
@ -39,7 +39,7 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
protected WorkstationOptimization() {
shouldEnable();
this.villagerManager = VillagerOptimizer.getVillagerManager();
this.cachedVillagers = VillagerOptimizer.getCachedVillagers();
Config config = VillagerOptimizer.getConfiguration();
config.addComment("optimization-methods.workstation-optimization.enable", """
When enabled, villagers near a configured radius to a workstation specific to your config\s
@ -100,7 +100,7 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
final Villager.Profession profession = villager.getProfession();
if (profession.equals(Villager.Profession.NONE) || profession.equals(Villager.Profession.NITWIT)) continue;
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
WrappedVillager wVillager = cachedVillagers.getOrAdd(villager);
final double distance = entity.getLocation().distance(workstationLoc);
if (distance < closestDistance) {
@ -153,7 +153,7 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
if (!entity.getType().equals(EntityType.VILLAGER)) continue;
Villager villager = (Villager) entity;
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
WrappedVillager wVillager = cachedVillagers.getOrAdd(villager);
final double distance = entity.getLocation().distance(workstationLoc);
if (distance < closestDistance) {