Make block registration a bit more robust

This commit is contained in:
Cheeserolls 2015-04-04 14:11:25 +01:00
parent 7e7e0f5c7f
commit 101e305bce
4 changed files with 31 additions and 11 deletions

View File

@ -18,7 +18,6 @@ public interface IBOPBlock {
public int getItemRenderColor(IBlockState state, int tintIndex);
public IProperty[] getPresetProperties();
public IProperty[] getRenderProperties();
public IBlockState getDefaultState();
public String getStateName(IBlockState state);
}

View File

@ -285,12 +285,17 @@ public class ModBlocks
// if this block supports the IBOPBlock interface then we can determine the item block class, and sub-blocks automatically
IBOPBlock bopBlock = (IBOPBlock)block;
GameRegistry.registerBlock(block, bopBlock.getItemClass(), blockName);
ImmutableSet<IBlockState> presets = BlockStateUtils.getBlockPresets(bopBlock);
// check for missing default states
IBlockState defaultState = block.getDefaultState();
if (defaultState == null) {throw new java.lang.NullPointerException("missing default state for " + block.getUnlocalizedName());}
// get the preset blocks variants
ImmutableSet<IBlockState> presets = BlockStateUtils.getBlockPresets(block);
if (presets.isEmpty())
{
// block has no sub-blocks to register
registerBlockVariant(block, blockName, block.getMetaFromState(block.getDefaultState()));
registerBlockVariant(block, blockName, block.getMetaFromState(defaultState));
}
else
{

View File

@ -47,7 +47,7 @@ public class ItemBOPBlock extends ItemBlock
@SideOnly(Side.CLIENT)
public void getSubItems(Item itemIn, CreativeTabs tab, List subItems)
{
ImmutableSet<IBlockState> presets = BlockStateUtils.getBlockPresets(bopBlock);
ImmutableSet<IBlockState> presets = BlockStateUtils.getBlockPresets(this.block);
if (presets.isEmpty())
{
subItems.add(new ItemStack(this.block, 1, this.block.getMetaFromState( this.block.getDefaultState() )));
@ -78,7 +78,7 @@ public class ItemBOPBlock extends ItemBlock
@Override
public String getUnlocalizedName(ItemStack stack)
{
ImmutableSet<IBlockState> presets = BlockStateUtils.getBlockPresets(bopBlock);
ImmutableSet<IBlockState> presets = BlockStateUtils.getBlockPresets(this.block);
if (presets.isEmpty())
{
return super.getUnlocalizedName();

View File

@ -16,6 +16,7 @@ import java.util.Set;
import java.util.Stack;
import java.util.Map.Entry;
import net.minecraft.block.Block;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.state.IBlockState;
import biomesoplenty.api.block.IBOPBlock;
@ -44,15 +45,30 @@ public class BlockStateUtils
return desc;
}
public static ImmutableSet<IBlockState> getBlockPresets(IBOPBlock block)
{
return getStatesSet(block.getDefaultState(), block.getPresetProperties());
public static ImmutableSet<IBlockState> getBlockPresets(Block block)
{
IBlockState defaultState = block.getDefaultState();
if (defaultState != null && block instanceof IBOPBlock)
{
return getStatesSet(block.getDefaultState(), ((IBOPBlock)block).getPresetProperties());
}
else
{
return ImmutableSet.<IBlockState>of();
}
}
public static ImmutableSet<IBlockState> getBlockRenderStates(IBOPBlock block)
public static ImmutableSet<IBlockState> getBlockRenderStates(Block block)
{
return getStatesSet(block.getDefaultState(), block.getRenderProperties());
IBlockState defaultState = block.getDefaultState();
if (defaultState != null && block instanceof IBOPBlock)
{
return getStatesSet(block.getDefaultState(), ((IBOPBlock)block).getRenderProperties());
}
else
{
return ImmutableSet.<IBlockState>of();
}
}
public static ImmutableSet<IBlockState> getStatesSet(IBlockState baseState, IProperty... properties)