From 31bf39d2e53493c41c023595c765fec3ea184ea5 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Fri, 24 Jan 2020 14:39:55 -0500 Subject: [PATCH] Patch --- src/main/java/ninja/bytecode/iris/Iris.java | 2 +- .../iris/generator/genobject/GenObject.java | 4 +- .../generator/genobject/PhantomGenObject.java | 59 ++++++++++++++++++- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/main/java/ninja/bytecode/iris/Iris.java b/src/main/java/ninja/bytecode/iris/Iris.java index 60397e8ed..91c28f0d3 100644 --- a/src/main/java/ninja/bytecode/iris/Iris.java +++ b/src/main/java/ninja/bytecode/iris/Iris.java @@ -60,7 +60,7 @@ public class Iris extends MortarPlugin super.onEnable(); } - public File getCacheFolder() + public File getObjectCacheFolder() { return getDataFolder("cache", "object"); } diff --git a/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java b/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java index 53902faf6..518c9782d 100644 --- a/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java +++ b/src/main/java/ninja/bytecode/iris/generator/genobject/GenObject.java @@ -57,7 +57,7 @@ public class GenObject @SuppressWarnings("deprecation") public void perfectRead(File folder, String name) throws IOException { - File file = new File(folder, IO.hash(name)); + File file = new File(folder, IO.hash(name) + ".ioc"); FileInputStream fin = new FileInputStream(file); DataInputStream din = new DataInputStream(fin); centeredHeight = din.readBoolean(); @@ -81,7 +81,7 @@ public class GenObject @SuppressWarnings("deprecation") public void perfectWrite(File folder) throws IOException { - File file = new File(folder, IO.hash(name)); + File file = new File(folder, IO.hash(name) + ".ioc"); FileOutputStream fos = new FileOutputStream(file); DataOutputStream dos = new DataOutputStream(fos); dos.writeBoolean(centeredHeight); diff --git a/src/main/java/ninja/bytecode/iris/generator/genobject/PhantomGenObject.java b/src/main/java/ninja/bytecode/iris/generator/genobject/PhantomGenObject.java index a2a31a7c6..05c5d9e68 100644 --- a/src/main/java/ninja/bytecode/iris/generator/genobject/PhantomGenObject.java +++ b/src/main/java/ninja/bytecode/iris/generator/genobject/PhantomGenObject.java @@ -1,13 +1,70 @@ package ninja.bytecode.iris.generator.genobject; +import java.io.IOException; + +import mortar.compute.math.M; +import mortar.util.text.C; +import ninja.bytecode.iris.Iris; +import ninja.bytecode.shuriken.logging.L; + public class PhantomGenObject { private GenObject object; private String name; + private boolean loaded; + private long lastUse; + private long evictionNotice; + private int size; - public PhantomGenObject(GenObject object) + public PhantomGenObject(GenObject object) throws IOException { this.object = object; this.name = object.getName(); + object.perfectWrite(Iris.instance.getObjectCacheFolder()); + lastUse = M.ms(); + loaded = true; + size = object.getSchematic().size(); + evictionNotice = 5000 + (size * 7); + } + + public int getSize() + { + return size; + } + + public boolean isLoaded() + { + return loaded; + } + + public void attemptEviction() + { + if(loaded && M.ms() - lastUse > evictionNotice) + { + loaded = false; + object.dispose(); + } + } + + public GenObject get() + { + if(!loaded) + { + try + { + object.perfectRead(Iris.instance.getObjectCacheFolder(), name); + loaded = true; + } + + catch(IOException e) + { + L.f(C.RED + "Cannot Read Cached Object: " + name); + L.ex(e); + } + } + + lastUse = M.ms(); + + return object; } }