From a8b1a431f95382583f057b25b7f8402b742c8cf4 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sat, 9 Mar 2024 00:44:08 +0800 Subject: [PATCH] Fix plugin messages on Fabric platform (#1248) --- .../common/ServerCommonPacketListenerBridge.java | 4 ++-- .../network/ServerCommonPacketListenerImplMixin.java | 11 +++++------ .../mixin/core/world/entity/LivingEntityMixin.java | 3 +-- .../ServerCommonPacketListenerImplMixin_Fabric.java | 12 +++++++++--- .../ServerCommonPacketListenerImplMixin_Forge.java | 5 +++-- ...ServerCommonPacketListenerImplMixin_NeoForge.java | 4 ++-- 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/network/common/ServerCommonPacketListenerBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/network/common/ServerCommonPacketListenerBridge.java index 8fbf7f8b3..afbef2fa6 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/network/common/ServerCommonPacketListenerBridge.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/network/common/ServerCommonPacketListenerBridge.java @@ -1,7 +1,7 @@ package io.izzel.arclight.common.bridge.core.network.common; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.common.custom.DiscardedPayload; +import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.server.level.ServerPlayer; import org.bukkit.craftbukkit.v.CraftServer; import org.bukkit.craftbukkit.v.entity.CraftPlayer; @@ -22,7 +22,7 @@ public interface ServerCommonPacketListenerBridge { void bridge$setPlayer(ServerPlayer player); - default FriendlyByteBuf bridge$getDiscardedData(DiscardedPayload payload) { + default FriendlyByteBuf bridge$getDiscardedData(ServerboundCustomPayloadPacket packet) { // Todo: use Mixin to save vanilla payload data. return null; } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerCommonPacketListenerImplMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerCommonPacketListenerImplMixin.java index 1b6c2db7b..da2e96d8f 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerCommonPacketListenerImplMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/network/ServerCommonPacketListenerImplMixin.java @@ -13,7 +13,6 @@ import net.minecraft.network.protocol.common.ClientboundDisconnectPacket; import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.network.protocol.common.ServerboundResourcePackPacket; -import net.minecraft.network.protocol.common.custom.DiscardedPayload; import net.minecraft.network.protocol.game.ClientboundSetDefaultSpawnPositionPacket; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -191,8 +190,8 @@ protected Object evaluate() { @Inject(method = "handleCustomPayload", at = @At("HEAD")) private void arclight$customPayload(ServerboundCustomPayloadPacket packet, CallbackInfo ci) { - if (packet.payload() instanceof DiscardedPayload payload && bridge$getDiscardedData(payload) != null) { - var data = bridge$getDiscardedData(payload); + var data = bridge$getDiscardedData(packet); + if (data != null) { var readerIndex = data.readerIndex(); var buf = new byte[data.readableBytes()]; data.readBytes(buf); @@ -202,7 +201,7 @@ protected Object evaluate() { return; } if (this.connection.isConnected()) { - if (payload.id().equals(CUSTOM_REGISTER)) { + if (packet.payload().id().equals(CUSTOM_REGISTER)) { try { String channels = new String(buf, StandardCharsets.UTF_8); for (String channel : channels.split("\0")) { @@ -214,7 +213,7 @@ protected Object evaluate() { LOGGER.error("Couldn't register custom payload", ex); this.bridge$disconnect("Invalid payload REGISTER!"); } - } else if (payload.id().equals(CUSTOM_UNREGISTER)) { + } else if (packet.payload().id().equals(CUSTOM_UNREGISTER)) { try { final String channels = new String(buf, StandardCharsets.UTF_8); for (String channel : channels.split("\0")) { @@ -228,7 +227,7 @@ protected Object evaluate() { } } else { try { - this.bridge$getCraftServer().getMessenger().dispatchIncomingMessage(((ServerPlayerEntityBridge) this.bridge$getPlayer()).bridge$getBukkitEntity(), payload.id().toString(), buf); + this.bridge$getCraftServer().getMessenger().dispatchIncomingMessage(((ServerPlayerEntityBridge) this.bridge$getPlayer()).bridge$getBukkitEntity(), packet.payload().id().toString(), buf); } catch (Exception ex) { LOGGER.error("Couldn't dispatch custom payload", ex); this.bridge$disconnect("Invalid custom payload!"); diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/LivingEntityMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/LivingEntityMixin.java index d79933c00..8016fe07b 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/LivingEntityMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/entity/LivingEntityMixin.java @@ -198,9 +198,8 @@ public abstract class LivingEntityMixin extends EntityMixin implements LivingEnt @Shadow protected abstract void actuallyHurt(DamageSource p_21240_, float p_21241_); @Shadow public abstract void skipDropExperience(); @Shadow public abstract AttributeMap getAttributes(); - // @formatter:on - @Shadow protected abstract void updateGlowingStatus(); + // @formatter:on public int expToDrop; public boolean forceDrops; diff --git a/arclight-fabric/src/main/java/io/izzel/arclight/fabric/mixin/core/network/ServerCommonPacketListenerImplMixin_Fabric.java b/arclight-fabric/src/main/java/io/izzel/arclight/fabric/mixin/core/network/ServerCommonPacketListenerImplMixin_Fabric.java index 4e4231f3c..d529d2d4a 100644 --- a/arclight-fabric/src/main/java/io/izzel/arclight/fabric/mixin/core/network/ServerCommonPacketListenerImplMixin_Fabric.java +++ b/arclight-fabric/src/main/java/io/izzel/arclight/fabric/mixin/core/network/ServerCommonPacketListenerImplMixin_Fabric.java @@ -1,8 +1,10 @@ package io.izzel.arclight.fabric.mixin.core.network; import io.izzel.arclight.common.bridge.core.network.common.ServerCommonPacketListenerBridge; +import net.fabricmc.fabric.impl.networking.payload.RetainedPayload; +import net.fabricmc.fabric.impl.networking.payload.UntypedPayload; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.common.custom.DiscardedPayload; +import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.server.network.ServerCommonPacketListenerImpl; import org.spongepowered.asm.mixin.Mixin; @@ -10,8 +12,12 @@ public abstract class ServerCommonPacketListenerImplMixin_Fabric implements ServerCommonPacketListenerBridge { @Override - public FriendlyByteBuf bridge$getDiscardedData(DiscardedPayload payload) { - // Todo: Payload data. + public FriendlyByteBuf bridge$getDiscardedData(ServerboundCustomPayloadPacket packet) { + if (packet.payload() instanceof RetainedPayload r) { + return r.buf(); + } else if (packet.payload() instanceof UntypedPayload r) { + return r.buffer(); + } return null; } } diff --git a/arclight-forge/src/main/java/io/izzel/arclight/forge/mixin/core/network/ServerCommonPacketListenerImplMixin_Forge.java b/arclight-forge/src/main/java/io/izzel/arclight/forge/mixin/core/network/ServerCommonPacketListenerImplMixin_Forge.java index aa9bb6919..5e1a6cd64 100644 --- a/arclight-forge/src/main/java/io/izzel/arclight/forge/mixin/core/network/ServerCommonPacketListenerImplMixin_Forge.java +++ b/arclight-forge/src/main/java/io/izzel/arclight/forge/mixin/core/network/ServerCommonPacketListenerImplMixin_Forge.java @@ -2,6 +2,7 @@ import io.izzel.arclight.common.bridge.core.network.common.ServerCommonPacketListenerBridge; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.network.protocol.common.custom.DiscardedPayload; import net.minecraft.server.network.ServerCommonPacketListenerImpl; import org.spongepowered.asm.mixin.Mixin; @@ -10,7 +11,7 @@ public abstract class ServerCommonPacketListenerImplMixin_Forge implements ServerCommonPacketListenerBridge { @Override - public FriendlyByteBuf bridge$getDiscardedData(DiscardedPayload payload) { - return payload.data(); + public FriendlyByteBuf bridge$getDiscardedData(ServerboundCustomPayloadPacket packet) { + return packet.getInternalData(); } } diff --git a/arclight-neoforge/src/main/java/io/izzel/arclight/neoforge/mixin/core/network/ServerCommonPacketListenerImplMixin_NeoForge.java b/arclight-neoforge/src/main/java/io/izzel/arclight/neoforge/mixin/core/network/ServerCommonPacketListenerImplMixin_NeoForge.java index ed875837d..a5a9b12df 100644 --- a/arclight-neoforge/src/main/java/io/izzel/arclight/neoforge/mixin/core/network/ServerCommonPacketListenerImplMixin_NeoForge.java +++ b/arclight-neoforge/src/main/java/io/izzel/arclight/neoforge/mixin/core/network/ServerCommonPacketListenerImplMixin_NeoForge.java @@ -2,7 +2,7 @@ import io.izzel.arclight.common.bridge.core.network.common.ServerCommonPacketListenerBridge; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.protocol.common.custom.DiscardedPayload; +import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.server.network.ServerCommonPacketListenerImpl; import org.spongepowered.asm.mixin.Mixin; @@ -10,7 +10,7 @@ public abstract class ServerCommonPacketListenerImplMixin_NeoForge implements ServerCommonPacketListenerBridge { @Override - public FriendlyByteBuf bridge$getDiscardedData(DiscardedPayload payload) { + public FriendlyByteBuf bridge$getDiscardedData(ServerboundCustomPayloadPacket packet) { // Todo: Payload data. return null; }