diff --git a/src/main/java/me/xginko/villageroptimizer/VillagerCache.java b/src/main/java/me/xginko/villageroptimizer/VillagerCache.java index 4486799..203929d 100644 --- a/src/main/java/me/xginko/villageroptimizer/VillagerCache.java +++ b/src/main/java/me/xginko/villageroptimizer/VillagerCache.java @@ -3,6 +3,7 @@ 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; import org.jetbrains.annotations.Nullable; @@ -22,14 +23,13 @@ public class VillagerCache { } public @Nullable WrappedVillager get(@NotNull UUID uuid) { - return villagerCache.getIfPresent(uuid); + WrappedVillager wrappedVillager = villagerCache.getIfPresent(uuid); + return wrappedVillager == null && Bukkit.getEntity(uuid) instanceof Villager villager ? add(villager) : wrappedVillager; } - public @NotNull WrappedVillager getOrAddIfAbsent(@NotNull Villager villager) { + public @NotNull WrappedVillager get(@NotNull Villager villager) { WrappedVillager wrappedVillager = villagerCache.getIfPresent(villager.getUniqueId()); - if (wrappedVillager == null) wrappedVillager = new WrappedVillager(villager); - this.villagerCache.put(villager.getUniqueId(), wrappedVillager); // refresh cache - return wrappedVillager; + return wrappedVillager == null ? add(new WrappedVillager(villager)) : add(wrappedVillager); } public @NotNull WrappedVillager add(@NotNull WrappedVillager villager) { @@ -38,9 +38,7 @@ public class VillagerCache { } public @NotNull WrappedVillager add(@NotNull Villager villager) { - WrappedVillager wrapped = new WrappedVillager(villager); - villagerCache.put(villager.getUniqueId(), wrapped); - return wrapped; + return add(new WrappedVillager(villager)); } public boolean contains(@NotNull WrappedVillager villager) { diff --git a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java index f36fa5b..82fc374 100644 --- a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java +++ b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java @@ -101,7 +101,7 @@ public final class VillagerOptimizer extends JavaPlugin { return OptimizationType.WORKSTATION; } } - return villagerCache.getOrAddIfAbsent(villager).getOptimizationType(); + return villagerCache.get(villager).getOptimizationType(); } public void reloadPlugin() { diff --git a/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java b/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java index 5de3b33..dcd65b9 100644 --- a/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java +++ b/src/main/java/me/xginko/villageroptimizer/models/WrappedVillager.java @@ -10,7 +10,7 @@ import org.bukkit.persistence.PersistentDataType; public record WrappedVillager(Villager villager) { public static WrappedVillager fromVillager(Villager villager) { - return VillagerOptimizer.getVillagerCache().getOrAddIfAbsent(villager); + return VillagerOptimizer.getVillagerCache().get(villager); } public boolean isOptimized() {