]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/mixin/network/play/server/MixinSCustomPayloadPlayPacket.java
Setup for 1.16.3 Fabric
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / mixin / network / play / server / MixinSCustomPayloadPlayPacket.java
1 package com.irtimaled.bbor.mixin.network.play.server;
2
3 import com.irtimaled.bbor.common.EventBus;
4 import com.irtimaled.bbor.common.messages.AddBoundingBox;
5 import com.irtimaled.bbor.common.messages.InitializeClient;
6 import com.irtimaled.bbor.common.messages.PayloadReader;
7 import com.irtimaled.bbor.common.messages.SubscribeToServer;
8 import net.minecraft.client.network.ClientPlayNetworkHandler;
9 import net.minecraft.network.PacketByteBuf;
10 import net.minecraft.network.listener.ClientPlayPacketListener;
11 import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
12 import net.minecraft.util.Identifier;
13 import org.spongepowered.asm.mixin.Mixin;
14 import org.spongepowered.asm.mixin.Shadow;
15 import org.spongepowered.asm.mixin.injection.At;
16 import org.spongepowered.asm.mixin.injection.Redirect;
17
18 @Mixin(CustomPayloadS2CPacket.class)
19 public abstract class MixinSCustomPayloadPlayPacket {
20     @Shadow
21     private Identifier channel;
22
23     @Redirect(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/listener/ClientPlayPacketListener;onCustomPayload(Lnet/minecraft/network/packet/s2c/play/CustomPayloadS2CPacket;)V"))
24     private void processPacket(ClientPlayPacketListener netHandlerPlayClient, CustomPayloadS2CPacket packet) {
25         String channelName = channel.toString();
26         if (channelName.startsWith("bbor:")) {
27             PacketByteBuf data = null;
28             try {
29                 data = packet.getData();
30                 PayloadReader reader = new PayloadReader(data);
31                 switch (channelName) {
32                     case InitializeClient.NAME: {
33                         EventBus.publish(InitializeClient.getEvent(reader));
34                         ((ClientPlayNetworkHandler) netHandlerPlayClient).sendPacket(SubscribeToServer.getPayload().build());
35                         break;
36                     }
37                     case AddBoundingBox.NAME: {
38                         EventBus.publish(AddBoundingBox.getEvent(reader));
39                         break;
40                     }
41                 }
42             } finally {
43                 if (data != null)
44                     data.release();
45             }
46         } else {
47             netHandlerPlayClient.onCustomPayload(packet);
48         }
49     }
50 }