From f65a0c226876bbaf6f99895697229544007fe780 Mon Sep 17 00:00:00 2001 From: Joshua Filby Date: Wed, 14 Nov 2018 19:59:14 -0600 Subject: [PATCH] cache: Add ScriptVarType to Enums --- .../cache/definitions/EnumDefinition.java | 5 +- .../cache/definitions/loaders/EnumLoader.java | 5 +- .../runelite/cache/util/ScriptVarType.java | 100 ++++++++++++++++++ 3 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 cache/src/main/java/net/runelite/cache/util/ScriptVarType.java diff --git a/cache/src/main/java/net/runelite/cache/definitions/EnumDefinition.java b/cache/src/main/java/net/runelite/cache/definitions/EnumDefinition.java index d2fd425584..e9f1c11b02 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/EnumDefinition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/EnumDefinition.java @@ -26,14 +26,15 @@ package net.runelite.cache.definitions; import lombok.Data; +import net.runelite.cache.util.ScriptVarType; @Data public class EnumDefinition { private int id; private int[] intVals; - private char keyType; - private char valType; + private ScriptVarType keyType; + private ScriptVarType valType; private String defaultString = "null"; private int defaultInt; private int size; diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/EnumLoader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/EnumLoader.java index ad71dea355..b45290589d 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/EnumLoader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/EnumLoader.java @@ -26,6 +26,7 @@ package net.runelite.cache.definitions.loaders; import net.runelite.cache.definitions.EnumDefinition; import net.runelite.cache.io.InputStream; +import net.runelite.cache.util.ScriptVarType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,10 +60,10 @@ public class EnumLoader switch (opcode) { case 1: - def.setKeyType((char) is.readUnsignedByte()); + def.setKeyType(ScriptVarType.forCharKey((char) is.readUnsignedByte())); break; case 2: - def.setValType((char) is.readUnsignedByte()); + def.setValType(ScriptVarType.forCharKey((char) is.readUnsignedByte())); break; case 3: def.setDefaultString(is.readString()); diff --git a/cache/src/main/java/net/runelite/cache/util/ScriptVarType.java b/cache/src/main/java/net/runelite/cache/util/ScriptVarType.java new file mode 100644 index 0000000000..4292cabe21 --- /dev/null +++ b/cache/src/main/java/net/runelite/cache/util/ScriptVarType.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2018, Joshua Filby + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.cache.util; + +import java.util.HashMap; +import java.util.Map; +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum ScriptVarType +{ + INTEGER('i', "integer"), + BOOLEAN('l', "boolean"), + SEQ('A', "seq"), + COLOUR('C', "colour"), + /** + * Also known as {@code Widget}. + */ + COMPONENT('I', "component"), + IDKIT('K', "idkit"), + MIDI('M', "midi"), + SYNTH('P', "synth"), + STAT('S', "stat"), + COORDGRID('c', "coordgrid"), + GRAPHIC('d', "graphic"), + FONTMETRICS('f', "fontmetrics"), + ENUM('g', "enum"), + JINGLE('j', "jingle"), + /** + * Also known as {@code Object}. + */ + LOC('l', "loc"), + MODEL('m', "model"), + NPC('n', "npc"), + /** + * Also known as {@code Item}. + */ + OBJ('o', "obj"), + /** + * Another version of {@code OBJ}, but means that on Jagex's side they used the internal name for an item. + */ + NAMEDOBJ('O', "namedobj"), + STRING('s', "string"), + SPOTANIM('t', "spotanim"), + INV('v', "inv"), + TEXTURE('x', "texture"), + CHAR('z', "char"), + MAPSCENEICON('£', "mapsceneicon"), + MAPELEMENT('µ', "mapelement"), + HITMARK('×', "hitmark"), + STRUCT('J', "struct"); + + private static final Map keyToTypeMap = new HashMap<>(); + + static + { + for (ScriptVarType type : values()) + { + keyToTypeMap.put(type.keyChar, type); + } + } + + public static ScriptVarType forCharKey(char key) + { + return keyToTypeMap.get(key); + } + + /** + * The character used when encoding or decoding types. + */ + private final char keyChar; + + /** + * The full name of the var type. + */ + private final String fullName; + +}