mirror of
https://github.com/sirjonasxx/G-Earth.git
synced 2025-02-20 13:02:36 +01:00
add HFloorItems constructPacket()
This commit is contained in:
parent
64c6f35b2f
commit
d79754f931
@ -2,7 +2,9 @@ package gearth.extensions.parsers;
|
||||
|
||||
import gearth.protocol.HPacket;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class HFloorItem implements IFurni {
|
||||
private int id;
|
||||
@ -16,6 +18,11 @@ public class HFloorItem implements IFurni {
|
||||
private int usagePolicy;
|
||||
private int ownerId;
|
||||
private String ownerName;
|
||||
private Object[] stuff;
|
||||
|
||||
private String ignore1;
|
||||
private Integer ignore2;
|
||||
private String ignore3;
|
||||
|
||||
public HFloorItem(HPacket packet) {
|
||||
id = packet.readInteger();
|
||||
@ -27,91 +34,31 @@ public class HFloorItem implements IFurni {
|
||||
|
||||
tile = new HPoint(x, y, Double.parseDouble(packet.readString()));
|
||||
|
||||
packet.readString();
|
||||
packet.readInteger();
|
||||
ignore1 = packet.readString();
|
||||
ignore2 = packet.readInteger();
|
||||
|
||||
category = packet.readInteger();
|
||||
|
||||
setStuffData(packet);
|
||||
stuff = HStuff.readData(packet, category);
|
||||
|
||||
secondsToExpiration = packet.readInteger();
|
||||
usagePolicy = packet.readInteger();
|
||||
|
||||
ownerId = packet.readInteger();
|
||||
|
||||
if (typeId < 0)
|
||||
packet.readString();
|
||||
|
||||
}
|
||||
|
||||
private void setStuffData(HPacket packet)
|
||||
{
|
||||
switch(category & 255)
|
||||
{
|
||||
case 0: // RegularFurni
|
||||
packet.readString();
|
||||
break;
|
||||
case 1: // MapStuffData
|
||||
{
|
||||
int max = packet.readInteger();
|
||||
for (int i = 0; i < max; i++) {
|
||||
packet.readString();
|
||||
packet.readString();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 2: // StringArrayStuffData
|
||||
{
|
||||
int max = packet.readInteger();
|
||||
for (int i = 0; i < max; i++)
|
||||
packet.readString();
|
||||
}
|
||||
break;
|
||||
case 3: // idk about this one lol
|
||||
packet.readString();
|
||||
packet.readInteger();
|
||||
break;
|
||||
case 4: // neither about this one
|
||||
break;
|
||||
case 5: // IntArrayStuffData
|
||||
{
|
||||
int max = packet.readInteger();
|
||||
|
||||
for (int i = 0; i < max; i++)
|
||||
packet.readInteger();
|
||||
}
|
||||
break;
|
||||
case 6: // HighScoreStuffData
|
||||
{
|
||||
packet.readString();
|
||||
packet.readInteger();
|
||||
packet.readInteger();
|
||||
int max = packet.readInteger();
|
||||
|
||||
for (int i = 0; i < max; i++) {
|
||||
packet.readInteger();
|
||||
int dataCount = packet.readInteger();
|
||||
for (int j = 0; j < dataCount; j++)
|
||||
packet.readString();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 7: // Crackables (Eggs and stuff)
|
||||
packet.readString();
|
||||
packet.readInteger();
|
||||
packet.readInteger();
|
||||
break;
|
||||
if (typeId < 0) {
|
||||
ignore3 = packet.readString();
|
||||
}
|
||||
if ((category & 0xFF00 & 0x100) > 0)
|
||||
{
|
||||
packet.readInteger();
|
||||
packet.readInteger();
|
||||
else {
|
||||
ignore3 = null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static HFloorItem[] parse(HPacket packet) {
|
||||
int ownersCount = packet.readInteger();
|
||||
HashMap<Integer, String> owners = new HashMap<>(ownersCount);
|
||||
Map<Integer, String> owners = new HashMap<>(ownersCount);
|
||||
|
||||
for (int i = 0; i < ownersCount; i++)
|
||||
owners.put(packet.readInteger(), packet.readString());
|
||||
@ -126,6 +73,75 @@ public class HFloorItem implements IFurni {
|
||||
return furniture;
|
||||
}
|
||||
|
||||
public static HPacket constructPacket(HFloorItem[] floorItems, int headerId) {
|
||||
Map<Integer, String> owners = new HashMap<>();
|
||||
for (HFloorItem floorItem : floorItems) {
|
||||
owners.put(floorItem.ownerId, floorItem.getOwnerName());
|
||||
}
|
||||
|
||||
HPacket packet = new HPacket(headerId);
|
||||
packet.appendInt(owners.size());
|
||||
for (Integer ownerId : owners.keySet()) {
|
||||
packet.appendInt(ownerId);
|
||||
packet.appendString(owners.get(ownerId));
|
||||
}
|
||||
|
||||
packet.appendInt(floorItems.length);
|
||||
for (HFloorItem floorItem : floorItems) {
|
||||
// id = packet.readInteger();
|
||||
packet.appendInt(floorItem.id);
|
||||
|
||||
// typeId = packet.readInteger();
|
||||
packet.appendInt(floorItem.typeId);
|
||||
|
||||
// int x = packet.readInteger();
|
||||
packet.appendInt(floorItem.tile.getX());
|
||||
|
||||
// int y = packet.readInteger();
|
||||
packet.appendInt(floorItem.tile.getY());
|
||||
|
||||
// facing = HDirection.values()[packet.readInteger()];
|
||||
packet.appendInt(floorItem.facing.ordinal());
|
||||
|
||||
// tile = new HPoint(x, y, Double.parseDouble(packet.readString()));
|
||||
packet.appendString(floorItem.tile.getZ() + "");
|
||||
|
||||
|
||||
// ignore1 = packet.readString();
|
||||
packet.appendString(floorItem.ignore1);
|
||||
|
||||
// ignore2 = packet.readInteger();
|
||||
packet.appendInt(floorItem.ignore2);
|
||||
|
||||
// category = packet.readInteger();
|
||||
packet.appendInt(floorItem.category);
|
||||
|
||||
|
||||
// stuff = HStuff.readData(packet, category);
|
||||
for (Object object : floorItem.stuff) {
|
||||
packet.appendObject(object);
|
||||
}
|
||||
|
||||
// secondsToExpiration = packet.readInteger();
|
||||
packet.appendInt(floorItem.secondsToExpiration);
|
||||
|
||||
// usagePolicy = packet.readInteger();
|
||||
packet.appendInt(floorItem.usagePolicy);
|
||||
|
||||
// ownerId = packet.readInteger();
|
||||
packet.appendInt(floorItem.ownerId);
|
||||
|
||||
|
||||
if (floorItem.typeId < 0) {
|
||||
// ignore3 = packet.readString();
|
||||
packet.appendString(floorItem.ignore3);
|
||||
}
|
||||
}
|
||||
|
||||
return packet;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int getId() {
|
||||
return id;
|
||||
|
91
G-Earth/src/main/java/gearth/extensions/parsers/HStuff.java
Normal file
91
G-Earth/src/main/java/gearth/extensions/parsers/HStuff.java
Normal file
@ -0,0 +1,91 @@
|
||||
package gearth.extensions.parsers;
|
||||
|
||||
import gearth.protocol.HPacket;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class HStuff {
|
||||
|
||||
public static Object[] readData(HPacket packet, int category) {
|
||||
List<Object> values = new ArrayList<>();
|
||||
switch (category & 0xFF)
|
||||
{
|
||||
case 0: /* LegacyStuffData */ {
|
||||
values.add(packet.readString());
|
||||
break;
|
||||
}
|
||||
case 1: /* MapStuffData */ {
|
||||
int count = packet.readInteger();
|
||||
values.add(count);
|
||||
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
values.add(packet.readString());
|
||||
values.add(packet.readString());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 2: /* StringArrayStuffData */ {
|
||||
int count = packet.readInteger();
|
||||
values.add(count);
|
||||
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
values.add(packet.readString());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3: /* VoteResultStuffData */ {
|
||||
values.add(packet.readString());
|
||||
values.add(packet.readInteger());
|
||||
break;
|
||||
}
|
||||
case 5: /* IntArrayStuffData */ {
|
||||
int count = packet.readInteger();
|
||||
values.add(count);
|
||||
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
values.add(packet.readInteger());
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 6: /* HighScoreStuffData */ {
|
||||
values.add(packet.readString());
|
||||
values.add(packet.readInteger());
|
||||
values.add(packet.readInteger());
|
||||
|
||||
int count = packet.readInteger();
|
||||
values.add(count);
|
||||
|
||||
for (int j = 0; j < count; j++)
|
||||
{
|
||||
int score = packet.readInteger();
|
||||
values.add(score);
|
||||
|
||||
int subCount = packet.readInteger();
|
||||
values.add(subCount);
|
||||
|
||||
for (int k = 0; k < subCount; k++)
|
||||
{
|
||||
values.add(packet.readString());
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 7: /* CrackableStuffData */ {
|
||||
values.add(packet.readString());
|
||||
values.add(packet.readInteger());
|
||||
values.add(packet.readInteger());
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((category & 0xFF00 & 0x100) > 0) {
|
||||
values.add(packet.readInteger());
|
||||
values.add(packet.readInteger());
|
||||
}
|
||||
return values.toArray();
|
||||
}
|
||||
|
||||
}
|
@ -54,21 +54,7 @@ public class HPacket implements StringifyAble {
|
||||
this(header);
|
||||
for (int i = 0; i < objects.length; i++) {
|
||||
Object o = objects[i];
|
||||
if (o instanceof Byte) {
|
||||
appendByte((Byte)o);
|
||||
}
|
||||
else if (o instanceof Integer) {
|
||||
appendInt((Integer)o);
|
||||
}
|
||||
else if (o instanceof String) {
|
||||
appendString((String)o);
|
||||
}
|
||||
else if (o instanceof Boolean) {
|
||||
appendBoolean((Boolean) o);
|
||||
}
|
||||
else {
|
||||
throw new InvalidParameterException();
|
||||
}
|
||||
appendObject(o);
|
||||
}
|
||||
|
||||
isEdited = false;
|
||||
@ -475,6 +461,28 @@ public class HPacket implements StringifyAble {
|
||||
appendBytes(s.getBytes(StandardCharsets.ISO_8859_1));
|
||||
return this;
|
||||
}
|
||||
public HPacket appendObject(Object o) throws InvalidParameterException {
|
||||
isEdited = true;
|
||||
|
||||
if (o instanceof Byte) {
|
||||
appendByte((Byte)o);
|
||||
}
|
||||
else if (o instanceof Integer) {
|
||||
appendInt((Integer)o);
|
||||
}
|
||||
else if (o instanceof String) {
|
||||
appendString((String)o);
|
||||
}
|
||||
else if (o instanceof Boolean) {
|
||||
appendBoolean((Boolean) o);
|
||||
}
|
||||
else {
|
||||
throw new InvalidParameterException();
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
public HPacket removeFrom(int index) {
|
||||
return removeRange(index, packetInBytes.length - index);
|
||||
|
Loading…
x
Reference in New Issue
Block a user