@@ -687,6 +687,8 @@ func (conn *Conn) handlePacket(pk packet.Packet) error {
687687 return conn .handleResourcePackStack (pk )
688688 case * packet.StartGame :
689689 return conn .handleStartGame (pk )
690+ case * packet.ItemRegistry :
691+ return conn .handleItemRegistry (pk )
690692 case * packet.ChunkRadiusUpdated :
691693 return conn .handleChunkRadiusUpdated (pk )
692694 }
@@ -1055,7 +1057,6 @@ func (conn *Conn) startGame() {
10551057 GameRules : data .GameRules ,
10561058 Time : data .Time ,
10571059 Blocks : data .CustomBlocks ,
1058- Items : data .Items ,
10591060 AchievementsDisabled : true ,
10601061 Generator : 1 ,
10611062 EducationFeaturesEnabled : true ,
@@ -1077,6 +1078,7 @@ func (conn *Conn) startGame() {
10771078 GameVersion : protocol .CurrentVersion ,
10781079 UseBlockNetworkIDHashes : data .UseBlockNetworkIDHashes ,
10791080 })
1081+ _ = conn .WritePacket (& packet.ItemRegistry {Items : data .Items })
10801082 _ = conn .Flush ()
10811083 conn .expect (packet .IDRequestChunkRadius , packet .IDSetLocalPlayerAsInitialised )
10821084}
@@ -1256,7 +1258,6 @@ func (conn *Conn) handleStartGame(pk *packet.StartGame) error {
12561258 Time : pk .Time ,
12571259 ServerBlockStateChecksum : pk .ServerBlockStateChecksum ,
12581260 CustomBlocks : pk .Blocks ,
1259- Items : pk .Items ,
12601261 PlayerMovementSettings : pk .PlayerMovementSettings ,
12611262 WorldGameMode : pk .WorldGameMode ,
12621263 Hardcore : pk .Hardcore ,
@@ -1268,6 +1269,14 @@ func (conn *Conn) handleStartGame(pk *packet.StartGame) error {
12681269 Experiments : pk .Experiments ,
12691270 UseBlockNetworkIDHashes : pk .UseBlockNetworkIDHashes ,
12701271 }
1272+ conn .expect (packet .IDItemRegistry )
1273+ return nil
1274+ }
1275+
1276+ // handleItemRegistry handles an incoming ItemRegistry packet. It contains the item definitions that the client
1277+ // should use, including the shield ID which is necessary for reading and writing items in the future.
1278+ func (conn * Conn ) handleItemRegistry (pk * packet.ItemRegistry ) error {
1279+ conn .gameData .Items = pk .Items
12711280 for _ , item := range pk .Items {
12721281 if item .Name == "minecraft:shield" {
12731282 conn .shieldID .Store (int32 (item .RuntimeID ))
0 commit comments