remove from cache on death
This commit is contained in:
parent
159c03f3cd
commit
b0d1c42955
@ -192,6 +192,7 @@ public final class VillagerOptimizer extends JavaPlugin {
|
|||||||
config = new Config();
|
config = new Config();
|
||||||
if (wrapperCache != null) wrapperCache.disable();
|
if (wrapperCache != null) wrapperCache.disable();
|
||||||
wrapperCache = new WrapperCache(config.cache_keep_time);
|
wrapperCache = new WrapperCache(config.cache_keep_time);
|
||||||
|
wrapperCache.enable();
|
||||||
VillagerOptimizerCommand.reloadCommands();
|
VillagerOptimizerCommand.reloadCommands();
|
||||||
VillagerOptimizerModule.reloadModules();
|
VillagerOptimizerModule.reloadModules();
|
||||||
config.saveConfig();
|
config.saveConfig();
|
||||||
|
@ -3,14 +3,20 @@ package me.xginko.villageroptimizer;
|
|||||||
import com.github.benmanes.caffeine.cache.Cache;
|
import com.github.benmanes.caffeine.cache.Cache;
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
import me.xginko.villageroptimizer.utils.Disableable;
|
import me.xginko.villageroptimizer.utils.Disableable;
|
||||||
|
import me.xginko.villageroptimizer.utils.Enableable;
|
||||||
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public final class WrapperCache implements Disableable {
|
public final class WrapperCache implements Enableable, Disableable, Listener {
|
||||||
|
|
||||||
private final @NotNull Cache<UUID, WrappedVillager> wrapperCache;
|
private final @NotNull Cache<UUID, WrappedVillager> wrapperCache;
|
||||||
|
|
||||||
@ -18,12 +24,24 @@ public final class WrapperCache implements Disableable {
|
|||||||
this.wrapperCache = Caffeine.newBuilder().expireAfterWrite(cacheDuration).build();
|
this.wrapperCache = Caffeine.newBuilder().expireAfterWrite(cacheDuration).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enable() {
|
||||||
|
VillagerOptimizer plugin = VillagerOptimizer.getInstance();
|
||||||
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void disable() {
|
public void disable() {
|
||||||
|
HandlerList.unregisterAll(this);
|
||||||
this.wrapperCache.invalidateAll();
|
this.wrapperCache.invalidateAll();
|
||||||
this.wrapperCache.cleanUp();
|
this.wrapperCache.cleanUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
|
||||||
|
private void onEntityDeath(EntityDeathEvent event) {
|
||||||
|
this.wrapperCache.invalidate(event.getEntity().getUniqueId());
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("DataFlowIssue")
|
@SuppressWarnings("DataFlowIssue")
|
||||||
public @NotNull WrappedVillager get(@NotNull Villager villager) {
|
public @NotNull WrappedVillager get(@NotNull Villager villager) {
|
||||||
return this.wrapperCache.get(villager.getUniqueId(), k -> new WrappedVillager(villager));
|
return this.wrapperCache.get(villager.getUniqueId(), k -> new WrappedVillager(villager));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user