Fixed biome registration for spatial storage cells.

Fixed matrix block conversion to air when transferring.
Fixed biome initialization of new chunks.
This commit is contained in:
Sebastian Hartte 2016-10-09 01:51:41 +02:00
parent 0ed8a4c3e8
commit 8e7d63dccb
4 changed files with 53 additions and 25 deletions

View File

@ -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 )

View File

@ -63,10 +63,21 @@ public class CachedPlane
private final LinkedList<WorldCoord> updates = new LinkedList<WorldCoord>();
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] );

View File

@ -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 )
{

View File

@ -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;
}
}