More fixes

This commit is contained in:
Daniel Mills 2020-07-26 14:17:20 -04:00
parent 7505d645eb
commit 279fcad10a
2 changed files with 52 additions and 0 deletions

View File

@ -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 + "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 + "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" + 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 + "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 + "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) + ")"); lines.add(ChatColor.GREEN + "Height" + ChatColor.GRAY + ": " + (int) g.getTerrainHeight(x, z) + " (" + (int) g.getTerrainWaterHeight(x, z) + ")");

View File

@ -6,16 +6,64 @@ import org.bukkit.util.BlockVector;
import ninja.bytecode.iris.Iris; import ninja.bytecode.iris.Iris;
import ninja.bytecode.iris.object.IrisObject; 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<IrisObject> public class ObjectResourceLoader extends ResourceLoader<IrisObject>
{ {
private ChunkPosition parallaxSize; private ChunkPosition parallaxSize;
private KMap<String, Long> useCache = new KMap<>();
public ObjectResourceLoader(File root, String folderName, String resourceTypeName) public ObjectResourceLoader(File root, String folderName, String resourceTypeName)
{ {
super(root, folderName, resourceTypeName, IrisObject.class); 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<String> 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() public ChunkPosition getParallaxSize()
{ {
lock.lock(); lock.lock();
@ -87,6 +135,7 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject>
if(loadCache.containsKey(key)) if(loadCache.containsKey(key))
{ {
IrisObject t = loadCache.get(key); IrisObject t = loadCache.get(key);
useCache.put(key, M.ms());
return t; return t;
} }
@ -97,6 +146,7 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject>
{ {
if(j.isFile() && j.getName().endsWith(".iob") && j.getName().split("\\Q.\\E")[0].equals(name)) 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); return loadFile(j, key, name);
} }
} }
@ -105,6 +155,7 @@ public class ObjectResourceLoader extends ResourceLoader<IrisObject>
if(file.exists()) if(file.exists())
{ {
useCache.put(key, M.ms());
return loadFile(file, key, name); return loadFile(file, key, name);
} }
} }