package moe.ymc.acron.mixin; import moe.ymc.acron.s2c.Entity; import moe.ymc.acron.s2c.EventQueue; import moe.ymc.acron.s2c.event.EventDisconnected; import moe.ymc.acron.s2c.event.EventPlayerMessage; import net.minecraft.network.ClientConnection; import net.minecraft.server.filter.TextStream; import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ServerPlayNetworkHandler.class) public class ServerPlayNetworkHandlerMixin { private static final Logger AC_LOGGER = LogManager.getLogger(); @Shadow public ServerPlayerEntity player; @Shadow @Final public ClientConnection connection; @Inject(at = @At("RETURN"), method = "handleMessage") private void handleMessage(TextStream.Message message, CallbackInfo ci) { EventQueue.enqueue(new EventPlayerMessage(new Entity(player), message.getRaw())); } @Inject(at = @At("RETURN"), method = "onDisconnected") private void onDisconnected(Text reason, CallbackInfo ci) { EventQueue.enqueue(new EventDisconnected(new Entity(player), reason.getString())); } }