From 0ba3da26416f8dd11713719d5ff16e4e60960fbc Mon Sep 17 00:00:00 2001 From: TomyLobo Date: Sat, 29 Oct 2011 04:29:57 +0200 Subject: [PATCH] Reverted to old manual lighting system that doesn't call notch's block lighting functions directly. --- .../sk89q/worldedit/bukkit/BukkitWorld.java | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java b/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java index 765f6d72a..78dfde4d9 100644 --- a/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java +++ b/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java @@ -22,6 +22,9 @@ package com.sk89q.worldedit.bukkit; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.block.Furnace; @@ -43,6 +46,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.Bukkit; +import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.TreeType; @@ -746,7 +750,7 @@ public class BukkitWorld extends LocalWorld { @Override public void fixLighting(Iterable chunks) { - if (fastLightingAvailable) { + if (!fastLightingAvailable) { return; } @@ -768,24 +772,41 @@ public class BukkitWorld extends LocalWorld { // Fix blocklight Chunk_blocklightMap.set(notchChunk, NibbleArray_ctor.newInstance(length, 7)); + Chunk chunk = world.getChunkAt(chunkX, chunkZ); + + List lightEmitters = new ArrayList(); + for (int x = 0; x < chunkSizeX; ++x) { - final boolean xBorder = x == 0 || x == chunkSizeX - 1; + boolean xBorder = x == 0 || x == chunkSizeX - 1; for (int z = 0; z < chunkSizeZ; ++z) { - final boolean zBorder = z == 0 || z == chunkSizeZ - 1; + boolean zBorder = z == 0 || z == chunkSizeZ - 1; for (int y = 0; y < chunkSizeY; ++y) { final int index = y + z * chunkSizeY + x * chunkSizeY * chunkSizeZ; - final byte blockID = blocks[index]; - if (BlockType.emitsLight(blockID)) { - Chunk_relightBlock.invoke(notchChunk, x, y, z); - } - else { - if ((xBorder || zBorder) && BlockType.isTranslucent(blockID)) { - Chunk_relightBlock.invoke(notchChunk, x, y, z); + byte blockID = blocks[index]; + if (!BlockType.emitsLight(blockID)) { + if (xBorder || zBorder && BlockType.isTranslucent(blockID)) { + lightEmitters.add(chunk.getBlock(x, y, z).getState()); + if (blockID == 20) { + blocks[index] = 0; + } + else { + blocks[index] = 20; + } + } + continue; } + + lightEmitters.add(chunk.getBlock(x, y, z).getState()); + + blocks[index] = 0; } } } + + for (BlockState lightEmitter : lightEmitters) { + lightEmitter.update(true); + } } } catch (Exception e) {