diff --git a/src/resources/client_info/IffNode.java b/src/resources/client_info/IffNode.java index c32323f5c..d859b8fe0 100644 --- a/src/resources/client_info/IffNode.java +++ b/src/resources/client_info/IffNode.java @@ -30,6 +30,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -45,6 +46,7 @@ public class IffNode { private List children; private byte[] chunkData; private ByteBuffer bb; + private Iterator childrenItr; public IffNode() { } @@ -149,7 +151,8 @@ public class IffNode { } public IffNode getNextUnreadChunk() { - for (IffNode child : children) { + while(childrenItr.hasNext()) { + IffNode child = childrenItr.next(); if (!child.isForm && !child.hasBeenRead()) return child; } @@ -157,7 +160,8 @@ public class IffNode { } public IffNode getNextUnreadForm() { - for (IffNode child : children) { + while(childrenItr.hasNext()) { + IffNode child = childrenItr.next(); if (child.isForm && !child.hasBeenRead()) return child; } @@ -223,6 +227,9 @@ public class IffNode { read += child.populateFromBuffer(bb); addChild(child); } + if (children != null) + childrenItr = children.listIterator(); + return 4 + size; } diff --git a/src/resources/client_info/SWGFile.java b/src/resources/client_info/SWGFile.java index fc86c14bd..3e4e6db39 100644 --- a/src/resources/client_info/SWGFile.java +++ b/src/resources/client_info/SWGFile.java @@ -75,6 +75,8 @@ public class SWGFile { master.populateFromBuffer(bb); type = master.getTag(); fileName = file.getAbsolutePath(); + + inputStream.close(); } public IffNode addForm(String tag) { diff --git a/src/resources/client_info/visitors/CrcStringTableData.java b/src/resources/client_info/visitors/CrcStringTableData.java index 899105e72..dce2c081f 100644 --- a/src/resources/client_info/visitors/CrcStringTableData.java +++ b/src/resources/client_info/visitors/CrcStringTableData.java @@ -30,6 +30,7 @@ package resources.client_info.visitors; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import resources.client_info.ClientData; @@ -39,9 +40,9 @@ import utilities.ByteUtilities; public class CrcStringTableData extends ClientData { - private ArrayList crcList = new ArrayList<>(); - private ArrayList startList = new ArrayList<>(); - private ArrayList stringList = new ArrayList<>(); + private List crcList = new ArrayList<>(); + private List startList = new ArrayList<>(); + private List stringList = new ArrayList<>(); private Map crcMap = new HashMap<>(); private int count; @@ -81,11 +82,7 @@ public class CrcStringTableData extends ClientData { } public boolean isValidCrc(int crc) { - - if(!crcList.contains(crc)) - return false; - return true; - + return crcList.contains(crc); } public String getTemplateString(int crc) { diff --git a/src/resources/client_info/visitors/ObjectData.java b/src/resources/client_info/visitors/ObjectData.java index 2d525cfbe..3290b4ae6 100644 --- a/src/resources/client_info/visitors/ObjectData.java +++ b/src/resources/client_info/visitors/ObjectData.java @@ -39,8 +39,8 @@ import resources.client_info.SWGFile; public class ObjectData extends ClientData { - private Map attributes = new HashMap<>(); - private List parsedFiles = new ArrayList<>(); + private final Map attributes = new HashMap<>(); + private final List parsedFiles = new ArrayList<>(); public static final String APPEARANCE_FILE = "appearanceFilename"; public static final String ARRANGEMENT_FILE = "arrangementDescriptorFilename"; @@ -128,11 +128,13 @@ public class ObjectData extends ClientData { if (chunk.readByte() == 0) return; + chunk.readByte(); + String stfFile = chunk.readString(); if (stfFile.isEmpty()) return; - chunk.readShort(); // 0x00, 0x01 (Shows up as well even if stfFile prior data.get() is 0) + chunk.readByte(); // 0x00, 0x01 (Shows up as well even if stfFile prior data.get() is 0) String stfName = chunk.readString(); diff --git a/src/resources/client_info/visitors/PortalLayoutData.java b/src/resources/client_info/visitors/PortalLayoutData.java index f7a7e6046..16feade69 100644 --- a/src/resources/client_info/visitors/PortalLayoutData.java +++ b/src/resources/client_info/visitors/PortalLayoutData.java @@ -38,8 +38,6 @@ import java.util.List; */ public class PortalLayoutData extends ClientData { -// private int cellCount; -// private int portalCount; private List cells = new LinkedList<>(); @Override @@ -59,10 +57,6 @@ public class PortalLayoutData extends ClientData { } private void readVersion3(SWGFile iff) { -/* IffNode dataChunk = iff.enterChunk("DATA"); - cellCount = dataChunk.readInt(); // Seems to be off for quite a few IFFs as displayed in IFF editors - portalCount = dataChunk.readInt();*/ - iff.enterForm("CELS"); while(iff.enterForm("CELL") != null) { @@ -78,11 +72,6 @@ public class PortalLayoutData extends ClientData { } public static class Cell extends ClientData { -/* private int cellPortals; - private boolean canSeeParentCell; - private boolean hasFloor; - private String appearance; - private String floor;*/ private String name; public Cell(SWGFile iff) { @@ -99,7 +88,7 @@ public class PortalLayoutData extends ClientData { int version = versionForm.getVersionFromTag(); switch(version) { - case 3: readVersion3(iff); break; + case 3: break; case 5: readVersion5(iff); break; default: System.err.println("Don't know how to handle version " + version + " CELL " + iff.getFileName()); } @@ -107,21 +96,11 @@ public class PortalLayoutData extends ClientData { iff.exitForm(); } - private void readVersion3(SWGFile iff) { -/* IffNode dataChunk = iff.enterChunk("DATA"); - cellPortals = dataChunk.readInt(); - canSeeParentCell = dataChunk.readBoolean();*/ - } - private void readVersion5(SWGFile iff) { IffNode dataChunk = iff.enterChunk("DATA"); -/* cellPortals =*/ dataChunk.readInt(); -/* canSeeParentCell =*/ dataChunk.readBoolean(); + dataChunk.readInt(); // cellPortals + dataChunk.readBoolean(); // canSeeParentCell name = dataChunk.readString(); -/* appearance =*/ dataChunk.readString(); -/* hasFloor =*/ dataChunk.readBoolean(); -/* if (hasFloor) - floor = dataChunk.readString();*/ } public String getName() { diff --git a/src/resources/client_info/visitors/ProfTemplateData.java b/src/resources/client_info/visitors/ProfTemplateData.java index ed966abde..67badd99f 100644 --- a/src/resources/client_info/visitors/ProfTemplateData.java +++ b/src/resources/client_info/visitors/ProfTemplateData.java @@ -27,14 +27,12 @@ ***********************************************************************************/ package resources.client_info.visitors; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import resources.client_info.ClientData; import resources.client_info.IffNode; import resources.client_info.SWGFile; -import utilities.ByteUtilities; public class ProfTemplateData extends ClientData { diff --git a/src/resources/client_info/visitors/SlotArrangementData.java b/src/resources/client_info/visitors/SlotArrangementData.java index 771470ab9..409ad00da 100644 --- a/src/resources/client_info/visitors/SlotArrangementData.java +++ b/src/resources/client_info/visitors/SlotArrangementData.java @@ -27,14 +27,12 @@ ***********************************************************************************/ package resources.client_info.visitors; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import resources.client_info.ClientData; import resources.client_info.IffNode; import resources.client_info.SWGFile; -import utilities.ByteUtilities; public class SlotArrangementData extends ClientData { @@ -44,7 +42,7 @@ public class SlotArrangementData extends ClientData { public void readIff(SWGFile iff) { iff.enterNextForm(); // Version - ArrayList slots = new ArrayList<>(); + List slots = new ArrayList<>(); IffNode chunk; while((chunk = iff.enterNextChunk()) != null) { slots.add(chunk.readString()); @@ -53,18 +51,6 @@ public class SlotArrangementData extends ClientData { occupiedSlots.add(slots); } - public void handleChunkData(String form, String chunk, ByteBuffer data) { - - ArrayList slots = new ArrayList<>(); - - while(data.hasRemaining()) { - slots.add(ByteUtilities.nextString(data)); - data.get(); - } - - occupiedSlots.add(slots); - } - public List > getArrangement() { return occupiedSlots; } diff --git a/src/resources/client_info/visitors/SlotDefinitionData.java b/src/resources/client_info/visitors/SlotDefinitionData.java index dfc4666b5..94370866a 100644 --- a/src/resources/client_info/visitors/SlotDefinitionData.java +++ b/src/resources/client_info/visitors/SlotDefinitionData.java @@ -28,6 +28,7 @@ package resources.client_info.visitors; import java.util.HashMap; +import java.util.Map; import resources.client_info.ClientData; import resources.client_info.IffNode; @@ -35,7 +36,7 @@ import resources.client_info.SWGFile; public class SlotDefinitionData extends ClientData { - private HashMap definitions = new HashMap<>(); + private Map definitions = new HashMap<>(); public class SlotDefinition { public String name; diff --git a/src/resources/client_info/visitors/SlotDescriptorData.java b/src/resources/client_info/visitors/SlotDescriptorData.java index d2be585af..bfe9cc30f 100644 --- a/src/resources/client_info/visitors/SlotDescriptorData.java +++ b/src/resources/client_info/visitors/SlotDescriptorData.java @@ -27,14 +27,12 @@ ***********************************************************************************/ package resources.client_info.visitors; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import resources.client_info.ClientData; import resources.client_info.IffNode; import resources.client_info.SWGFile; -import utilities.ByteUtilities; public class SlotDescriptorData extends ClientData {