mirror of
https://github.com/sirjonasxx/G-Earth.git
synced 2025-02-21 13:22:37 +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 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 {
|
public class HFloorItem implements IFurni {
|
||||||
private int id;
|
private int id;
|
||||||
@ -16,6 +18,11 @@ public class HFloorItem implements IFurni {
|
|||||||
private int usagePolicy;
|
private int usagePolicy;
|
||||||
private int ownerId;
|
private int ownerId;
|
||||||
private String ownerName;
|
private String ownerName;
|
||||||
|
private Object[] stuff;
|
||||||
|
|
||||||
|
private String ignore1;
|
||||||
|
private Integer ignore2;
|
||||||
|
private String ignore3;
|
||||||
|
|
||||||
public HFloorItem(HPacket packet) {
|
public HFloorItem(HPacket packet) {
|
||||||
id = packet.readInteger();
|
id = packet.readInteger();
|
||||||
@ -27,91 +34,31 @@ public class HFloorItem implements IFurni {
|
|||||||
|
|
||||||
tile = new HPoint(x, y, Double.parseDouble(packet.readString()));
|
tile = new HPoint(x, y, Double.parseDouble(packet.readString()));
|
||||||
|
|
||||||
packet.readString();
|
ignore1 = packet.readString();
|
||||||
packet.readInteger();
|
ignore2 = packet.readInteger();
|
||||||
|
|
||||||
category = packet.readInteger();
|
category = packet.readInteger();
|
||||||
|
|
||||||
setStuffData(packet);
|
stuff = HStuff.readData(packet, category);
|
||||||
|
|
||||||
secondsToExpiration = packet.readInteger();
|
secondsToExpiration = packet.readInteger();
|
||||||
usagePolicy = packet.readInteger();
|
usagePolicy = packet.readInteger();
|
||||||
|
|
||||||
ownerId = packet.readInteger();
|
ownerId = packet.readInteger();
|
||||||
|
|
||||||
if (typeId < 0)
|
if (typeId < 0) {
|
||||||
packet.readString();
|
ignore3 = 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 ((category & 0xFF00 & 0x100) > 0)
|
else {
|
||||||
{
|
ignore3 = null;
|
||||||
packet.readInteger();
|
|
||||||
packet.readInteger();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HFloorItem[] parse(HPacket packet) {
|
public static HFloorItem[] parse(HPacket packet) {
|
||||||
int ownersCount = packet.readInteger();
|
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++)
|
for (int i = 0; i < ownersCount; i++)
|
||||||
owners.put(packet.readInteger(), packet.readString());
|
owners.put(packet.readInteger(), packet.readString());
|
||||||
@ -126,6 +73,75 @@ public class HFloorItem implements IFurni {
|
|||||||
return furniture;
|
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
|
@Override
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return id;
|
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);
|
this(header);
|
||||||
for (int i = 0; i < objects.length; i++) {
|
for (int i = 0; i < objects.length; i++) {
|
||||||
Object o = objects[i];
|
Object o = objects[i];
|
||||||
if (o instanceof Byte) {
|
appendObject(o);
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
isEdited = false;
|
isEdited = false;
|
||||||
@ -475,6 +461,28 @@ public class HPacket implements StringifyAble {
|
|||||||
appendBytes(s.getBytes(StandardCharsets.ISO_8859_1));
|
appendBytes(s.getBytes(StandardCharsets.ISO_8859_1));
|
||||||
return this;
|
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) {
|
public HPacket removeFrom(int index) {
|
||||||
return removeRange(index, packetInBytes.length - index);
|
return removeRange(index, packetInBytes.length - index);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user