From 279fcad10a0731c42c318c3b5073d842c79bb382 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Sun, 26 Jul 2020 14:17:20 -0400 Subject: [PATCH] More fixes --- src/main/java/ninja/bytecode/iris/Iris.java | 1 + .../iris/util/ObjectResourceLoader.java | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/src/main/java/ninja/bytecode/iris/Iris.java b/src/main/java/ninja/bytecode/iris/Iris.java index 72f07f376..bef4d26a8 100644 --- a/src/main/java/ninja/bytecode/iris/Iris.java +++ b/src/main/java/ninja/bytecode/iris/Iris.java @@ -121,6 +121,7 @@ public class Iris extends JavaPlugin implements BoardProvider lines.add(ChatColor.GREEN + "Noise" + ChatColor.GRAY + ": " + Form.f((int) hits.getAverage())); lines.add(ChatColor.GREEN + "Parallax Chunks" + ChatColor.GRAY + ": " + Form.f((int) g.getParallaxMap().getLoadedChunks().size())); lines.add(ChatColor.GREEN + "Objects" + ChatColor.GRAY + ": " + Form.f(Iris.data.getObjectLoader().count())); + lines.add(ChatColor.GREEN + "Objects Nodes" + ChatColor.GRAY + ": " + Form.f(Iris.data.getObjectLoader().getTotalStorage())); lines.add(ChatColor.GREEN + "Biomes" + ChatColor.GRAY + ": " + Form.f(Iris.data.getBiomeLoader().count())); lines.add(ChatColor.GREEN + "Regions" + ChatColor.GRAY + ": " + Form.f(Iris.data.getRegionLoader().count())); lines.add(ChatColor.GREEN + "Height" + ChatColor.GRAY + ": " + (int) g.getTerrainHeight(x, z) + " (" + (int) g.getTerrainWaterHeight(x, z) + ")"); diff --git a/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java b/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java index 4cf6fce64..6f473d903 100644 --- a/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java +++ b/src/main/java/ninja/bytecode/iris/util/ObjectResourceLoader.java @@ -6,16 +6,64 @@ import org.bukkit.util.BlockVector; import ninja.bytecode.iris.Iris; import ninja.bytecode.iris.object.IrisObject; +import ninja.bytecode.shuriken.collections.KList; +import ninja.bytecode.shuriken.collections.KMap; +import ninja.bytecode.shuriken.math.M; public class ObjectResourceLoader extends ResourceLoader { private ChunkPosition parallaxSize; + private KMap useCache = new KMap<>(); public ObjectResourceLoader(File root, String folderName, String resourceTypeName) { super(root, folderName, resourceTypeName, IrisObject.class); } + public int getTotalStorage() + { + int m = 0; + + for(IrisObject i : loadCache.values()) + { + m += i.getBlocks().size(); + } + + return m; + } + + public void clean() + { + if(loadCache.size() > 15 && getTotalStorage() > 20000) + { + unloadLast(30000); + } + } + + public void unloadLast(long age) + { + KList g = useCache.sortKNumber(); + + if(!g.isEmpty()) + { + String v = g.get(0); + + if(M.ms() - useCache.get(v) > age) + { + unload(v); + } + } + } + + private void unload(String v) + { + lock.lock(); + useCache.remove(v); + loadCache.remove(v); + lock.unlock(); + Iris.info("Unloaded Object: " + v); + } + public ChunkPosition getParallaxSize() { lock.lock(); @@ -87,6 +135,7 @@ public class ObjectResourceLoader extends ResourceLoader if(loadCache.containsKey(key)) { IrisObject t = loadCache.get(key); + useCache.put(key, M.ms()); return t; } @@ -97,6 +146,7 @@ public class ObjectResourceLoader extends ResourceLoader { if(j.isFile() && j.getName().endsWith(".iob") && j.getName().split("\\Q.\\E")[0].equals(name)) { + useCache.put(key, M.ms()); return loadFile(j, key, name); } } @@ -105,6 +155,7 @@ public class ObjectResourceLoader extends ResourceLoader if(file.exists()) { + useCache.put(key, M.ms()); return loadFile(file, key, name); } }