Use interned strings when decoding objects/items/npcs

Converts decoded string fields (e.g. name, description, action)
to interned strings during decoding to cut down memory usage.
This commit is contained in:
Gary Tierney
2018-01-22 02:25:05 +00:00
committed by Gary Tierney
parent 97896a34a4
commit 9446c272f1
3 changed files with 17 additions and 10 deletions
@@ -73,9 +73,11 @@ public final class ItemDefinitionDecoder implements Runnable {
} else if (opcode == 1) { } else if (opcode == 1) {
buffer.getShort(); buffer.getShort();
} else if (opcode == 2) { } else if (opcode == 2) {
definition.setName(BufferUtil.readString(buffer)); String name = BufferUtil.readString(buffer);
definition.setName(name.intern());
} else if (opcode == 3) { } else if (opcode == 3) {
definition.setDescription(BufferUtil.readString(buffer)); String description = BufferUtil.readString(buffer);
definition.setDescription(description.intern());
} else if (opcode >= 4 && opcode <= 8 || opcode == 10) { } else if (opcode >= 4 && opcode <= 8 || opcode == 10) {
buffer.getShort(); buffer.getShort();
} else if (opcode == 11) { } else if (opcode == 11) {
@@ -99,9 +101,10 @@ public final class ItemDefinitionDecoder implements Runnable {
if (str.equalsIgnoreCase("hidden")) { if (str.equalsIgnoreCase("hidden")) {
str = null; str = null;
} }
definition.setGroundAction(opcode - 30, str); definition.setGroundAction(opcode - 30, str.intern());
} else if (opcode >= 35 && opcode < 40) { } else if (opcode >= 35 && opcode < 40) {
definition.setInventoryAction(opcode - 35, BufferUtil.readString(buffer)); String action = BufferUtil.readString(buffer);
definition.setInventoryAction(opcode - 35, action.intern());
} else if (opcode == 40) { } else if (opcode == 40) {
int colourCount = buffer.get() & 0xFF; int colourCount = buffer.get() & 0xFF;
for (int i = 0; i < colourCount; i++) { for (int i = 0; i < colourCount; i++) {
@@ -80,9 +80,11 @@ public final class NpcDefinitionDecoder implements Runnable {
models[index] = buffer.getShort(); models[index] = buffer.getShort();
} }
} else if (opcode == 2) { } else if (opcode == 2) {
definition.setName(BufferUtil.readString(buffer)); String name = BufferUtil.readString(buffer);
definition.setName(name.intern());
} else if (opcode == 3) { } else if (opcode == 3) {
definition.setDescription(BufferUtil.readString(buffer)); String description = BufferUtil.readString(buffer);
definition.setDescription(description.intern());
} else if (opcode == 12) { } else if (opcode == 12) {
definition.setSize(buffer.get()); definition.setSize(buffer.get());
} else if (opcode == 13) { } else if (opcode == 13) {
@@ -98,7 +100,7 @@ public final class NpcDefinitionDecoder implements Runnable {
action = null; action = null;
} }
definition.setInteraction(opcode - 30, action); definition.setInteraction(opcode - 30, action.intern());
} else if (opcode == 40) { } else if (opcode == 40) {
int length = buffer.get() & 0xFF; int length = buffer.get() & 0xFF;
int[] originalColours = new int[length]; int[] originalColours = new int[length];
@@ -78,9 +78,11 @@ public final class ObjectDefinitionDecoder implements Runnable {
data.get(); data.get();
} }
} else if (opcode == 2) { } else if (opcode == 2) {
definition.setName(BufferUtil.readString(data)); String name = BufferUtil.readString(data);
definition.setName(name.intern());
} else if (opcode == 3) { } else if (opcode == 3) {
definition.setDescription(BufferUtil.readString(data)); String description = BufferUtil.readString(data);
definition.setDescription(description.intern());
} else if (opcode == 5) { } else if (opcode == 5) {
int amount = data.get() & 0xFF; int amount = data.get() & 0xFF;
for (int i = 0; i < amount; i++) { for (int i = 0; i < amount; i++) {
@@ -106,7 +108,7 @@ public final class ObjectDefinitionDecoder implements Runnable {
actions = new String[10]; actions = new String[10];
} }
String action = BufferUtil.readString(data); String action = BufferUtil.readString(data);
actions[opcode - 30] = action; actions[opcode - 30] = action.intern();
definition.setMenuActions(actions); definition.setMenuActions(actions);
} else if (opcode == 39) { } else if (opcode == 39) {
data.get(); data.get();