1 package me.shedaniel.lightoverlay.forge;
3 import me.shedaniel.lightoverlay.common.AbstractPlatform;
4 import me.shedaniel.lightoverlay.common.LightOverlayCore;
5 import net.minecraft.client.renderer.culling.ClippingHelper;
6 import net.minecraft.client.settings.KeyBinding;
7 import net.minecraft.network.IPacket;
8 import net.minecraft.network.play.server.SChangeBlockPacket;
9 import net.minecraft.network.play.server.SChunkDataPacket;
10 import net.minecraft.network.play.server.SMultiBlockChangePacket;
11 import net.minecraft.network.play.server.SUpdateLightPacket;
12 import net.minecraft.util.math.ChunkPos;
13 import net.minecraftforge.api.distmarker.Dist;
14 import net.minecraftforge.common.MinecraftForge;
15 import net.minecraftforge.event.TickEvent;
16 import net.minecraftforge.fml.DistExecutor;
17 import net.minecraftforge.fml.client.registry.ClientRegistry;
18 import net.minecraftforge.fml.loading.FMLPaths;
20 import java.nio.file.Path;
22 public class LightOverlayClient {
23 private static Runnable debugRenderer = () -> {};
25 public static void register() {
26 LightOverlayCore.register(new AbstractPlatform() {
28 public Path getConfigDir() {
29 return FMLPaths.CONFIGDIR.get();
33 public void registerClientTick(Runnable runnable) {
34 MinecraftForge.EVENT_BUS.<TickEvent.ClientTickEvent>addListener(event -> runnable.run());
38 public void registerDebugRenderer(Runnable runnable) {
39 debugRenderer = runnable;
43 public KeyBinding registerKeyBinding(KeyBinding keyBinding) {
44 ClientRegistry.registerKeyBinding(keyBinding);
49 public boolean isFrustumVisible(ClippingHelper clippingHelper, double v, double v1, double v2, double v3, double v4, double v5) {
50 return FrustumHelper.isVisible(clippingHelper, v, v1, v2, v3, v4, v5);
55 //noinspection Convert2MethodRef
56 DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> LightOverlayCloth.register());
57 } catch (Exception e) {
62 public static void renderWorldLast() {
66 public static void processPacket(IPacket<?> packet) {
67 if (packet instanceof SChangeBlockPacket) {
68 LightOverlayCore.queueChunkAndNear(new ChunkPos(((SChangeBlockPacket) packet).getPos()));
69 } else if (packet instanceof SChunkDataPacket) {
70 LightOverlayCore.queueChunkAndNear(new ChunkPos(((SChunkDataPacket) packet).getX(), ((SChunkDataPacket) packet).getZ()));
71 } else if (packet instanceof SMultiBlockChangePacket) {
72 LightOverlayCore.queueChunkAndNear(new ChunkPos(((SMultiBlockChangePacket) packet).sectionPos.getX(), ((SMultiBlockChangePacket) packet).sectionPos.getZ()));
73 } else if (packet instanceof SUpdateLightPacket) {
74 LightOverlayCore.queueChunkAndNear(new ChunkPos(((SUpdateLightPacket) packet).getX(), ((SUpdateLightPacket) packet).getZ()));