Muss man eine MutableMap zwischen Minecraft-Server und -Client serialisieren?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

Ich würde für die Kommunikation die Methoden nutzen, die Fabric dir bietet.

Die RegistryByteBuf-Klasse hat eine writeMap- und eine readMap-Methode. Für den Wert eines jeden Eintrags würde ich an deiner Stelle schauen, ob eine AbstractPatternGenerator-Instanz zu einem JSON-String serialisiert werden kann.

Dafür kannst du beispielsweise GSON nutzen. Achte darauf, möglichst nur die wichtigsten Informationen zu inkludieren, die sich die Gegenseite nicht selbst zusammenstellen kann.

Das Schreiben könnte dann ungefähr so aussehen:

val baseBuffer = PacketByteBuf(Unpooled.buffer())
val payload = RegistryByteBuf(baseBuffer, player.world.registryManager)
val data = // get map as Map<Int, String> ...
payload.writeMap(data, PacketByteBuf::writeInt, PacketByteBuf::writeString) 

Und das Lesen so:

val receivedData = RegistryByteBuf(payload, client.world!!.registryManager)
val data = receivedData.readMap({ iterator.readInt() }, { iterator.readString(32767) })

radfl 
Beitragsersteller
 21.01.2025, 16:32

danke, hat so funktioniert!