diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/BenchedMove.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/BenchedMove.kt index 9ea3856715..925e3785cc 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/BenchedMove.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/BenchedMove.kt @@ -12,9 +12,12 @@ import com.cobblemon.mod.common.api.reactive.SimpleObservable import com.cobblemon.mod.common.net.IntSize import com.cobblemon.mod.common.util.DataKeys import com.cobblemon.mod.common.util.readSizedInt +import com.cobblemon.mod.common.util.readString import com.cobblemon.mod.common.util.writeSizedInt +import com.cobblemon.mod.common.util.writeString import com.google.gson.JsonArray import com.google.gson.JsonObject +import io.netty.buffer.ByteBuf import net.minecraft.nbt.NbtCompound import net.minecraft.nbt.NbtList import net.minecraft.network.PacketByteBuf @@ -59,7 +62,7 @@ class BenchedMoves : Iterable { return json } - fun saveToBuffer(buffer: PacketByteBuf) { + fun saveToBuffer(buffer: ByteBuf) { buffer.writeShort(benchedMoves.size) benchedMoves.forEach { it.saveToBuffer(buffer) } } @@ -81,7 +84,7 @@ class BenchedMoves : Iterable { return this } - fun loadFromBuffer(buffer: PacketByteBuf): BenchedMoves { + fun loadFromBuffer(buffer: ByteBuf): BenchedMoves { doThenEmit { clear() repeat(times = buffer.readShort().toInt()) { @@ -105,7 +108,7 @@ data class BenchedMove(val moveTemplate: MoveTemplate, val ppRaisedStages: Int) return json } - fun saveToBuffer(buffer: PacketByteBuf) { + fun saveToBuffer(buffer: ByteBuf) { buffer.writeString(moveTemplate.name) buffer.writeSizedInt(IntSize.U_BYTE, ppRaisedStages) } @@ -127,7 +130,7 @@ data class BenchedMove(val moveTemplate: MoveTemplate, val ppRaisedStages: Int) ) } - fun loadFromBuffer(buffer: PacketByteBuf): BenchedMove { + fun loadFromBuffer(buffer: ByteBuf): BenchedMove { val name = buffer.readString() return BenchedMove( Moves.getByName(name) ?: MoveTemplate.dummy(name), diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/Move.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/Move.kt index 8fdbea78f6..031b43d0ae 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/Move.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/Move.kt @@ -14,6 +14,7 @@ import com.cobblemon.mod.common.api.types.ElementalType import com.cobblemon.mod.common.net.IntSize import com.cobblemon.mod.common.util.DataKeys import com.cobblemon.mod.common.util.readSizedInt +import com.cobblemon.mod.common.util.readString import com.cobblemon.mod.common.util.writeSizedInt import com.cobblemon.mod.common.util.writeString import com.google.gson.JsonObject @@ -137,7 +138,7 @@ open class Move( return Move(template, currentPp, raisedPpStages) } - fun loadFromBuffer(buffer: PacketByteBuf): Move { + fun loadFromBuffer(buffer: ByteBuf): Move { val moveName = buffer.readString() val currentPp = buffer.readSizedInt(IntSize.U_BYTE) val raisedPpStages = buffer.readSizedInt(IntSize.U_BYTE) diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/MoveSet.kt b/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/MoveSet.kt index b825aa1a7f..38ffa15eac 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/MoveSet.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/api/moves/MoveSet.kt @@ -162,7 +162,7 @@ class MoveSet : Iterable { /** * Returns a MoveSet build from given Buffer */ - fun loadFromBuffer(buffer: PacketByteBuf): MoveSet { + fun loadFromBuffer(buffer: ByteBuf): MoveSet { doWithoutEmitting { clear() val amountMoves = buffer.readSizedInt(IntSize.U_BYTE) diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/net/messages/PokemonDTO.kt b/common/src/main/kotlin/com/cobblemon/mod/common/net/messages/PokemonDTO.kt index d0b9e0f36b..1d01228fd8 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/net/messages/PokemonDTO.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/net/messages/PokemonDTO.kt @@ -37,6 +37,7 @@ import com.cobblemon.mod.common.util.readSizedInt import com.cobblemon.mod.common.util.readString import com.cobblemon.mod.common.util.readUuid import com.cobblemon.mod.common.util.writeIdentifier +import com.cobblemon.mod.common.util.writeNbt import com.cobblemon.mod.common.util.writeNullable import com.cobblemon.mod.common.util.writeSizedInt import com.cobblemon.mod.common.util.writeString diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/activestate/PokemonState.kt b/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/activestate/PokemonState.kt index 39e08d971a..f808397f69 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/activestate/PokemonState.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/pokemon/activestate/PokemonState.kt @@ -13,6 +13,7 @@ import com.cobblemon.mod.common.entity.pokemon.PokemonEntity import com.cobblemon.mod.common.pokemon.Pokemon import com.cobblemon.mod.common.util.* import com.google.gson.JsonObject +import io.netty.buffer.ByteBuf import net.minecraft.nbt.NbtCompound import net.minecraft.network.PacketByteBuf import net.minecraft.registry.RegistryKey @@ -30,7 +31,7 @@ sealed class PokemonState { "shouldered" to ShoulderedState::class.java ) - fun fromBuffer(buffer: PacketByteBuf): PokemonState { + fun fromBuffer(buffer: ByteBuf): PokemonState { val type = buffer.readString() return states[type]?.newInstance()?.readFromBuffer(buffer) ?: InactivePokemonState() } @@ -49,10 +50,10 @@ sealed class PokemonState { open fun readFromNBT(nbt: NbtCompound): PokemonState = this open fun writeToJSON(json: JsonObject): JsonObject? = json open fun readFromJSON(json: JsonObject): PokemonState = this - open fun writeToBuffer(buffer: PacketByteBuf) { + open fun writeToBuffer(buffer: ByteBuf) { buffer.writeString(name) } - open fun readFromBuffer(buffer: PacketByteBuf): PokemonState = this + open fun readFromBuffer(buffer: ByteBuf): PokemonState = this } class InactivePokemonState : PokemonState() { override fun writeToNBT(nbt: NbtCompound) = null @@ -78,13 +79,13 @@ class SentOutState() : ActivePokemonState() { override fun writeToNBT(nbt: NbtCompound) = null override fun writeToJSON(json: JsonObject) = null - override fun writeToBuffer(buffer: PacketByteBuf) { + override fun writeToBuffer(buffer: ByteBuf) { super.writeToBuffer(buffer) buffer.writeInt(entityId) buffer.writeString(dimension.value.toString()) } - override fun readFromBuffer(buffer: PacketByteBuf): SentOutState { + override fun readFromBuffer(buffer: ByteBuf): SentOutState { super.readFromBuffer(buffer) entityId = buffer.readInt() dimension = RegistryKey.of(RegistryKey.ofRegistry(dimension.value), Identifier(buffer.readString())) @@ -154,7 +155,7 @@ class ShoulderedState() : ActivePokemonState() { return this } - override fun writeToBuffer(buffer: PacketByteBuf) { + override fun writeToBuffer(buffer: ByteBuf) { super.writeToBuffer(buffer) buffer.writeBoolean(isLeftShoulder) buffer.writeUuid(playerUUID) @@ -162,7 +163,7 @@ class ShoulderedState() : ActivePokemonState() { buffer.writeUuid(pokemonUUID) } - override fun readFromBuffer(buffer: PacketByteBuf): PokemonState { + override fun readFromBuffer(buffer: ByteBuf): PokemonState { super.readFromBuffer(buffer) isLeftShoulder = buffer.readBoolean() playerUUID = buffer.readUuid() diff --git a/common/src/main/kotlin/com/cobblemon/mod/common/util/BufferUtils.kt b/common/src/main/kotlin/com/cobblemon/mod/common/util/BufferUtils.kt index 9f5eaa8951..659f15318f 100644 --- a/common/src/main/kotlin/com/cobblemon/mod/common/util/BufferUtils.kt +++ b/common/src/main/kotlin/com/cobblemon/mod/common/util/BufferUtils.kt @@ -4,10 +4,13 @@ import com.cobblemon.mod.common.api.storage.party.PartyPosition import com.cobblemon.mod.common.api.storage.pc.PCPosition import com.cobblemon.mod.common.net.IntSize import io.netty.buffer.ByteBuf -import java.util.UUID -import kotlin.jvm.optionals.getOrNull +import io.netty.buffer.ByteBufOutputStream +import io.netty.handler.codec.EncoderException import net.minecraft.entity.EntityDimensions import net.minecraft.item.ItemStack +import net.minecraft.nbt.NbtElement +import net.minecraft.nbt.NbtEnd +import net.minecraft.nbt.NbtIo import net.minecraft.nbt.NbtOps import net.minecraft.network.PacketByteBuf import net.minecraft.network.codec.PacketEncoder @@ -15,7 +18,8 @@ import net.minecraft.network.encoding.StringEncoding import net.minecraft.text.Text import net.minecraft.text.TextCodecs import net.minecraft.util.Identifier -import org.apache.commons.io.IOUtils.writer +import java.io.IOException +import java.util.UUID import kotlin.jvm.optionals.getOrNull fun PacketByteBuf.readItemStack(): ItemStack { @@ -153,4 +157,17 @@ fun ByteBuf.writeEnumConstant(value: Enum<*>) { fun > ByteBuf.readEnumConstant(clazz: Class): T { return clazz.getEnumConstants()[this.readInt()] +} + +fun ByteBuf.writeNbt(nbt: NbtElement) { + if (nbt == null) { + NbtIo.writeForPacket(NbtEnd.INSTANCE, ByteBufOutputStream(this)) + } + + try { + NbtIo.writeForPacket(nbt, ByteBufOutputStream(this)) + } catch (var3: IOException) { + val iOException = var3 + throw EncoderException(iOException) + } } \ No newline at end of file