1 package me.shedaniel.lightoverlay.fabric.mixin;
3 import me.shedaniel.lightoverlay.common.LightOverlayCore;
4 import net.minecraft.network.Connection;
5 import net.minecraft.network.PacketListener;
6 import net.minecraft.network.protocol.Packet;
7 import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
8 import net.minecraft.network.protocol.game.ClientboundLightUpdatePacket;
9 import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket;
10 import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket;
11 import net.minecraft.world.level.ChunkPos;
12 import org.spongepowered.asm.mixin.Mixin;
13 import org.spongepowered.asm.mixin.injection.At;
14 import org.spongepowered.asm.mixin.injection.Inject;
15 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
17 @Mixin(Connection.class)
18 public class MixinClientConnection {
19 @Inject(method = "genericsFtw", at = @At("HEAD"))
20 private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) {
21 if (packet instanceof ClientboundBlockUpdatePacket) {
22 LightOverlayCore.queueChunkAndNear(new ChunkPos(((ClientboundBlockUpdatePacket) packet).getPos()));
23 } else if (packet instanceof ClientboundSetChunkCacheCenterPacket) {
24 LightOverlayCore.queueChunkAndNear(new ChunkPos(((ClientboundSetChunkCacheCenterPacket) packet).getX(), ((ClientboundSetChunkCacheCenterPacket) packet).getZ()));
25 } else if (packet instanceof ClientboundSectionBlocksUpdatePacket) {
26 LightOverlayCore.queueChunkAndNear(new ChunkPos(((ClientboundSectionBlocksUpdatePacket) packet).sectionPos.getX(), ((ClientboundSectionBlocksUpdatePacket) packet).sectionPos.getZ()));
27 } else if (packet instanceof ClientboundLightUpdatePacket) {
28 LightOverlayCore.queueChunk(new ChunkPos(((ClientboundLightUpdatePacket) packet).getX(), ((ClientboundLightUpdatePacket) packet).getZ()));