Skip to content

Commit 9759388

Browse files
committed
Expand ItemDefinition so it can be used with ItemComponentPacket
1 parent 1d0cca2 commit 9759388

File tree

8 files changed

+48
-47
lines changed

8 files changed

+48
-47
lines changed

bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/serializer/ItemComponentSerializer_v419.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.cloudburstmc.nbt.NbtMap;
77
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
88
import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer;
9-
import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData;
9+
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
1010
import org.cloudburstmc.protocol.bedrock.packet.ItemComponentPacket;
1111

1212
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@@ -17,8 +17,8 @@ public class ItemComponentSerializer_v419 implements BedrockPacketSerializer<Ite
1717
@Override
1818
public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ItemComponentPacket packet) {
1919
helper.writeArray(buffer, packet.getItems(), (buf, packetHelper, item) -> {
20-
packetHelper.writeString(buf, item.getName());
21-
packetHelper.writeTag(buf, item.getData());
20+
packetHelper.writeString(buf, item.getIdentifier());
21+
packetHelper.writeTag(buf, item.getComponentData());
2222
});
2323
}
2424

@@ -27,7 +27,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemComponent
2727
helper.readArray(buffer, packet.getItems(), (buf, packetHelper) -> {
2828
String name = packetHelper.readString(buf);
2929
NbtMap data = packetHelper.readTag(buf, NbtMap.class);
30-
return ComponentItemData.fromLegacyItem(name, data);
30+
return new SimpleItemDefinition(name, 0, 0, true, data);
3131
});
3232
}
3333
}

bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v419/serializer/StartGameSerializer_v419.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ protected void readItemDefinitions(ByteBuf buffer, BedrockCodecHelper helper, Li
193193
String identifier = packetHelper.readString(buf);
194194
short id = buf.readShortLE();
195195
boolean componentBased = buf.readBoolean();
196-
return new SimpleItemDefinition(identifier, id, componentBased);
196+
return new SimpleItemDefinition(identifier, id, 0, componentBased, componentBased ? NbtMap.EMPTY : null);
197197
});
198198
}
199199
}

bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/codec/v776/serializer/ItemComponentSerializer_v776.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import org.cloudburstmc.nbt.NbtMap;
77
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodecHelper;
88
import org.cloudburstmc.protocol.bedrock.codec.BedrockPacketSerializer;
9-
import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData;
9+
import org.cloudburstmc.protocol.bedrock.data.definitions.SimpleItemDefinition;
1010
import org.cloudburstmc.protocol.bedrock.packet.ItemComponentPacket;
1111
import org.cloudburstmc.protocol.common.util.VarInts;
1212

@@ -17,11 +17,15 @@ public class ItemComponentSerializer_v776 implements BedrockPacketSerializer<Ite
1717
@Override
1818
public void serialize(ByteBuf buffer, BedrockCodecHelper helper, ItemComponentPacket packet) {
1919
helper.writeArray(buffer, packet.getItems(), (buf, packetHelper, item) -> {
20-
packetHelper.writeString(buf, item.getName());
21-
buf.writeShortLE(item.getItemId());
20+
packetHelper.writeString(buf, item.getIdentifier());
21+
buf.writeShortLE(item.getRuntimeId());
2222
buf.writeBoolean(item.isComponentBased());
2323
VarInts.writeInt(buffer, item.getVersion());
24-
packetHelper.writeTag(buf, item.getData());
24+
if (item.isComponentBased()) {
25+
packetHelper.writeTag(buf, item.getComponentData());
26+
} else {
27+
packetHelper.writeTag(buf, NbtMap.EMPTY);
28+
}
2529
});
2630
}
2731

@@ -33,7 +37,7 @@ public void deserialize(ByteBuf buffer, BedrockCodecHelper helper, ItemComponent
3337
boolean componentBased = buf.readBoolean();
3438
int version = VarInts.readInt(buffer);
3539
NbtMap data = packetHelper.readTag(buf, NbtMap.class);
36-
return new ComponentItemData(name, data, itemId, componentBased, version);
40+
return new SimpleItemDefinition(name, itemId, version, componentBased, data);
3741
});
3842
}
3943
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,27 @@
11
package org.cloudburstmc.protocol.bedrock.data.definitions;
22

3+
import org.cloudburstmc.nbt.NbtMap;
34
import org.cloudburstmc.protocol.common.NamedDefinition;
45

56
public interface ItemDefinition extends NamedDefinition {
67
ItemDefinition AIR = new SimpleItemDefinition("minecraft:air", 0, false);
78
ItemDefinition LEGACY_FIREWORK = new SimpleItemDefinition("minecraft:fireworks_rocket", 401, false);
89

10+
/**
11+
* Whether this item is data driven.
12+
* @return true if this item is data driven, false if it is not.
13+
*/
914
boolean isComponentBased();
15+
16+
/**
17+
* Get the component data NBT for this item.
18+
* @return the component data NBT, or null if this item is not data driven.
19+
*/
20+
default NbtMap getComponentData() {
21+
return null;
22+
}
23+
24+
default int getVersion() {
25+
return 0;
26+
}
1027
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,26 @@
11
package org.cloudburstmc.protocol.bedrock.data.definitions;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Value;
45
import lombok.experimental.NonFinal;
6+
import org.cloudburstmc.nbt.NbtMap;
57

68
@Value
79
@NonFinal
10+
@AllArgsConstructor
811
public class SimpleItemDefinition implements ItemDefinition {
912
String identifier;
1013
int runtimeId;
14+
int version;
1115
boolean componentBased;
16+
NbtMap componentData;
17+
18+
// Backwards compatibility constructor
19+
public SimpleItemDefinition(String identifier, int runtimeId, boolean componentBased) {
20+
this.identifier = identifier;
21+
this.runtimeId = runtimeId;
22+
this.componentBased = componentBased;
23+
this.version = 0;
24+
this.componentData = null;
25+
}
1226
}

bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/data/inventory/ComponentItemData.java

-34
This file was deleted.

bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/ItemComponentPacket.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import lombok.Data;
66
import lombok.EqualsAndHashCode;
77
import lombok.ToString;
8-
import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData;
8+
import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition;
99
import org.cloudburstmc.protocol.common.PacketSignal;
1010

1111
import java.util.List;
@@ -18,7 +18,7 @@
1818
@ToString(doNotUseGetters = true)
1919
public class ItemComponentPacket implements BedrockPacket {
2020

21-
private final List<ComponentItemData> items = new ObjectArrayList<>();
21+
private final List<ItemDefinition> items = new ObjectArrayList<>();
2222

2323
@Override
2424
public PacketSignal handle(BedrockPacketHandler handler) {

bedrock-codec/src/main/java/org/cloudburstmc/protocol/bedrock/packet/StartGamePacket.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public class StartGamePacket implements BedrockPacket {
104104
private NbtList<NbtMap> blockPalette;
105105
private final List<BlockPropertyData> blockProperties = new ObjectArrayList<>();
106106
/**
107-
* @deprecated since v776
107+
* @deprecated since v776. Use ItemComponentPacket instead.
108108
*/
109109
private List<ItemDefinition> itemDefinitions = new ObjectArrayList<>();
110110
private String multiplayerCorrelationId;

0 commit comments

Comments
 (0)