1 package com.irtimaled.bbor.mixin.network.play.server;
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.play.ClientPlayNetHandler;
9 import net.minecraft.client.network.play.IClientPlayNetHandler;
10 import net.minecraft.network.PacketBuffer;
11 import net.minecraft.network.play.server.SCustomPayloadPlayPacket;
12 import net.minecraft.util.ResourceLocation;
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;
18 @Mixin(SCustomPayloadPlayPacket.class)
19 public abstract class MixinSCustomPayloadPlayPacket {
21 private ResourceLocation channel;
23 @Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/play/IClientPlayNetHandler;handleCustomPayload(Lnet/minecraft/network/play/server/SCustomPayloadPlayPacket;)V"))
24 private void processPacket(IClientPlayNetHandler netHandlerPlayClient, SCustomPayloadPlayPacket packet) {
25 String channelName = channel.toString();
26 if (channelName.startsWith("bbor:")) {
27 PacketBuffer data = null;
29 data = packet.getBufferData();
30 PayloadReader reader = new PayloadReader(data);
31 switch (channelName) {
32 case InitializeClient.NAME: {
33 EventBus.publish(InitializeClient.getEvent(reader));
34 ((ClientPlayNetHandler) netHandlerPlayClient).sendPacket(SubscribeToServer.getPayload().build());
37 case AddBoundingBox.NAME:
38 case AddBoundingBox.LEGACY: {
39 EventBus.publish(AddBoundingBox.getEvent(reader, channelName));
48 netHandlerPlayClient.handleCustomPayload(packet);