diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java index 0a42a80a0..d36a1e25f 100644 --- a/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java +++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftChunkData.java @@ -22,6 +22,7 @@ public final class CraftChunkData implements ChunkGenerator.ChunkData { private final int maxHeight; private final ChunkSection[] sections; private Set tiles; + private final Set lights = new HashSet<>(); public CraftChunkData(World world) { this(world.getMinHeight(), world.getMaxHeight()); @@ -149,6 +150,13 @@ public final class CraftChunkData implements ChunkGenerator.ChunkData { ChunkSection section = getChunkSection(y, true); section.setType(x, y & 0xf, z, type); + // SPIGOT-1753: Capture light blocks, for light updates + if (type.f() > 0) { // PAIL rename getLightEmission + lights.add(new BlockPosition(x, y, z)); + } else { + lights.remove(new BlockPosition(x, y, z)); + } + if (type.isTileEntity()) { if (tiles == null) { tiles = new HashSet<>(); @@ -174,4 +182,8 @@ public final class CraftChunkData implements ChunkGenerator.ChunkData { Set getTiles() { return tiles; } + + Set getLights() { + return lights; + } } diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java index 19d25ebea..c44e77d9c 100644 --- a/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java +++ b/src/main/java/org/bukkit/craftbukkit/generator/CustomChunkGenerator.java @@ -159,6 +159,11 @@ public class CustomChunkGenerator extends InternalChunkGenerator { } } } + + // Apply captured light blocks + for (BlockPosition lightPosition : craftData.getLights()) { + ((ProtoChunk) ichunkaccess).j(new BlockPosition((x << 4) + lightPosition.getX(), lightPosition.getY(), (z << 4) + lightPosition.getZ())); // PAIL rename addLightBlock + } } @Override