From 4ca9b00fac77ae81d9f128075eca9c5e7c2643e2 Mon Sep 17 00:00:00 2001 From: Gungun974 Date: Fri, 7 Mar 2025 20:20:37 +0400 Subject: [PATCH] Make possible to convert `UniversalPacket` to `PacketCustomPayload` --- .../helper/network/NetworkHandler.java | 11 ++++++++--- .../helper/network/UniversalPacket.java | 11 +++++++++++ .../mixin/PacketHandlerClientMixin.java | 9 +++++++++ .../mixin/PacketHandlerServerMixin.java | 19 +++++++++++++++++++ src/main/resources/halplibe.mixins.json | 13 +++++++------ 5 files changed, 54 insertions(+), 9 deletions(-) create mode 100644 src/main/java/turniplabs/halplibe/mixin/PacketHandlerServerMixin.java diff --git a/src/main/java/turniplabs/halplibe/helper/network/NetworkHandler.java b/src/main/java/turniplabs/halplibe/helper/network/NetworkHandler.java index 0ce4cf7..a2100f6 100644 --- a/src/main/java/turniplabs/halplibe/helper/network/NetworkHandler.java +++ b/src/main/java/turniplabs/halplibe/helper/network/NetworkHandler.java @@ -5,12 +5,14 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.entity.player.Player; import net.minecraft.core.net.packet.Packet; +import net.minecraft.core.net.packet.PacketCustomPayload; import net.minecraft.server.MinecraftServer; import net.minecraft.server.entity.player.PlayerServer; import org.jetbrains.annotations.NotNull; import turniplabs.halplibe.helper.EnvironmentHelper; import java.lang.reflect.InvocationTargetException; +import java.nio.ByteBuffer; import java.util.*; import java.util.function.BiConsumer; import java.util.function.Function; @@ -125,9 +127,12 @@ private static void sendToPlayerServer(Player player, NetworkMessage message) } @Environment(EnvType.SERVER) - public static void sendToPlayerMessagesConfiguration(Player player) - { - ((PlayerServer)player).playerNetServerHandler.sendPacket(encode(new MessageIdsNetworkMessage(packetIds))); + public static void sendToPlayerMessagesConfiguration(Player player) { + ((PlayerServer) player).playerNetServerHandler.sendPacket( + encode( + new MessageIdsNetworkMessage(packetIds) + ).toPacketCustomPayload() + ); } /** diff --git a/src/main/java/turniplabs/halplibe/helper/network/UniversalPacket.java b/src/main/java/turniplabs/halplibe/helper/network/UniversalPacket.java index e565703..33145df 100644 --- a/src/main/java/turniplabs/halplibe/helper/network/UniversalPacket.java +++ b/src/main/java/turniplabs/halplibe/helper/network/UniversalPacket.java @@ -7,6 +7,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.core.net.handler.PacketHandler; import net.minecraft.core.net.packet.Packet; +import net.minecraft.core.net.packet.PacketCustomPayload; import org.jetbrains.annotations.NotNull; import turniplabs.halplibe.helper.EnvironmentHelper; import turniplabs.halplibe.mixin.accessors.PacketHandlerServerAccessor; @@ -30,6 +31,16 @@ public UniversalPacket() { this.readIndex = 0; } + public UniversalPacket(PacketCustomPayload packetCustomPayload) { + this.buffer = packetCustomPayload.data; + this.writeIndex = packetCustomPayload.data.length - 1; + this.readIndex = 0; + } + + public PacketCustomPayload toPacketCustomPayload() { + return new PacketCustomPayload("HALPLIBE", buffer); + } + @Deprecated public void read(DataInputStream dis) throws IOException { final int length = dis.readInt(); diff --git a/src/main/java/turniplabs/halplibe/mixin/PacketHandlerClientMixin.java b/src/main/java/turniplabs/halplibe/mixin/PacketHandlerClientMixin.java index 6548d7a..1c332ab 100644 --- a/src/main/java/turniplabs/halplibe/mixin/PacketHandlerClientMixin.java +++ b/src/main/java/turniplabs/halplibe/mixin/PacketHandlerClientMixin.java @@ -2,11 +2,13 @@ import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.net.handler.PacketHandlerClient; +import net.minecraft.core.net.packet.PacketCustomPayload; import net.minecraft.core.net.packet.PacketLogin; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import turniplabs.halplibe.helper.network.UniversalPacket; import turniplabs.halplibe.util.RecipeEntrypoint; @Mixin(value = PacketHandlerClient.class,remap = false) @@ -15,4 +17,11 @@ public class PacketHandlerClientMixin { public void handleLogin(PacketLogin packet1login, CallbackInfo ci) { FabricLoader.getInstance().getEntrypoints("recipesReady", RecipeEntrypoint.class).forEach(RecipeEntrypoint::initNamespaces); } + + @Inject(method = "handleCustomPayload", at = @At(value = "TAIL")) + public void handleCustomPayload(PacketCustomPayload customPayloadPacket, CallbackInfo ci) { + if ("HALPLIBE".equals(customPayloadPacket.channel)) { + new UniversalPacket(customPayloadPacket).handlePacket((PacketHandlerClient) ((Object) this)); + } + } } diff --git a/src/main/java/turniplabs/halplibe/mixin/PacketHandlerServerMixin.java b/src/main/java/turniplabs/halplibe/mixin/PacketHandlerServerMixin.java new file mode 100644 index 0000000..f75c0df --- /dev/null +++ b/src/main/java/turniplabs/halplibe/mixin/PacketHandlerServerMixin.java @@ -0,0 +1,19 @@ +package turniplabs.halplibe.mixin; + +import net.minecraft.core.net.packet.PacketCustomPayload; +import net.minecraft.server.net.handler.PacketHandlerServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import turniplabs.halplibe.helper.network.UniversalPacket; + +@Mixin(value = PacketHandlerServer.class,remap = false) +public class PacketHandlerServerMixin { + @Inject(method = "handleCustomPayload", at = @At(value = "TAIL")) + public void handleCustomPayload(PacketCustomPayload customPayloadPacket, CallbackInfo ci) { + if ("HALPLIBE".equals(customPayloadPacket.channel)) { + new UniversalPacket(customPayloadPacket).handlePacket((PacketHandlerServer) ((Object) this)); + } + } +} diff --git a/src/main/resources/halplibe.mixins.json b/src/main/resources/halplibe.mixins.json index 3a1b026..33fb836 100644 --- a/src/main/resources/halplibe.mixins.json +++ b/src/main/resources/halplibe.mixins.json @@ -9,24 +9,25 @@ "accessors.BlockAccessor", "accessors.BlocksAccessor", "accessors.LanguageAccessor", + "accessors.PacketHandlerServerAccessor", "accessors.WeightedRandomBagAccessor", - "accessors.WeightedRandomBagEntryAccessor", - "accessors.PacketHandlerServerAccessor" + "accessors.WeightedRandomBagEntryAccessor" ], "client": [ "MinecraftMixin", "PacketHandlerClientMixin", + "accessors.EntityFireflyFXAccessor", + "accessors.EntityFXAccessor", "models.BlockColorDispatcherMixin", "models.BlockModelDispatcherMixin", "models.EntityRenderDispatcherMixin", "models.ItemModelDispatcherMixin", - "models.TileEntityRendererDispatcherMixin", - "accessors.EntityFireflyFXAccessor", - "accessors.EntityFXAccessor" + "models.TileEntityRendererDispatcherMixin" ], "server": [ "MinecraftServerMixin", - "PacketHandlerLoginMixin" + "PacketHandlerLoginMixin", + "PacketHandlerServerMixin" ], "injectors": { "defaultRequire": 1