diff --git a/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java b/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java index 560843ae..2f28405d 100644 --- a/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java +++ b/DynmapCore/src/main/java/org/dynmap/common/chunk/GenericMapChunkCache.java @@ -128,6 +128,26 @@ public abstract class GenericMapChunkCache extends MapChunkCache { return (emit << 8) + sky; } @Override + /** + * Get block sky and emitted light, relative to current coordinate + * @return (emitted light * 256) + sky light + */ + public final int getBlockLight(int xoff, int yoff, int zoff) { + int emit = 0, sky = 15; + int nx = x + xoff; + int ny = y + yoff; + int nz = z + zoff; + GenericChunkSection sect; + int nchunkindex = ((nx >> 4) - x_min) + (((nz >> 4) - z_min) * x_dim); + if ((nchunkindex < snapcnt) && (nchunkindex >= 0)) { + sect = snaparray[nchunkindex].getSection(ny); + emit = sect.emitted.getLight(nx, ny, nz); + sky = sect.sky.getLight(nx, ny, nz); + } + return (emit << 8) + sky; + } + + @Override public final BiomeMap getBiome() { try { return snap.getBiome(bx, y, bz); diff --git a/DynmapCore/src/main/java/org/dynmap/utils/MapIterator.java b/DynmapCore/src/main/java/org/dynmap/utils/MapIterator.java index 839cca3c..36278ea7 100644 --- a/DynmapCore/src/main/java/org/dynmap/utils/MapIterator.java +++ b/DynmapCore/src/main/java/org/dynmap/utils/MapIterator.java @@ -31,6 +31,14 @@ public interface MapIterator extends MapDataContext { * @return (emitted light * 256) + sky light */ int getBlockLight(BlockStep step); + /** + * Get block sky and emitted light, relative to current coordinate + * @param xoff - x offset from current position + * @param yoff - y offset from current position + * @param zoff - z offset from current position + * @return (emitted light * 256) + sky light + */ + int getBlockLight(int xoff, int yoff, int zoff); /** * Get biome at coordinates * @return biome diff --git a/bukkit-helper/src/main/java/org/dynmap/bukkit/helper/AbstractMapChunkCache.java b/bukkit-helper/src/main/java/org/dynmap/bukkit/helper/AbstractMapChunkCache.java index 460eb548..809063e1 100644 --- a/bukkit-helper/src/main/java/org/dynmap/bukkit/helper/AbstractMapChunkCache.java +++ b/bukkit-helper/src/main/java/org/dynmap/bukkit/helper/AbstractMapChunkCache.java @@ -14,9 +14,6 @@ import org.dynmap.DynmapChunk; import org.dynmap.DynmapCore; import org.dynmap.DynmapWorld; import org.dynmap.Log; -import org.dynmap.bukkit.helper.BukkitVersionHelper; -import org.dynmap.bukkit.helper.BukkitWorld; -import org.dynmap.bukkit.helper.SnapshotCache; import org.dynmap.bukkit.helper.SnapshotCache.SnapshotRec; import org.dynmap.common.BiomeMap; import org.dynmap.hdmap.HDBlockModels; @@ -181,6 +178,23 @@ public abstract class AbstractMapChunkCache extends MapChunkCache { } return (emit << 8) + sky; } + @Override + /** + * Get block sky and emitted light, relative to current coordinate + * @return (emitted light * 256) + sky light + */ + public final int getBlockLight(int xoff, int yoff, int zoff) { + int emit = 0, sky = 15; + int nx = x + xoff; + int ny = y + yoff; + int nz = z + zoff; + int nchunkindex = ((nx >> 4) - x_min) + (((nz >> 4) - z_min) * x_dim); + if ((nchunkindex < snapcnt) && (nchunkindex >= 0)) { + emit = snaparray[nchunkindex].getBlockEmittedLight(nx, ny, nz); + sky = snaparray[nchunkindex].getBlockSkyLight(nx, ny, nz); + } + return (emit << 8) + sky; + } private void biomePrep() { if(sameneighborbiomecnt != null) diff --git a/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/ForgeMapChunkCache.java b/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/ForgeMapChunkCache.java index cc25d6e7..4ce39eae 100644 --- a/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/ForgeMapChunkCache.java +++ b/forge-1.13.2/src/main/java/org/dynmap/forge_1_13_2/ForgeMapChunkCache.java @@ -201,6 +201,23 @@ public class ForgeMapChunkCache extends MapChunkCache } return (emit << 8) + sky; } + @Override + /** + * Get block sky and emitted light, relative to current coordinate + * @return (emitted light * 256) + sky light + */ + public final int getBlockLight(int xoff, int yoff, int zoff) { + int emit = 0, sky = 15; + int nx = x + xoff; + int ny = y + yoff; + int nz = z + zoff; + int nchunkindex = ((nx >> 4) - x_min) + (((nz >> 4) - z_min) * x_dim); + if ((nchunkindex < snapcnt) && (nchunkindex >= 0)) { + emit = snaparray[nchunkindex].getBlockEmittedLight(nx, ny, nz); + sky = snaparray[nchunkindex].getBlockSkyLight(nx, ny, nz); + } + return (emit << 8) + sky; + } private void biomePrep() { diff --git a/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/ForgeMapChunkCache.java b/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/ForgeMapChunkCache.java index 48d13de7..80bee358 100644 --- a/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/ForgeMapChunkCache.java +++ b/forge-1.14.4/src/main/java/org/dynmap/forge_1_14_4/ForgeMapChunkCache.java @@ -197,6 +197,23 @@ public class ForgeMapChunkCache extends MapChunkCache } return (emit << 8) + sky; } + @Override + /** + * Get block sky and emitted light, relative to current coordinate + * @return (emitted light * 256) + sky light + */ + public final int getBlockLight(int xoff, int yoff, int zoff) { + int emit = 0, sky = 15; + int nx = x + xoff; + int ny = y + yoff; + int nz = z + zoff; + int nchunkindex = ((nx >> 4) - x_min) + (((nz >> 4) - z_min) * x_dim); + if ((nchunkindex < snapcnt) && (nchunkindex >= 0)) { + emit = snaparray[nchunkindex].getBlockEmittedLight(nx, ny, nz); + sky = snaparray[nchunkindex].getBlockSkyLight(nx, ny, nz); + } + return (emit << 8) + sky; + } private void biomePrep() { diff --git a/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/ForgeMapChunkCache.java b/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/ForgeMapChunkCache.java index 9dfc4904..9f2ea9de 100644 --- a/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/ForgeMapChunkCache.java +++ b/forge-1.15.2/src/main/java/org/dynmap/forge_1_15_2/ForgeMapChunkCache.java @@ -197,6 +197,23 @@ public class ForgeMapChunkCache extends MapChunkCache } return (emit << 8) + sky; } + @Override + /** + * Get block sky and emitted light, relative to current coordinate + * @return (emitted light * 256) + sky light + */ + public final int getBlockLight(int xoff, int yoff, int zoff) { + int emit = 0, sky = 15; + int nx = x + xoff; + int ny = y + yoff; + int nz = z + zoff; + int nchunkindex = ((nx >> 4) - x_min) + (((nz >> 4) - z_min) * x_dim); + if ((nchunkindex < snapcnt) && (nchunkindex >= 0)) { + emit = snaparray[nchunkindex].getBlockEmittedLight(nx, ny, nz); + sky = snaparray[nchunkindex].getBlockSkyLight(nx, ny, nz); + } + return (emit << 8) + sky; + } private void biomePrep() {