package net.scapeemulator.game.tools; import net.scapeemulator.cache.Archive; import net.scapeemulator.cache.Cache; import net.scapeemulator.cache.Container; import net.scapeemulator.cache.FileStore; import net.scapeemulator.cache.ReferenceTable; import net.scapeemulator.cache.def.ItemDefinition; public final class ItemsEditor { private static final int ITEM_ID = 4151; private static void modifyDefinition(ItemDefinition def) { } public static void main(String[] args) { try { System.out.println("Loading cache and finding item entry... "); Cache cache = new Cache(FileStore.open("data/game/cache")); Container tableContainer = Container.decode(cache.getStore().read(255, 19)); ReferenceTable table = ReferenceTable.decode(tableContainer.getData()); int fileId = ITEM_ID / 256; ReferenceTable.Entry entry = table.getEntry(fileId); if (entry == null) { System.out.println("No entry found!"); cache.close(); return; } Archive archive = Archive.decode(cache.read(19, fileId).getData(), entry.size()); int archiveMember = 0; for (int member = 0; member < entry.capacity(); member++) { ReferenceTable.ChildEntry childEntry = entry.getEntry(member); if (childEntry == null) { continue; } int id = fileId * 256 + member; if (id == ITEM_ID) { ItemDefinition definition = ItemDefinition.decode(id, archive.getEntry(archiveMember)); System.out.println("Item definition found and decoded, modifying..."); modifyDefinition(definition); System.out.println("Writing changes to cache..."); cache.write(19, fileId, archiveMember, definition.encode()); break; } archiveMember++; } System.out.println("Cache item update complete!"); cache.close(); } catch (Exception e) { e.printStackTrace(); } } }