diff --git a/src/main/java/noppes/npcs/scripted/NpcAPI.java b/src/main/java/noppes/npcs/scripted/NpcAPI.java index 496aaacb5..97a880956 100644 --- a/src/main/java/noppes/npcs/scripted/NpcAPI.java +++ b/src/main/java/noppes/npcs/scripted/NpcAPI.java @@ -70,6 +70,7 @@ import java.util.*; public class NpcAPI extends AbstractNpcAPI { private static final Map worldCache = new LRUHashMap<>(10); + private static final HashMap scriptItemCache = new HashMap<>(); public static final HashMap engineObjects = new HashMap<>(); public static final EventBus EVENT_BUS = new EventBus(); private static AbstractNpcAPI instance = null; @@ -352,17 +353,29 @@ public class NpcAPI extends AbstractNpcAPI { if(itemstack == null) return null; - if (itemstack.getItem() instanceof ItemScripted) { - return new ScriptCustomItem(itemstack); - } else if(itemstack.getItem() instanceof ItemArmor) { - return new ScriptItemArmor(itemstack); - } else if(itemstack.getItem() instanceof ItemBook) { - return new ScriptItemBook(itemstack); - } else if(itemstack.getItem() instanceof ItemBlock) { - return new ScriptItemBlock(itemstack); + ScriptItemStack scriptStack; + if (scriptItemCache.containsKey(itemstack)) { + scriptStack = scriptItemCache.get(itemstack); } else { - return new ScriptItemStack(itemstack); + if (itemstack.getItem() instanceof ItemScripted) { + scriptStack = new ScriptCustomItem(itemstack); + } else if (itemstack.getItem() instanceof ItemArmor) { + scriptStack = new ScriptItemArmor(itemstack); + } else if (itemstack.getItem() instanceof ItemBook) { + scriptStack = new ScriptItemBook(itemstack); + } else if (itemstack.getItem() instanceof ItemBlock) { + scriptStack = new ScriptItemBlock(itemstack); + } else { + scriptStack = new ScriptItemStack(itemstack); + } } + + long time = System.currentTimeMillis(); + scriptStack.lastAccessed = time; + scriptItemCache.entrySet().removeIf(entry -> time - entry.getValue().lastAccessed > 20000); + scriptItemCache.put(itemstack,scriptStack); + + return scriptStack; } public IItemStack createItemFromNBT(INbt nbt) { diff --git a/src/main/java/noppes/npcs/scripted/item/ScriptItemStack.java b/src/main/java/noppes/npcs/scripted/item/ScriptItemStack.java index d0a43e920..271d54814 100644 --- a/src/main/java/noppes/npcs/scripted/item/ScriptItemStack.java +++ b/src/main/java/noppes/npcs/scripted/item/ScriptItemStack.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Map; public class ScriptItemStack implements IItemStack { + public long lastAccessed; public ItemStack item; public ScriptItemStack(ItemStack item){