Mirror von
https://github.com/ViaVersion/ViaVersion.git
synchronisiert 2024-10-03 08:41:05 +02:00
Handle empty items in pre 1.20.5 protocols
Maps empty items to null on read in 1.13, 1.13.2 and 1.20.2 item types and handles the empty item->null transition in 1.10->1.11
Dieser Commit ist enthalten in:
Ursprung
b77d0fedd9
Commit
0dd7dfe2f3
@ -44,13 +44,16 @@ public class ItemType1_13 extends Type<Item> {
|
|||||||
item.setIdentifier(id);
|
item.setIdentifier(id);
|
||||||
item.setAmount(buffer.readByte());
|
item.setAmount(buffer.readByte());
|
||||||
item.setTag(Types.NAMED_COMPOUND_TAG.read(buffer));
|
item.setTag(Types.NAMED_COMPOUND_TAG.read(buffer));
|
||||||
|
if (item.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ByteBuf buffer, @Nullable Item object) {
|
public void write(ByteBuf buffer, @Nullable Item object) {
|
||||||
if (object == null) {
|
if (object == null || object.isEmpty()) {
|
||||||
buffer.writeShort(-1);
|
buffer.writeShort(-1);
|
||||||
} else {
|
} else {
|
||||||
buffer.writeShort(object.identifier());
|
buffer.writeShort(object.identifier());
|
||||||
|
@ -44,13 +44,16 @@ public class ItemType1_13_2 extends Type<Item> {
|
|||||||
item.setIdentifier(Types.VAR_INT.readPrimitive(buffer));
|
item.setIdentifier(Types.VAR_INT.readPrimitive(buffer));
|
||||||
item.setAmount(buffer.readByte());
|
item.setAmount(buffer.readByte());
|
||||||
item.setTag(Types.NAMED_COMPOUND_TAG.read(buffer));
|
item.setTag(Types.NAMED_COMPOUND_TAG.read(buffer));
|
||||||
|
if (item.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(ByteBuf buffer, @Nullable Item object) {
|
public void write(ByteBuf buffer, @Nullable Item object) {
|
||||||
if (object == null) {
|
if (object == null || object.isEmpty()) {
|
||||||
buffer.writeBoolean(false);
|
buffer.writeBoolean(false);
|
||||||
} else {
|
} else {
|
||||||
buffer.writeBoolean(true);
|
buffer.writeBoolean(true);
|
||||||
|
@ -45,12 +45,15 @@ public class ItemType1_20_2 extends Type<Item> {
|
|||||||
item.setIdentifier(Types.VAR_INT.readPrimitive(buffer));
|
item.setIdentifier(Types.VAR_INT.readPrimitive(buffer));
|
||||||
item.setAmount(buffer.readByte());
|
item.setAmount(buffer.readByte());
|
||||||
item.setTag(Types.COMPOUND_TAG.read(buffer));
|
item.setTag(Types.COMPOUND_TAG.read(buffer));
|
||||||
|
if (item.isEmpty()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(final ByteBuf buffer, @Nullable final Item object) {
|
public void write(final ByteBuf buffer, @Nullable final Item object) {
|
||||||
if (object == null) {
|
if (object == null || object.isEmpty()) {
|
||||||
buffer.writeBoolean(false);
|
buffer.writeBoolean(false);
|
||||||
} else {
|
} else {
|
||||||
buffer.writeBoolean(true);
|
buffer.writeBoolean(true);
|
||||||
|
@ -74,6 +74,10 @@ public class ItemPacketRewriter1_11 extends ItemRewriter<ClientboundPackets1_9_3
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item handleItemToClient(UserConnection connection, Item item) {
|
public Item handleItemToClient(UserConnection connection, Item item) {
|
||||||
|
if (item != null && item.isEmpty()) {
|
||||||
|
// Map empty items to null
|
||||||
|
return null;
|
||||||
|
}
|
||||||
EntityMappings1_11.toClientItem(item);
|
EntityMappings1_11.toClientItem(item);
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
@ -355,12 +355,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Item handleItemToClient(final UserConnection connection, @Nullable final Item item) {
|
public Item handleItemToClient(final UserConnection connection, final Item item) {
|
||||||
if (item == null) {
|
|
||||||
// We no longer want null items, always unify them to empty
|
|
||||||
return StructuredItem.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the original as custom data, to be re-used for creative clients as well
|
// Add the original as custom data, to be re-used for creative clients as well
|
||||||
final CompoundTag tag = item.tag();
|
final CompoundTag tag = item.tag();
|
||||||
if (tag != null) {
|
if (tag != null) {
|
||||||
@ -380,12 +375,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter<Clientboun
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Item handleItemToServer(UserConnection connection, final Item item) {
|
public Item handleItemToServer(UserConnection connection, final Item item) {
|
||||||
if (item.isEmpty()) {
|
|
||||||
// Empty to null for the old protocols
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.handleItemToServer(connection, item);
|
super.handleItemToServer(connection, item);
|
||||||
return toOldItem(connection, item, DATA_CONVERTER);
|
return toOldItem(connection, item, DATA_CONVERTER);
|
||||||
}
|
}
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren