diff --git a/src/main/java/appeng/core/Registration.java b/src/main/java/appeng/core/Registration.java index aeacd874d..c9dd76975 100644 --- a/src/main/java/appeng/core/Registration.java +++ b/src/main/java/appeng/core/Registration.java @@ -167,13 +167,16 @@ public final class Registration } this.storageBiome = new BiomeGenStorage(); + Biome.registerBiome( config.storageBiomeID, "appliedenergistics2:storage_biome", this.storageBiome ); config.save(); } if( !force && config.storageBiomeID != -1 ) { this.storageBiome = new BiomeGenStorage(); + Biome.registerBiome( config.storageBiomeID, "appliedenergistics2:storage_biome", this.storageBiome ); } + } if( config.storageProviderID != -1 ) diff --git a/src/main/java/appeng/spatial/CachedPlane.java b/src/main/java/appeng/spatial/CachedPlane.java index b1fb77d68..1f45c8f01 100644 --- a/src/main/java/appeng/spatial/CachedPlane.java +++ b/src/main/java/appeng/spatial/CachedPlane.java @@ -63,10 +63,21 @@ public class CachedPlane private final LinkedList updates = new LinkedList(); private final IBlockDefinition matrixFrame = AEApi.instance().definitions().blocks().matrixFrame(); private int verticalBits; + private final IBlockState matrixBlockState; public CachedPlane( final World w, final int minX, final int minY, final int minZ, final int maxX, final int maxY, final int maxZ ) { + Block matrixFrameBlock = AEApi.instance().definitions().blocks().matrixFrame().maybeBlock().orElse( null ); + if( matrixFrameBlock != null ) + { + this.matrixBlockState = matrixFrameBlock.getDefaultState(); + } + else + { + this.matrixBlockState = null; + } + this.world = w; this.x_size = maxX - minX + 1; @@ -403,13 +414,10 @@ public class CachedPlane private void setBlockIDWithMetadata( final int y, final Object[] blk ) { - CachedPlane.this.matrixFrame.maybeBlock().ifPresent( matrixFrameBlock -> + if( blk[0] == matrixBlockState ) { - if( blk[0] == matrixFrameBlock ) - { - blk[0] = Platform.AIR_BLOCK; - } - } ); + blk[0] = Platform.AIR_BLOCK.getDefaultState(); + } final ExtendedBlockStorage extendedBlockStorage = this.storage[y >> 4]; extendedBlockStorage.set( this.x, y & 15, this.z, (IBlockState) blk[0] ); diff --git a/src/main/java/appeng/spatial/StorageChunkProvider.java b/src/main/java/appeng/spatial/StorageChunkProvider.java index e80dad4a2..c8a78709d 100644 --- a/src/main/java/appeng/spatial/StorageChunkProvider.java +++ b/src/main/java/appeng/spatial/StorageChunkProvider.java @@ -22,33 +22,20 @@ package appeng.spatial; import java.util.ArrayList; import java.util.List; -import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EnumCreatureType; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.ChunkProviderOverworld; import appeng.api.AEApi; -import appeng.core.AEConfig; +import appeng.core.AppEng; public class StorageChunkProvider extends ChunkProviderOverworld { - private static final int SQUARE_CHUNK_SIZE = 256; - private static final Block[] BLOCKS; - - static - { - BLOCKS = new Block[255 * SQUARE_CHUNK_SIZE]; - - AEApi.instance().definitions().blocks().matrixFrame().maybeBlock().ifPresent( matrixFrameBlock -> { - for( int x = 0; x < BLOCKS.length; x++ ) - { - BLOCKS[x] = matrixFrameBlock; - } - } ); - } private final World world; @@ -64,13 +51,18 @@ public class StorageChunkProvider extends ChunkProviderOverworld final Chunk chunk = new Chunk( this.world, x, z ); final byte[] biomes = chunk.getBiomeArray(); - final AEConfig config = AEConfig.instance; + Biome biome = AppEng.instance().getRegistration().getStorageBiome(); + byte biomeId = (byte) Biome.getIdForBiome(biome); for( int k = 0; k < biomes.length; ++k ) { - biomes[k] = (byte) config.storageBiomeID; + biomes[k] = biomeId; } + AEApi.instance().definitions().blocks().matrixFrame().maybeBlock().ifPresent( block -> fillChunk( chunk, block.getDefaultState() ) ); + + chunk.setModified( false ); + if( !chunk.isTerrainPopulated() ) { chunk.setTerrainPopulated( true ); @@ -80,6 +72,20 @@ public class StorageChunkProvider extends ChunkProviderOverworld return chunk; } + private void fillChunk( Chunk chunk, IBlockState defaultState ) + { + for( int cx = 0; cx < 16; cx++ ) + { + for( int cz = 0; cz < 16; cz++ ) + { + for( int cy = 0; cy < 256; cy++ ) + { + chunk.setBlockState( new BlockPos( cx, cy, cz ), defaultState ); + } + } + } + } + @Override public void populate( final int par2, final int par3 ) { diff --git a/src/main/java/appeng/spatial/StorageWorldProvider.java b/src/main/java/appeng/spatial/StorageWorldProvider.java index 94b679370..d1a520b67 100644 --- a/src/main/java/appeng/spatial/StorageWorldProvider.java +++ b/src/main/java/appeng/spatial/StorageWorldProvider.java @@ -24,6 +24,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import net.minecraft.world.DimensionType; import net.minecraft.world.WorldProvider; +import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.BiomeProviderSingle; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.IChunkGenerator; @@ -38,10 +39,13 @@ import appeng.core.AppEng; public class StorageWorldProvider extends WorldProvider { + private final Biome biome; + public StorageWorldProvider() { this.hasNoSky = true; - this.biomeProvider = new BiomeProviderSingle( AppEng.instance().getRegistration().getStorageBiome() ); + biome = AppEng.instance().getRegistration().getStorageBiome(); + this.biomeProvider = new BiomeProviderSingle( biome ); } @Override @@ -147,4 +151,11 @@ public class StorageWorldProvider extends WorldProvider { return false; } + + @Override + public Biome getBiomeForCoords( BlockPos pos ) + { + return biome; + } + }