// Near Infinity - An Infinity Engine Browser and Editor // Copyright (C) 2001 - 2005 Jon Olav Hauglid // See LICENSE.txt for license information package org.infinity.resource.cre; import java.nio.ByteBuffer; import org.infinity.datatype.DecNumber; import org.infinity.datatype.Flag; import org.infinity.datatype.ResourceRef; import org.infinity.datatype.Unknown; import org.infinity.datatype.UnsignDecNumber; import org.infinity.resource.AbstractStruct; import org.infinity.resource.AddRemovable; import org.infinity.resource.Profile; import org.infinity.util.io.StreamUtils; public final class Item extends AbstractStruct implements AddRemovable { // CRE/Item-specific field labels public static final String CRE_ITEM = "Item"; public static final String CRE_ITEM_RESREF = "Item"; public static final String CRE_ITEM_DURATION = "Duration"; public static final String CRE_ITEM_QUANTITY_1 = "Quantity/Charges 1"; public static final String CRE_ITEM_QUANTITY_2 = "Quantity/Charges 2"; public static final String CRE_ITEM_QUANTITY_3 = "Quantity/Charges 3"; public static final String CRE_ITEM_FLAGS = "Flags"; private static final String[] s_itemflag = {"No flags set", "Identified", "Not stealable", "Stolen", "Undroppable"}; public Item() throws Exception { super(null, CRE_ITEM, StreamUtils.getByteBuffer(20), 0); } public Item(AbstractStruct superStruct, ByteBuffer buffer, int offset, int nr) throws Exception { super(superStruct, CRE_ITEM + " " + nr, buffer, offset); } //--------------------- Begin Interface AddRemovable --------------------- @Override public boolean canRemove() { return true; } //--------------------- End Interface AddRemovable --------------------- @Override public int read(ByteBuffer buffer, int offset) throws Exception { addField(new ResourceRef(buffer, offset, CRE_ITEM_RESREF, "ITM")); if (Profile.isEnhancedEdition()) { addField(new UnsignDecNumber(buffer, offset + 8, 2, CRE_ITEM_DURATION)); } else { addField(new Unknown(buffer, offset + 8, 2)); } addField(new DecNumber(buffer, offset + 10, 2, CRE_ITEM_QUANTITY_1)); addField(new DecNumber(buffer, offset + 12, 2, CRE_ITEM_QUANTITY_2)); addField(new DecNumber(buffer, offset + 14, 2, CRE_ITEM_QUANTITY_3)); addField(new Flag(buffer, offset + 16, 4, CRE_ITEM_FLAGS, s_itemflag)); return offset + 20; } }