diff --git a/src/main/java/com/minelittlepony/unicopia/network/track/DataTracker.java b/src/main/java/com/minelittlepony/unicopia/network/track/DataTracker.java index 22e9335d..1c99f1cb 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/track/DataTracker.java +++ b/src/main/java/com/minelittlepony/unicopia/network/track/DataTracker.java @@ -29,7 +29,7 @@ public class DataTracker { } public Entry startTracking(T value) { - Entry entry = startTracking(TrackableDataType.NBT, value.toTrackedNbt()); + Entry entry = startTracking(TrackableDataType.COMPRESSED_NBT, value.toTrackedNbt()); persistentObjects.put(entry.id(), value); return entry; } @@ -136,6 +136,7 @@ public class DataTracker { tracker.set(this, t); } } + static class Pair { private final TrackableDataType type; public final int id; diff --git a/src/main/java/com/minelittlepony/unicopia/network/track/MsgTrackedValues.java b/src/main/java/com/minelittlepony/unicopia/network/track/MsgTrackedValues.java index a8483855..0baa2a9b 100644 --- a/src/main/java/com/minelittlepony/unicopia/network/track/MsgTrackedValues.java +++ b/src/main/java/com/minelittlepony/unicopia/network/track/MsgTrackedValues.java @@ -50,7 +50,7 @@ public record MsgTrackedValues( this( buffer.readInt(), buffer.readCollection(HashSet::new, PacketByteBuf::readUuid), - buffer.readMap(HashMap::new, PacketByteBuf::readUuid, PacketCodec.NBT::read) + buffer.readMap(HashMap::new, PacketByteBuf::readUuid, PacketCodec.COMPRESSED_NBT::read) ); } @@ -58,7 +58,7 @@ public record MsgTrackedValues( public void write(PacketByteBuf buffer) { buffer.writeInt(id); buffer.writeCollection(removedValues, PacketByteBuf::writeUuid); - buffer.writeMap(values, PacketByteBuf::writeUuid, PacketCodec.NBT::write); + buffer.writeMap(values, PacketByteBuf::writeUuid, PacketCodec.COMPRESSED_NBT::write); } } diff --git a/src/main/java/com/minelittlepony/unicopia/util/serialization/PacketCodec.java b/src/main/java/com/minelittlepony/unicopia/util/serialization/PacketCodec.java index b4674ba1..03336ec2 100644 --- a/src/main/java/com/minelittlepony/unicopia/util/serialization/PacketCodec.java +++ b/src/main/java/com/minelittlepony/unicopia/util/serialization/PacketCodec.java @@ -2,7 +2,6 @@ package com.minelittlepony.unicopia.util.serialization; import java.io.IOException; import java.io.InputStream; -import java.io.OutputStream; import java.util.Optional; import java.util.UUID; import java.util.function.BiConsumer; @@ -12,6 +11,7 @@ import java.util.function.Supplier; import io.netty.buffer.ByteBufInputStream; import io.netty.buffer.ByteBufOutputStream; +import io.netty.buffer.Unpooled; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtIo; import net.minecraft.network.PacketByteBuf; @@ -33,16 +33,26 @@ public record PacketCodec(PacketByteBuf.PacketReader reader, PacketByteBuf public static final PacketCodec IDENTIFIER = STRING.xMap(Identifier::new, Identifier::toString); public static final PacketCodec NBT = new PacketCodec<>(PacketByteBuf::readNbt, PacketByteBuf::writeNbt); - public static final PacketCodec COMPRESSED_NBT = new PacketCodec<>(buffer -> { + + public static final PacketCodec RAW_BYTES = new PacketCodec<>( + buffer -> new PacketByteBuf(buffer.readBytes(buffer.readInt())), + (buffer, bytes) -> { + buffer.writeInt(bytes.writerIndex()); + buffer.writeBytes(bytes); + }); + public static final PacketCodec COMPRESSED_NBT = RAW_BYTES.xMap(buffer -> { try (InputStream in = new ByteBufInputStream(buffer)) { return NbtIo.readCompressed(in); } catch (IOException e) { throw new RuntimeException(e); } - }, (buffer, nbt) -> { - try (OutputStream out = new ByteBufOutputStream(buffer)) { + }, nbt -> { + var buffer = new PacketByteBuf(Unpooled.buffer()); + try (ByteBufOutputStream out = new ByteBufOutputStream(buffer)) { NbtIo.writeCompressed(nbt, out); + return buffer; } catch (IOException e) { + throw new RuntimeException(e); } });