diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt index cb67e89bd..13d79bef0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/core/util/FriendlyStreams.kt @@ -14,11 +14,11 @@ import net.minecraft.nbt.CompoundTag import net.minecraft.nbt.NbtAccounter import net.minecraft.nbt.NbtIo import net.minecraft.network.FriendlyByteBuf +import net.minecraft.network.chat.Component import net.minecraft.world.item.Item import net.minecraft.world.item.ItemStack import net.minecraftforge.registries.ForgeRegistries import net.minecraftforge.registries.ForgeRegistry -import org.apache.commons.lang3.mutable.MutableInt import java.io.* import java.math.BigDecimal import java.math.BigInteger @@ -239,6 +239,14 @@ fun InputStream.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18 /* 256 } } +fun InputStream.readBinaryComponent(): Component? { + return Component.Serializer.fromJson(readJson()) +} + +fun OutputStream.writeBinaryComponent(component: Component) { + writeJson(Component.Serializer.toJsonTree(component)) +} + fun FriendlyByteBuf.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18)): JsonElement { return ByteBufInputStream(this).readJson(sizeLimit) } @@ -246,3 +254,11 @@ fun FriendlyByteBuf.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18)): fun FriendlyByteBuf.writeJson(value: JsonElement) { ByteBufOutputStream(this).writeJson(value) } + +fun FriendlyByteBuf.readBinaryComponent(): Component { + return Component.Serializer.fromJson(readJson()) ?: throw NullPointerException("Received null component") +} + +fun FriendlyByteBuf.writeBinaryComponent(component: Component) { + writeJson(Component.Serializer.toJsonTree(component)) +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt index b207035f8..683c9953d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/matter/MatterManager.kt @@ -77,6 +77,8 @@ import ru.dbotthepony.mc.otm.core.orNull import ru.dbotthepony.mc.otm.core.readItemType import ru.dbotthepony.mc.otm.core.registryName import ru.dbotthepony.mc.otm.core.stream +import ru.dbotthepony.mc.otm.core.util.readBinaryComponent +import ru.dbotthepony.mc.otm.core.util.writeBinaryComponent import ru.dbotthepony.mc.otm.core.writeItemType import ru.dbotthepony.mc.otm.milliTime import ru.dbotthepony.mc.otm.network.MatteryPacket @@ -1399,7 +1401,7 @@ object MatterManager { val result = SyncPacket( buff.readMap(FriendlyByteBuf::readItemType, FriendlyByteBuf::readMatterValue), - buff.readMap(FriendlyByteBuf::readItemType) { self -> self.readCollection(::ArrayList, FriendlyByteBuf::readComponent) } + buff.readMap(FriendlyByteBuf::readItemType) { self -> self.readCollection(::ArrayList, FriendlyByteBuf::readBinaryComponent) } ) LOGGER.debug("Reading matter registry packet took ${time.millis}ms") @@ -1414,7 +1416,7 @@ object MatterManager { override fun write(buff: FriendlyByteBuf) { val time = SystemTime() buff.writeMap(values, FriendlyByteBuf::writeItemType, FriendlyByteBuf::writeMatterValue) - buff.writeMap(comments, FriendlyByteBuf::writeItemType) { self, value -> self.writeCollection(value, FriendlyByteBuf::writeComponent) } + buff.writeMap(comments, FriendlyByteBuf::writeItemType) { self, value -> self.writeCollection(value, FriendlyByteBuf::writeBinaryComponent) } LOGGER.debug("Encoding matter registry packet took ${time.millis}ms, written total ${buff.writerIndex() - 1} bytes") }