|
@@ -4,6 +4,8 @@ import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Maps;
|
|
import com.google.common.collect.Maps;
|
|
import com.mojang.blaze3d.platform.GlStateManager;
|
|
import com.mojang.blaze3d.platform.GlStateManager;
|
|
import com.mojang.blaze3d.systems.RenderSystem;
|
|
import com.mojang.blaze3d.systems.RenderSystem;
|
|
|
|
+import it.unimi.dsi.fastutil.longs.Long2ReferenceMap;
|
|
|
|
+import it.unimi.dsi.fastutil.longs.Long2ReferenceOpenHashMap;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.block.BlockState;
|
|
import net.minecraft.block.BlockState;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.Minecraft;
|
|
@@ -12,6 +14,7 @@ import net.minecraft.client.gui.FontRenderer;
|
|
import net.minecraft.client.renderer.ActiveRenderInfo;
|
|
import net.minecraft.client.renderer.ActiveRenderInfo;
|
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
|
|
+import net.minecraft.client.renderer.culling.ClippingHelper;
|
|
import net.minecraft.client.settings.KeyBinding;
|
|
import net.minecraft.client.settings.KeyBinding;
|
|
import net.minecraft.client.util.InputMappings;
|
|
import net.minecraft.client.util.InputMappings;
|
|
import net.minecraft.client.world.ClientWorld;
|
|
import net.minecraft.client.world.ClientWorld;
|
|
@@ -36,7 +39,7 @@ import net.minecraft.util.math.vector.Vector3d;
|
|
import net.minecraft.world.IBlockReader;
|
|
import net.minecraft.world.IBlockReader;
|
|
import net.minecraft.world.LightType;
|
|
import net.minecraft.world.LightType;
|
|
import net.minecraft.world.World;
|
|
import net.minecraft.world.World;
|
|
-import net.minecraft.world.biome.Biome;
|
|
|
|
|
|
+import net.minecraft.world.biome.MobSpawnInfo;
|
|
import net.minecraft.world.chunk.Chunk;
|
|
import net.minecraft.world.chunk.Chunk;
|
|
import net.minecraft.world.chunk.ChunkStatus;
|
|
import net.minecraft.world.chunk.ChunkStatus;
|
|
import net.minecraft.world.lighting.IWorldLightListener;
|
|
import net.minecraft.world.lighting.IWorldLightListener;
|
|
@@ -49,7 +52,6 @@ import net.minecraftforge.event.TickEvent;
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
import net.minecraftforge.fml.DistExecutor;
|
|
import net.minecraftforge.fml.DistExecutor;
|
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
|
-import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
|
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.apache.logging.log4j.LogManager;
|
|
import org.lwjgl.opengl.GL11;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
|
|
@@ -58,7 +60,10 @@ import java.io.FileInputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.text.DecimalFormat;
|
|
import java.text.DecimalFormat;
|
|
-import java.util.*;
|
|
|
|
|
|
+import java.util.Comparator;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.Properties;
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.ExecutorService;
|
|
import java.util.concurrent.Executors;
|
|
import java.util.concurrent.Executors;
|
|
|
|
|
|
@@ -82,13 +87,14 @@ public class LightOverlayClient {
|
|
private static boolean enabled = false;
|
|
private static boolean enabled = false;
|
|
private static EntityType<Entity> testingEntityType;
|
|
private static EntityType<Entity> testingEntityType;
|
|
private static int threadNumber = 0;
|
|
private static int threadNumber = 0;
|
|
|
|
+ public static ClippingHelper frustum;
|
|
private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(), r -> {
|
|
private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors(), r -> {
|
|
Thread thread = new Thread(r, "light-overlay-" + threadNumber++);
|
|
Thread thread = new Thread(r, "light-overlay-" + threadNumber++);
|
|
thread.setDaemon(true);
|
|
thread.setDaemon(true);
|
|
return thread;
|
|
return thread;
|
|
});
|
|
});
|
|
private static final List<ChunkPos> POS = Lists.newCopyOnWriteArrayList();
|
|
private static final List<ChunkPos> POS = Lists.newCopyOnWriteArrayList();
|
|
- private static final Map<ChunkPos, Map<Long, Object>> CHUNK_MAP = Maps.newConcurrentMap();
|
|
|
|
|
|
+ private static final Map<ChunkPos, Long2ReferenceMap<Object>> CHUNK_MAP = Maps.newConcurrentMap();
|
|
private static long ticks = 0;
|
|
private static long ticks = 0;
|
|
|
|
|
|
static {
|
|
static {
|
|
@@ -238,21 +244,21 @@ public class LightOverlayClient {
|
|
CHUNK_MAP.clear();
|
|
CHUNK_MAP.clear();
|
|
ClientPlayerEntity player = minecraft.player;
|
|
ClientPlayerEntity player = minecraft.player;
|
|
ClientWorld world = minecraft.world;
|
|
ClientWorld world = minecraft.world;
|
|
- BlockPos playerPos = player.func_233580_cy_();
|
|
|
|
|
|
+ BlockPos playerPos = player.getPosition();
|
|
ISelectionContext entityContext = ISelectionContext.forEntity(player);
|
|
ISelectionContext entityContext = ISelectionContext.forEntity(player);
|
|
IWorldLightListener block = world.getLightManager().getLightEngine(LightType.BLOCK);
|
|
IWorldLightListener block = world.getLightManager().getLightEngine(LightType.BLOCK);
|
|
IWorldLightListener sky = showNumber ? null : world.getLightManager().getLightEngine(LightType.SKY);
|
|
IWorldLightListener sky = showNumber ? null : world.getLightManager().getLightEngine(LightType.SKY);
|
|
BlockPos.Mutable downPos = new BlockPos.Mutable();
|
|
BlockPos.Mutable downPos = new BlockPos.Mutable();
|
|
Iterable<BlockPos> iterate = BlockPos.getAllInBoxMutable(playerPos.getX() - reach, playerPos.getY() - reach, playerPos.getZ() - reach,
|
|
Iterable<BlockPos> iterate = BlockPos.getAllInBoxMutable(playerPos.getX() - reach, playerPos.getY() - reach, playerPos.getZ() - reach,
|
|
playerPos.getX() + reach, playerPos.getY() + reach, playerPos.getZ() + reach);
|
|
playerPos.getX() + reach, playerPos.getY() + reach, playerPos.getZ() + reach);
|
|
- HashMap<Long, Object> map = Maps.newHashMap();
|
|
|
|
|
|
+ Long2ReferenceMap<Object> map = new Long2ReferenceOpenHashMap<>();
|
|
CHUNK_MAP.put(new ChunkPos(0, 0), map);
|
|
CHUNK_MAP.put(new ChunkPos(0, 0), map);
|
|
for (BlockPos blockPos : iterate) {
|
|
for (BlockPos blockPos : iterate) {
|
|
downPos.setPos(blockPos.getX(), blockPos.getY() - 1, blockPos.getZ());
|
|
downPos.setPos(blockPos.getX(), blockPos.getY() - 1, blockPos.getZ());
|
|
if (showNumber) {
|
|
if (showNumber) {
|
|
int level = getCrossLevel(blockPos, downPos, world, block, entityContext);
|
|
int level = getCrossLevel(blockPos, downPos, world, block, entityContext);
|
|
if (level >= 0) {
|
|
if (level >= 0) {
|
|
- map.put(blockPos.toLong(), level);
|
|
|
|
|
|
+ map.put(blockPos.toLong(), Integer.valueOf(level));
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
CrossType type = getCrossType(blockPos, downPos, world, block, sky, entityContext);
|
|
CrossType type = getCrossType(blockPos, downPos, world, block, sky, entityContext);
|
|
@@ -277,28 +283,29 @@ public class LightOverlayClient {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if (!POS.isEmpty()) {
|
|
|
|
- if (playerPos[0] == null) {
|
|
|
|
- playerPos[0] = player.getPositionVec();
|
|
|
|
- }
|
|
|
|
- ChunkPos pos = POS.stream().min(Comparator.comparingDouble(value -> value.getBlock(8, 0, 8).distanceSq(playerPos[0].x, 0, playerPos[0].z, false))).get();
|
|
|
|
- EXECUTOR.submit(() -> {
|
|
|
|
- if (MathHelper.abs(pos.x - playerPosX) <= getChunkRange() && MathHelper.abs(pos.z - playerPosZ) <= getChunkRange()) {
|
|
|
|
- calculateChunk(world.getChunkProvider().getChunk(pos.x, pos.z, ChunkStatus.FULL, false), world, pos, selectionContext);
|
|
|
|
- } else {
|
|
|
|
- CHUNK_MAP.remove(pos);
|
|
|
|
|
|
+ POS.removeIf(pos -> MathHelper.abs(pos.x - playerPosX) > getChunkRange() || MathHelper.abs(pos.z - playerPosZ) > getChunkRange());
|
|
|
|
+ for (int k = 0; k < 2; k++) {
|
|
|
|
+ if (!POS.isEmpty()) {
|
|
|
|
+ if (playerPos[0] == null) {
|
|
|
|
+ playerPos[0] = player.getPositionVec();
|
|
}
|
|
}
|
|
- });
|
|
|
|
- POS.remove(pos);
|
|
|
|
|
|
+ ChunkPos pos = POS.stream().min(Comparator.comparingDouble(value -> {
|
|
|
|
+ int i = Math.abs(value.x - playerPosX);
|
|
|
|
+ int j = Math.abs(value.z - playerPosZ);
|
|
|
|
+ return i * i + j * j;
|
|
|
|
+ })).get();
|
|
|
|
+ POS.remove(pos);
|
|
|
|
+ EXECUTOR.submit(() -> {
|
|
|
|
+ try {
|
|
|
|
+ calculateChunk(world.getChunkProvider().getChunk(pos.x, pos.z, ChunkStatus.FULL, false), world, pos, selectionContext);
|
|
|
|
+ } catch (Throwable throwable) {
|
|
|
|
+ LogManager.getLogger().throwing(throwable);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ }
|
|
}
|
|
}
|
|
if (ticks % 50 == 0) {
|
|
if (ticks % 50 == 0) {
|
|
- Iterator<Map.Entry<ChunkPos, Map<Long, Object>>> chunkMapIterator = CHUNK_MAP.entrySet().iterator();
|
|
|
|
- while (chunkMapIterator.hasNext()) {
|
|
|
|
- Map.Entry<ChunkPos, Map<Long, Object>> pos = chunkMapIterator.next();
|
|
|
|
- if (MathHelper.abs(pos.getKey().x - playerPosX) > getChunkRange() * 2 || MathHelper.abs(pos.getKey().z - playerPosZ) > getChunkRange() * 2) {
|
|
|
|
- chunkMapIterator.remove();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ CHUNK_MAP.entrySet().removeIf(pos -> MathHelper.abs(pos.getKey().x - playerPosX) > getChunkRange() * 2 || MathHelper.abs(pos.getKey().z - playerPosZ) > getChunkRange() * 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -308,9 +315,13 @@ public class LightOverlayClient {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public static void updateFrustum(ClippingHelper helper) {
|
|
|
|
+ frustum = helper;
|
|
|
|
+ }
|
|
|
|
+
|
|
private static void calculateChunk(Chunk chunk, World world, ChunkPos chunkPos, ISelectionContext selectionContext) {
|
|
private static void calculateChunk(Chunk chunk, World world, ChunkPos chunkPos, ISelectionContext selectionContext) {
|
|
- Map<Long, Object> map = Maps.newHashMap();
|
|
|
|
- if (chunk != null) {
|
|
|
|
|
|
+ if (world != null && chunk != null) {
|
|
|
|
+ Long2ReferenceMap<Object> map = new Long2ReferenceOpenHashMap<>();
|
|
IWorldLightListener block = chunk.getWorldLightManager().getLightEngine(LightType.BLOCK);
|
|
IWorldLightListener block = chunk.getWorldLightManager().getLightEngine(LightType.BLOCK);
|
|
IWorldLightListener sky = showNumber ? null : chunk.getWorldLightManager().getLightEngine(LightType.SKY);
|
|
IWorldLightListener sky = showNumber ? null : chunk.getWorldLightManager().getLightEngine(LightType.SKY);
|
|
for (BlockPos pos : BlockPos.getAllInBoxMutable(chunkPos.getXStart(), 0, chunkPos.getZStart(), chunkPos.getXEnd(), 256, chunkPos.getZEnd())) {
|
|
for (BlockPos pos : BlockPos.getAllInBoxMutable(chunkPos.getXStart(), 0, chunkPos.getZStart(), chunkPos.getXEnd(), 256, chunkPos.getZEnd())) {
|
|
@@ -318,11 +329,11 @@ public class LightOverlayClient {
|
|
if (showNumber) {
|
|
if (showNumber) {
|
|
int level = LightOverlayClient.getCrossLevel(pos, down, chunk, block, selectionContext);
|
|
int level = LightOverlayClient.getCrossLevel(pos, down, chunk, block, selectionContext);
|
|
if (level >= 0) {
|
|
if (level >= 0) {
|
|
- map.put(pos.toLong(), level);
|
|
|
|
|
|
+ map.put(pos.toLong(), Integer.valueOf(level));
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
- Biome biome = world.getBiomeManager().getBiome(pos);
|
|
|
|
- if (biome.getSpawningChance() > 0 && !biome.getSpawns(EntityClassification.MONSTER).isEmpty()) {
|
|
|
|
|
|
+ MobSpawnInfo spawnInfo = world.getBiomeManager().getBiome(pos).func_242433_b();
|
|
|
|
+ if (spawnInfo.func_242557_a() > 0 && !spawnInfo.func_242559_a(EntityClassification.MONSTER).isEmpty()) {
|
|
CrossType type = LightOverlayClient.getCrossType(pos, down, chunk, block, sky, selectionContext);
|
|
CrossType type = LightOverlayClient.getCrossType(pos, down, chunk, block, sky, selectionContext);
|
|
if (type != CrossType.NONE) {
|
|
if (type != CrossType.NONE) {
|
|
map.put(pos.toLong(), type);
|
|
map.put(pos.toLong(), type);
|
|
@@ -330,8 +341,10 @@ public class LightOverlayClient {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ CHUNK_MAP.put(chunkPos, map);
|
|
|
|
+ } else {
|
|
|
|
+ CHUNK_MAP.remove(chunkPos);
|
|
}
|
|
}
|
|
- CHUNK_MAP.put(chunkPos, map);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
public static void renderWorldLast() {
|
|
public static void renderWorldLast() {
|
|
@@ -343,22 +356,25 @@ public class LightOverlayClient {
|
|
int playerPosZ = ((int) playerEntity.getPosZ()) >> 4;
|
|
int playerPosZ = ((int) playerEntity.getPosZ()) >> 4;
|
|
ISelectionContext selectionContext = ISelectionContext.forEntity(playerEntity);
|
|
ISelectionContext selectionContext = ISelectionContext.forEntity(playerEntity);
|
|
World world = client.world;
|
|
World world = client.world;
|
|
- BlockPos playerPos = playerEntity.func_233580_cy_();
|
|
|
|
|
|
+ BlockPos playerPos = playerEntity.getPosition();
|
|
ActiveRenderInfo info = client.gameRenderer.getActiveRenderInfo();
|
|
ActiveRenderInfo info = client.gameRenderer.getActiveRenderInfo();
|
|
if (showNumber) {
|
|
if (showNumber) {
|
|
RenderSystem.enableTexture();
|
|
RenderSystem.enableTexture();
|
|
RenderSystem.depthMask(true);
|
|
RenderSystem.depthMask(true);
|
|
BlockPos.Mutable mutable = new BlockPos.Mutable();
|
|
BlockPos.Mutable mutable = new BlockPos.Mutable();
|
|
- for (Map.Entry<ChunkPos, Map<Long, Object>> entry : CHUNK_MAP.entrySet()) {
|
|
|
|
|
|
+ BlockPos.Mutable downMutable = new BlockPos.Mutable();
|
|
|
|
+ for (Map.Entry<ChunkPos, Long2ReferenceMap<Object>> entry : CHUNK_MAP.entrySet()) {
|
|
if (caching && (MathHelper.abs(entry.getKey().x - playerPosX) > getChunkRange() || MathHelper.abs(entry.getKey().z - playerPosZ) > getChunkRange())) {
|
|
if (caching && (MathHelper.abs(entry.getKey().x - playerPosX) > getChunkRange() || MathHelper.abs(entry.getKey().z - playerPosZ) > getChunkRange())) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- for (Map.Entry<Long, Object> objectEntry : entry.getValue().entrySet()) {
|
|
|
|
|
|
+ for (Long2ReferenceMap.Entry<Object> objectEntry : entry.getValue().long2ReferenceEntrySet()) {
|
|
if (objectEntry.getValue() instanceof Integer) {
|
|
if (objectEntry.getValue() instanceof Integer) {
|
|
- mutable.setPos(BlockPos.unpackX(objectEntry.getKey()), BlockPos.unpackY(objectEntry.getKey()), BlockPos.unpackZ(objectEntry.getKey()));
|
|
|
|
|
|
+ mutable.setPos(BlockPos.unpackX(objectEntry.getLongKey()), BlockPos.unpackY(objectEntry.getLongKey()), BlockPos.unpackZ(objectEntry.getLongKey()));
|
|
if (mutable.withinDistance(playerPos, reach)) {
|
|
if (mutable.withinDistance(playerPos, reach)) {
|
|
- BlockPos down = mutable.down();
|
|
|
|
- LightOverlayClient.renderLevel(client, info, world, mutable, down, (Integer) objectEntry.getValue(), selectionContext);
|
|
|
|
|
|
+ if (frustum == null || FrustumHelper.isVisible(frustum, mutable.getX(), mutable.getY(), mutable.getZ(), mutable.getX() + 1, mutable.getX() + 1, mutable.getX() + 1)) {
|
|
|
|
+ downMutable.setPos(mutable.getX(), mutable.getY() - 1, mutable.getZ());
|
|
|
|
+ LightOverlayClient.renderLevel(client, info, world, mutable, downMutable, (Integer) objectEntry.getValue(), selectionContext);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -374,17 +390,18 @@ public class LightOverlayClient {
|
|
GL11.glLineWidth(lineWidth);
|
|
GL11.glLineWidth(lineWidth);
|
|
GL11.glBegin(GL11.GL_LINES);
|
|
GL11.glBegin(GL11.GL_LINES);
|
|
BlockPos.Mutable mutable = new BlockPos.Mutable();
|
|
BlockPos.Mutable mutable = new BlockPos.Mutable();
|
|
- for (Map.Entry<ChunkPos, Map<Long, Object>> entry : CHUNK_MAP.entrySet()) {
|
|
|
|
|
|
+ for (Map.Entry<ChunkPos, Long2ReferenceMap<Object>> entry : CHUNK_MAP.entrySet()) {
|
|
if (caching && (MathHelper.abs(entry.getKey().x - playerPosX) > getChunkRange() || MathHelper.abs(entry.getKey().z - playerPosZ) > getChunkRange())) {
|
|
if (caching && (MathHelper.abs(entry.getKey().x - playerPosX) > getChunkRange() || MathHelper.abs(entry.getKey().z - playerPosZ) > getChunkRange())) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- for (Map.Entry<Long, Object> objectEntry : entry.getValue().entrySet()) {
|
|
|
|
|
|
+ for (Long2ReferenceMap.Entry<Object> objectEntry : entry.getValue().long2ReferenceEntrySet()) {
|
|
if (objectEntry.getValue() instanceof CrossType) {
|
|
if (objectEntry.getValue() instanceof CrossType) {
|
|
- mutable.setPos(BlockPos.unpackX(objectEntry.getKey()), BlockPos.unpackY(objectEntry.getKey()), BlockPos.unpackZ(objectEntry.getKey()));
|
|
|
|
|
|
+ mutable.setPos(BlockPos.unpackX(objectEntry.getLongKey()), BlockPos.unpackY(objectEntry.getLongKey()), BlockPos.unpackZ(objectEntry.getLongKey()));
|
|
if (mutable.withinDistance(playerPos, reach)) {
|
|
if (mutable.withinDistance(playerPos, reach)) {
|
|
- BlockPos down = mutable.down();
|
|
|
|
- int color = objectEntry.getValue() == CrossType.RED ? redColor : objectEntry.getValue() == CrossType.YELLOW ? yellowColor : secondaryColor;
|
|
|
|
- renderCross(info, world, mutable, color, selectionContext);
|
|
|
|
|
|
+ if (frustum == null || FrustumHelper.isVisible(frustum, mutable.getX(), mutable.getY(), mutable.getZ(), mutable.getX() + 1, mutable.getX() + 1, mutable.getX() + 1)) {
|
|
|
|
+ int color = objectEntry.getValue() == CrossType.RED ? redColor : objectEntry.getValue() == CrossType.YELLOW ? yellowColor : secondaryColor;
|
|
|
|
+ renderCross(info, world, mutable, color, selectionContext);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -517,8 +534,7 @@ public class LightOverlayClient {
|
|
} else if (packet instanceof SChunkDataPacket) {
|
|
} else if (packet instanceof SChunkDataPacket) {
|
|
LightOverlayClient.queueChunkAndNear(new ChunkPos(((SChunkDataPacket) packet).getChunkX(), ((SChunkDataPacket) packet).getChunkZ()));
|
|
LightOverlayClient.queueChunkAndNear(new ChunkPos(((SChunkDataPacket) packet).getChunkX(), ((SChunkDataPacket) packet).getChunkZ()));
|
|
} else if (packet instanceof SMultiBlockChangePacket) {
|
|
} else if (packet instanceof SMultiBlockChangePacket) {
|
|
- ChunkPos chunkPos = ObfuscationReflectionHelper.getPrivateValue(SMultiBlockChangePacket.class, (SMultiBlockChangePacket) packet, "field_148925_b");
|
|
|
|
- LightOverlayClient.queueChunkAndNear(new ChunkPos(chunkPos.x, chunkPos.z));
|
|
|
|
|
|
+ LightOverlayClient.queueChunkAndNear(new ChunkPos(((SMultiBlockChangePacket) packet).field_244305_a.getSectionX(), ((SMultiBlockChangePacket) packet).field_244305_a.getSectionZ()));
|
|
} else if (packet instanceof SUpdateLightPacket) {
|
|
} else if (packet instanceof SUpdateLightPacket) {
|
|
LightOverlayClient.queueChunkAndNear(new ChunkPos(((SUpdateLightPacket) packet).getChunkX(), ((SUpdateLightPacket) packet).getChunkZ()));
|
|
LightOverlayClient.queueChunkAndNear(new ChunkPos(((SUpdateLightPacket) packet).getChunkX(), ((SUpdateLightPacket) packet).getChunkZ()));
|
|
}
|
|
}
|