From bbad15d2e8a77a9768716765d33bc458f6fed897 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Fri, 8 Aug 2014 20:45:31 -0500 Subject: [PATCH] Tweak Skystone Scanning behavior. --- hooks/MeteoriteWorldGen.java | 4 ++++ services/CompassService.java | 33 ++++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/hooks/MeteoriteWorldGen.java b/hooks/MeteoriteWorldGen.java index 3f5a48c1..44ece9a7 100644 --- a/hooks/MeteoriteWorldGen.java +++ b/hooks/MeteoriteWorldGen.java @@ -52,6 +52,8 @@ final public class MeteoriteWorldGen implements IWorldGenerator else TickHandler.instance.addCallable( w, new MetoriteSpawn( chunkX << 4, 128, chunkZ << 4, w ) ); } + else + WorldSettings.getInstance().getCompass().updateArea( w, chunkX, chunkZ ); } class MetoriteSpawn implements Callable @@ -92,6 +94,8 @@ final public class MeteoriteWorldGen implements IWorldGenerator tryMetroite( w, depth, x, z ); WorldSettings.getInstance().setGenerated( w.provider.dimensionId, chunkX, chunkZ ); + WorldSettings.getInstance().getCompass().updateArea( w, chunkX, chunkZ ); + return null; } } diff --git a/services/CompassService.java b/services/CompassService.java index ab00e14d..e620ef61 100644 --- a/services/CompassService.java +++ b/services/CompassService.java @@ -10,6 +10,7 @@ import java.util.concurrent.TimeUnit; import net.minecraft.block.Block; import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; import appeng.api.AEApi; import appeng.api.util.DimensionalCoord; import appeng.services.helpers.CompassReader; @@ -183,6 +184,22 @@ public class CompassService implements ThreadFactory cr.close(); } + public void updateArea(World w, int chunkX, int chunkZ) + { + int x = chunkX << 4; + int z = chunkZ << 4; + + updateArea( w, x, 16, z ); + updateArea( w, x, 16 + 32, z ); + updateArea( w, x, 16 + 64, z ); + updateArea( w, x, 16 + 96, z ); + + updateArea( w, x, 16 + 128, z ); + updateArea( w, x, 16 + 160, z ); + updateArea( w, x, 16 + 192, z ); + updateArea( w, x, 16 + 224, z ); + } + public Future updateArea(World w, int x, int y, int z) { jobSize++; @@ -191,24 +208,22 @@ public class CompassService implements ThreadFactory int cdy = y >> 5; int cz = z >> 4; - int low_x = cx << 4; - int low_z = cz << 4; int low_y = cdy << 5; - - int hi_x = low_x + 16; - int hi_z = low_z + 16; int hi_y = low_y + 32; Block skystone = AEApi.instance().blocks().blockSkyStone.block(); - for (int i = low_x; i < hi_x; i++) + // lower level... + Chunk c = w.getChunkFromBlockCoords( x, z ); + + for (int i = 0; i < 16; i++) { - for (int j = low_z; j < hi_z; j++) + for (int j = 0; j < 16; j++) { for (int k = low_y; k < hi_y; k++) { - Block blk = w.getBlock( i, k, j ); - if ( blk == skystone && w.getBlockMetadata( i, k, j ) == 0 ) + Block blk = c.getBlock( i, k, j ); + if ( blk == skystone && c.getBlockMetadata( i, k, j ) == 0 ) { return executor.submit( new CMUpdatePost( w, cx, cz, cdy, true ) ); }