From 0327c86668754523d3efbe247074d88d139f72cc Mon Sep 17 00:00:00 2001 From: senseiwells Date: Tue, 17 Sep 2024 23:02:01 +0100 Subject: [PATCH] Fix #48 for <=1.20.4 --- README.md | 2 +- build.gradle.kts | 2 +- libs.versions.toml | 20 ++++++++---------- .../replay/mixin/chunk/ChunkHolderMixin.java | 4 +++- .../compat/servux/ServuxPacketMixin.java | 21 ------------------- .../chunk/ChunkGamePacketPacketListener.kt | 2 +- .../replay/commands/PackCommand.kt | 2 +- .../replay/recorder/ReplayRecorder.kt | 2 +- .../replay/viewer/ReplayViewerUtils.kt | 21 +++++++++---------- src/main/resources/serverreplay.mixins.json | 1 - 10 files changed, 27 insertions(+), 50 deletions(-) delete mode 100644 src/main/java/me/senseiwells/replay/mixin/compat/servux/ServuxPacketMixin.java diff --git a/README.md b/README.md index 5d90348..216fec0 100644 --- a/README.md +++ b/README.md @@ -450,7 +450,7 @@ repositories { } dependencies { - modImplementation("me.senseiwells:server-replay:1.1.2+1.20.6") + modImplementation("me.senseiwells:server-replay:1.1.3+1.20.4") } ``` diff --git a/build.gradle.kts b/build.gradle.kts index 0b9f7fd..9d5a4f8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,6 +15,7 @@ plugins { val shade: Configuration by configurations.creating repositories { + mavenLocal() maven("https://maven.parchmentmc.org/") maven("https://masa.dy.fi/maven") maven("https://jitpack.io") @@ -45,7 +46,6 @@ dependencies { modCompileOnly(libs.carpet) modCompileOnly(libs.vmp) - modCompileOnly(libs.servux) modCompileOnly(libs.syncmatica) modCompileOnly(libs.voicechat) implementation(libs.voicechat.api) diff --git a/libs.versions.toml b/libs.versions.toml index 941554f..a461e54 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -3,18 +3,17 @@ fabric-loom = "1.7-SNAPSHOT" mod-publish = "0.7.0" kotlin-serialization = "1.9.21" shadow = "8.1.1" -minecraft = "1.20.6" +minecraft = "1.20.4" fabric-loader = "0.16.5" -parchment = "1.20.6:2024.05.01" -fabric-api = "0.99.0+1.20.6" -fabric-kotlin = "1.11.0+kotlin.2.0.0" +parchment = "1.20.4:2024.04.14" +fabric-api = "0.95.3+1.20.4" +fabric-kotlin = "1.9.2+kotlin.1.8.10" permissions = "0.3.1" -carpet = "1.4.141" -voicechat = "fabric-1.20.6-2.5.17" +carpet = "1.4.128" +voicechat = "fabric-1.20.4-2.5.1" voicechat-api = "2.4.0" -vmp = "0.2.0+beta.7.155+1.20.6" -servux = "1.20.6-0.2.0" -syncmatica = "1.20.6-sakura.10" +vmp = "0.2.0+beta.7.139+1.20.4" +syncmatica = "0.3.11" replay-studio = "1e96fda605" [libraries] @@ -27,8 +26,7 @@ carpet = { module = "com.github.gnembon:fabric-carpet" , version.ref voicechat = { module = "maven.modrinth:simple-voice-chat" , version.ref = "voicechat" } voicechat-api = { module = "de.maxhenkel.voicechat:voicechat-api" , version.ref = "voicechat-api" } vmp = { module = "maven.modrinth:vmp-fabric" , version.ref = "vmp" } -servux = { module = "com.github.sakura-ryoko:servux" , version.ref = "servux" } -syncmatica = { module = "com.github.sakura-ryoko:syncmatica" , version.ref = "syncmatica" } +syncmatica = { module = "com.github.sakura:syncmatica" , version.ref = "syncmatica" } replay-studio = { module = "com.github.ReplayMod:ReplayStudio" , version.ref = "replay-studio" } [plugins] diff --git a/src/main/java/me/senseiwells/replay/mixin/chunk/ChunkHolderMixin.java b/src/main/java/me/senseiwells/replay/mixin/chunk/ChunkHolderMixin.java index 6590925..7847d52 100644 --- a/src/main/java/me/senseiwells/replay/mixin/chunk/ChunkHolderMixin.java +++ b/src/main/java/me/senseiwells/replay/mixin/chunk/ChunkHolderMixin.java @@ -8,8 +8,10 @@ import net.minecraft.server.level.ChunkHolder; import net.minecraft.server.level.ChunkMap; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.chunk.LevelChunk; import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -30,7 +32,7 @@ public abstract class ChunkHolderMixin implements ChunkRecordable { @Unique private final Set replay$recorders = new HashSet<>(); - @Shadow @Final private ChunkPos pos; + @Shadow @Final ChunkPos pos; @Shadow public abstract @Nullable LevelChunk getFullChunk(); diff --git a/src/main/java/me/senseiwells/replay/mixin/compat/servux/ServuxPacketMixin.java b/src/main/java/me/senseiwells/replay/mixin/compat/servux/ServuxPacketMixin.java deleted file mode 100644 index c21733c..0000000 --- a/src/main/java/me/senseiwells/replay/mixin/compat/servux/ServuxPacketMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package me.senseiwells.replay.mixin.compat.servux; - -import fi.dy.masa.servux.network.packet.ServuxStructuresPacket; -import me.senseiwells.replay.api.network.RecordablePayload; -import net.minecraft.network.FriendlyByteBuf; -import org.jetbrains.annotations.NotNull; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(value = ServuxStructuresPacket.class, remap = false) -@SuppressWarnings("AddedMixinMembersNamePattern") -public class ServuxPacketMixin implements RecordablePayload { - @Override - public boolean shouldRecord() { - return false; - } - - @Override - public void record(@NotNull FriendlyByteBuf buf) { - - } -} diff --git a/src/main/kotlin/me/senseiwells/replay/chunk/ChunkGamePacketPacketListener.kt b/src/main/kotlin/me/senseiwells/replay/chunk/ChunkGamePacketPacketListener.kt index 232f4d6..dc025e3 100644 --- a/src/main/kotlin/me/senseiwells/replay/chunk/ChunkGamePacketPacketListener.kt +++ b/src/main/kotlin/me/senseiwells/replay/chunk/ChunkGamePacketPacketListener.kt @@ -14,7 +14,7 @@ class ChunkGamePacketPacketListener( recorder.server, RejoinConnection(), player, - CommonListenerCookie.createInitial(recorder.profile, false) + CommonListenerCookie.createInitial(recorder.profile) ) { override fun send(packet: Packet<*>, listener: PacketSendListener?) { this.recorder.record(packet) diff --git a/src/main/kotlin/me/senseiwells/replay/commands/PackCommand.kt b/src/main/kotlin/me/senseiwells/replay/commands/PackCommand.kt index bf187df..7e60bdf 100644 --- a/src/main/kotlin/me/senseiwells/replay/commands/PackCommand.kt +++ b/src/main/kotlin/me/senseiwells/replay/commands/PackCommand.kt @@ -45,7 +45,7 @@ object PackCommand { uuid: UUID = UuidArgument.getUuid(context, "uuid") ): Int { val url = StringArgumentType.getString(context, "url") - val packet = ClientboundResourcePackPushPacket(uuid, url, "", false, Optional.empty()) + val packet = ClientboundResourcePackPushPacket(uuid, url, "", false, null) for (player in context.source.server.playerList.players) { player.connection.send(packet) } diff --git a/src/main/kotlin/me/senseiwells/replay/recorder/ReplayRecorder.kt b/src/main/kotlin/me/senseiwells/replay/recorder/ReplayRecorder.kt index 89833ee..0c0d222 100644 --- a/src/main/kotlin/me/senseiwells/replay/recorder/ReplayRecorder.kt +++ b/src/main/kotlin/me/senseiwells/replay/recorder/ReplayRecorder.kt @@ -916,7 +916,7 @@ abstract class ReplayRecorder( return if (this is ClientboundCustomPayloadPacket) { "CustomPayload(${this.payload.id()})" } else { - this.type().id.toString() + this::class.java.simpleName } } } diff --git a/src/main/kotlin/me/senseiwells/replay/viewer/ReplayViewerUtils.kt b/src/main/kotlin/me/senseiwells/replay/viewer/ReplayViewerUtils.kt index f340810..a49b220 100644 --- a/src/main/kotlin/me/senseiwells/replay/viewer/ReplayViewerUtils.kt +++ b/src/main/kotlin/me/senseiwells/replay/viewer/ReplayViewerUtils.kt @@ -23,24 +23,18 @@ object ReplayViewerUtils { private val CLIENTBOUND_CONFIG_CODEC = ConnectionProtocol.CONFIGURATION.codec(PacketFlow.CLIENTBOUND) fun ReplayPacket.toClientboundPlayPacket(): Packet<*> { - val buf = toFriendlyByteBuf(this.buf) - try { + useByteBuf(this.buf) { buf -> val decoded = CLIENTBOUND_PLAY_CODEC.createPacket(this.id, buf) ?: throw IllegalStateException("Failed to create play packet with id ${this.id}") return fixFabricCustomPayloadPacket(decoded) - } finally { - buf.release() } } fun ReplayPacket.toClientboundConfigurationPacket(): Packet<*> { - val buf = toFriendlyByteBuf(this.buf) - try { + useByteBuf(this.buf) { buf -> val decoded = CLIENTBOUND_CONFIG_CODEC.createPacket(this.id, buf) ?: throw IllegalStateException("Failed to create configuration packet with id ${this.id}") return fixFabricCustomPayloadPacket(decoded) - } finally { - buf.release() } } @@ -55,17 +49,22 @@ object ReplayViewerUtils { return packet } - private fun toFriendlyByteBuf(buf: com.github.steveice10.netty.buffer.ByteBuf): FriendlyByteBuf { + private inline fun useByteBuf(buf: com.github.steveice10.netty.buffer.ByteBuf, block: (FriendlyByteBuf) -> T): T { // When we compile we map steveice10.netty -> io.netty // We just need this check for dev environment @Suppress("USELESS_IS_CHECK") if (buf is ByteBuf) { - return FriendlyByteBuf(buf) + return block(FriendlyByteBuf(buf)) } val array = ByteArray(buf.readableBytes()) buf.readBytes(array) - return FriendlyByteBuf(Unpooled.wrappedBuffer(array)) + val copy = FriendlyByteBuf(Unpooled.wrappedBuffer(array)) + try { + return block(copy) + } finally { + copy.release() + } } fun ServerGamePacketListenerImpl.sendReplayPacket(packet: Packet<*>) { diff --git a/src/main/resources/serverreplay.mixins.json b/src/main/resources/serverreplay.mixins.json index 7f0a4cb..2993224 100644 --- a/src/main/resources/serverreplay.mixins.json +++ b/src/main/resources/serverreplay.mixins.json @@ -19,7 +19,6 @@ "compat.carpet.ChunkMapMixin", "compat.carpet.EntityPlayerMPFakeMixin", "compat.carpet.NetHandlerPlayServerFakeMixin", - "compat.servux.ServuxPacketMixin", "compat.syncmatica.SyncmaticaPacketPayloadMixin", "compat.vmp.NearbyEntityTrackingMixin", "compat.vmp.TrackedEntityMixin",