mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 17:37:58 -04:00
Slot and NBT reading for 1.8+
This commit is contained in:
parent
36a4ab26a8
commit
fa5b9a2f08
@ -29,6 +29,14 @@ public class CompoundTag implements Tag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public CompoundTag(boolean subTag, InByteBuffer buffer) {
|
public CompoundTag(boolean subTag, InByteBuffer buffer) {
|
||||||
|
if (buffer.readByte() == 0) {
|
||||||
|
// no nbt
|
||||||
|
name = null;
|
||||||
|
data = new HashMap<>();
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
buffer.setPosition(buffer.getPosition() - 1);
|
||||||
|
}
|
||||||
if (!subTag) {
|
if (!subTag) {
|
||||||
if (buffer.readByte() != TagTypes.COMPOUND.getId()) { // will be a Compound Tag
|
if (buffer.readByte() != TagTypes.COMPOUND.getId()) { // will be a Compound Tag
|
||||||
// decompressed but still bad.... :(
|
// decompressed but still bad.... :(
|
||||||
@ -86,6 +94,11 @@ public class CompoundTag implements Tag {
|
|||||||
this(false, buffer);
|
this(false, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompoundTag() {
|
||||||
|
name = null;
|
||||||
|
data = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TagTypes getType() {
|
public TagTypes getType() {
|
||||||
return TagTypes.COMPOUND;
|
return TagTypes.COMPOUND;
|
||||||
|
@ -33,7 +33,7 @@ public class PacketBlockEntityMetadata implements ClientboundPacket {
|
|||||||
case VERSION_1_7_10:
|
case VERSION_1_7_10:
|
||||||
position = buffer.readBlockPositionShort();
|
position = buffer.readBlockPositionShort();
|
||||||
action = Action.byId(buffer.readByte());
|
action = Action.byId(buffer.readByte());
|
||||||
nbt = buffer.readNBT();
|
nbt = buffer.readNBT(true);
|
||||||
break;
|
break;
|
||||||
case VERSION_1_8:
|
case VERSION_1_8:
|
||||||
position = buffer.readPosition();
|
position = buffer.readPosition();
|
||||||
|
@ -21,7 +21,6 @@ import de.bixilon.minosoft.game.datatypes.inventory.Slot;
|
|||||||
import de.bixilon.minosoft.game.datatypes.particle.*;
|
import de.bixilon.minosoft.game.datatypes.particle.*;
|
||||||
import de.bixilon.minosoft.game.datatypes.world.BlockPosition;
|
import de.bixilon.minosoft.game.datatypes.world.BlockPosition;
|
||||||
import de.bixilon.minosoft.nbt.tag.CompoundTag;
|
import de.bixilon.minosoft.nbt.tag.CompoundTag;
|
||||||
import de.bixilon.minosoft.nbt.tag.TagTypes;
|
|
||||||
import de.bixilon.minosoft.util.BitByte;
|
import de.bixilon.minosoft.util.BitByte;
|
||||||
import de.bixilon.minosoft.util.Util;
|
import de.bixilon.minosoft.util.Util;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
@ -234,15 +233,12 @@ public class InByteBuffer {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompoundTag readNBT() {
|
public CompoundTag readNBT(boolean compressed) {
|
||||||
|
if (compressed) {
|
||||||
if (readByte() != TagTypes.COMPOUND.getId()) { // will be a Compound Tag
|
|
||||||
// maybe compressed
|
|
||||||
setPosition(getPosition() - 1);
|
|
||||||
short length = readShort();
|
short length = readShort();
|
||||||
if (length == -1) {
|
if (length == -1) {
|
||||||
// no nbt data here...
|
// no nbt data here...
|
||||||
return null;
|
return new CompoundTag();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return new CompoundTag(new InByteBuffer(Util.decompressGzip(readBytes(length))));
|
return new CompoundTag(new InByteBuffer(Util.decompressGzip(readBytes(length))));
|
||||||
@ -253,18 +249,29 @@ public class InByteBuffer {
|
|||||||
}
|
}
|
||||||
// try again
|
// try again
|
||||||
}
|
}
|
||||||
setPosition(getPosition() - 1);
|
|
||||||
return new CompoundTag(this);
|
return new CompoundTag(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompoundTag readNBT() {
|
||||||
|
return readNBT(false);
|
||||||
|
}
|
||||||
|
|
||||||
public Slot readSlot(ProtocolVersion v) {
|
public Slot readSlot(ProtocolVersion v) {
|
||||||
switch (v) {
|
switch (v) {
|
||||||
case VERSION_1_7_10:
|
case VERSION_1_7_10: {
|
||||||
short id = readShort();
|
short id = readShort();
|
||||||
if (id != -1) {
|
if (id != -1) {
|
||||||
|
return new Slot(id, readByte(), readShort(), readNBT(true));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case VERSION_1_8: {
|
||||||
|
short id = readShort();
|
||||||
|
if (id == -1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return new Slot(id, readByte(), readShort(), readNBT());
|
return new Slot(id, readByte(), readShort(), readNBT());
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
if (readBoolean()) {
|
if (readBoolean()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user