]> git.lizzy.rs Git - LightOverlay.git/blob - forge/src/main/java/me/shedaniel/lightoverlay/forge/mixin/MixinClientConnection.java
Update to Forge 1.18 and fix #128
[LightOverlay.git] / forge / src / main / java / me / shedaniel / lightoverlay / forge / mixin / MixinClientConnection.java
1 package me.shedaniel.lightoverlay.forge.mixin;
2
3 import me.shedaniel.lightoverlay.common.CubicChunkPos;
4 import me.shedaniel.lightoverlay.common.LightOverlay;
5 import net.minecraft.client.multiplayer.ClientPacketListener;
6 import net.minecraft.network.Connection;
7 import net.minecraft.network.PacketListener;
8 import net.minecraft.network.protocol.Packet;
9 import net.minecraft.network.protocol.game.ClientboundBlockUpdatePacket;
10 import net.minecraft.network.protocol.game.ClientboundLightUpdatePacket;
11 import net.minecraft.network.protocol.game.ClientboundSectionBlocksUpdatePacket;
12 import net.minecraft.network.protocol.game.ClientboundSetChunkCacheCenterPacket;
13 import net.minecraft.util.Mth;
14 import org.spongepowered.asm.mixin.Mixin;
15 import org.spongepowered.asm.mixin.injection.At;
16 import org.spongepowered.asm.mixin.injection.Inject;
17 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
18
19 @Mixin(Connection.class)
20 public class MixinClientConnection {
21     @Inject(method = "genericsFtw", at = @At("HEAD"))
22     private static void handlePacket(Packet packet, PacketListener listener, CallbackInfo ci) {
23 //        
24 //    }
25 //    public static void handlePacket(Packet packet, PacketListener listener) {
26         try {
27             if (!(listener instanceof ClientPacketListener packetListener)) return;
28             var level = packetListener.getLevel();
29             if (level == null) return;
30             if (packet instanceof ClientboundBlockUpdatePacket p) {
31                 LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getPos()));
32             } else if (packet instanceof ClientboundSetChunkCacheCenterPacket p) {
33                 var height = Mth.ceil(level.getHeight() / 32.0);
34                 var start = Math.floorDiv(level.getMinBuildHeight(), 32);
35                 for (int y = start; y < start + height; y++) {
36                     LightOverlay.queueChunkAndNear(new CubicChunkPos(p.getX(), y, p.getZ()));
37                 }
38             } else if (packet instanceof ClientboundSectionBlocksUpdatePacket p) {
39                 LightOverlay.queueChunkAndNear(new CubicChunkPos(p.sectionPos.getX(), p.sectionPos.getY() >> 1, p.sectionPos.getZ()));
40             } else if (packet instanceof ClientboundLightUpdatePacket p) {
41                 var height = Mth.ceil(level.getHeight() / 32.0);
42                 var start = Math.floorDiv(level.getMinBuildHeight(), 32);
43                 for (int y = start; y < start + height; y++) {
44                     LightOverlay.queueChunk(new CubicChunkPos(p.getX(), y, p.getZ()));
45                 }
46             }
47         } catch (Throwable throwable) {
48             new RuntimeException("Light Overlay failed to process packet", throwable).printStackTrace();
49         }
50     }
51 }