diff --git a/G-Earth/src/main/java/gearth/extensions/parsers/HEntity.java b/G-Earth/src/main/java/gearth/extensions/parsers/HEntity.java index bb20d3e..860d111 100644 --- a/G-Earth/src/main/java/gearth/extensions/parsers/HEntity.java +++ b/G-Earth/src/main/java/gearth/extensions/parsers/HEntity.java @@ -8,11 +8,11 @@ public class HEntity { private HPoint tile; private String name; private String motto; - private HGender gender; - private int entityType; + private HGender gender = null; + private HEntityType entityType; private String figureId; - private String favoriteGroup; - private HEntityUpdate lastUpdate; + private String favoriteGroup = null; + private HEntityUpdate lastUpdate = null; public HEntity(HPacket packet) { id = packet.readInteger(); @@ -24,9 +24,10 @@ public class HEntity { Double.parseDouble(packet.readString())); packet.readInteger(); - entityType = packet.readInteger(); + int entityTypeId = packet.readInteger(); + entityType = HEntityType.valueOf(entityTypeId); - switch (entityType) { + switch (entityTypeId) { case 1: gender = HGender.valueOf(packet.readString()); packet.readInteger(); @@ -104,7 +105,7 @@ public class HEntity { return gender; } - public int getEntityType() { + public HEntityType getEntityType() { return entityType; } diff --git a/G-Earth/src/main/java/gearth/extensions/parsers/HEntityType.java b/G-Earth/src/main/java/gearth/extensions/parsers/HEntityType.java new file mode 100644 index 0000000..c740d4e --- /dev/null +++ b/G-Earth/src/main/java/gearth/extensions/parsers/HEntityType.java @@ -0,0 +1,37 @@ +package gearth.extensions.parsers; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Jeunez on 8/01/2019. + */ +public enum HEntityType { + HABBO(1), + PET(2), + OLD_BOT(3), + BOT(4); + + private int id; + + HEntityType(int id) { + this.id = id; + } + + public int getId() { + return id; + } + + + private static Map map = new HashMap<>(); + + static { + for (HEntityType type : HEntityType.values()) { + map.put(type.id, type); + } + } + + public static HEntityType valueOf (int id) { + return map.get(id); + } +} diff --git a/G-Earth/src/main/java/gearth/protocol/HPacket.java b/G-Earth/src/main/java/gearth/protocol/HPacket.java index 0fdf424..e970c30 100644 --- a/G-Earth/src/main/java/gearth/protocol/HPacket.java +++ b/G-Earth/src/main/java/gearth/protocol/HPacket.java @@ -684,14 +684,21 @@ public class HPacket implements StringifyAble { } + private String toExpressionFromGivenStructure(String struct) { + int oldReadIndex = readIndex; + resetReadIndex(); + + StringBuilder builder = new StringBuilder(); + builder.append("{l}{u:").append(headerId()).append("}"); + + buildExpressionFromGivenStructure(struct, 0, builder); + readIndex = oldReadIndex; + return builder.toString(); + } + private void buildExpressionFromGivenStructure(String struct, int indexInGivenStruct, StringBuilder builder) { int prevInt = 0; - if (indexInGivenStruct == -1) { - builder.append("{l}{u:").append(headerId()).append("}"); - indexInGivenStruct = 0; - } - while (indexInGivenStruct < struct.length()) { char c = struct.charAt(indexInGivenStruct++); if (c == '(') { @@ -710,7 +717,6 @@ public class HPacket implements StringifyAble { else if (c == 'B') builder.append("{b:").append(readBoolean()).append('}'); else return; // ')' } - } public String toExpression(HMessage.Side side) { @@ -720,12 +726,7 @@ public class HPacket implements StringifyAble { if (HarbleAPIFetcher.HARBLEAPI != null && ((msg = HarbleAPIFetcher.HARBLEAPI.getHarbleMessageFromHeaderId(side, headerId())) != null)) { if (msg.getStructure() != null) { - int oldReadIndex = readIndex; - resetReadIndex(); - StringBuilder builder = new StringBuilder(); - buildExpressionFromGivenStructure(msg.getStructure(), -1, builder); - readIndex = oldReadIndex; - return builder.toString(); + return toExpressionFromGivenStructure(msg.getStructure()); } } return toExpression(); @@ -1026,9 +1027,7 @@ public class HPacket implements StringifyAble { public static void main(String[] args) { HPacket packet = new HPacket("{l}{u:4564}{i:3}{i:0}{s:hi}{i:0}{i:1}{s:how}{i:3}{b:1}{b:2}{b:3}{i:2}{s:r u}{i:1}{b:120}{i:2}{b:true}"); - StringBuilder builder = new StringBuilder(); - packet.buildExpressionFromGivenStructure("i(isi(b))iB", -1, builder); - String str = builder.toString(); + String str = packet.toExpressionFromGivenStructure("i(isi(b))iB"); HPacket packetverify = new HPacket(str);