Fixes #2433: Readded decorative slabs.
This commit is contained in:
@@ -0,0 +1,159 @@
|
||||
package appeng.decorative.slab;
|
||||
|
||||
|
||||
import java.util.Random;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockSlab;
|
||||
import net.minecraft.block.properties.IProperty;
|
||||
import net.minecraft.block.properties.PropertyEnum;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IStringSerializable;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
|
||||
public abstract class BlockSlabCommon extends BlockSlab
|
||||
{
|
||||
|
||||
static final PropertyEnum<BlockSlabCommon.Variant> VARIANT = PropertyEnum.create( "variant", Variant.class );
|
||||
|
||||
private BlockSlabCommon( Block block )
|
||||
{
|
||||
super( block.getMaterial( block.getDefaultState() ) );
|
||||
this.setHardness( block.getBlockHardness( block.getDefaultState(), null, null ) );
|
||||
this.setResistance( block.getExplosionResistance( null ) * 5.0F / 3.0F );
|
||||
|
||||
IBlockState iblockstate = this.blockState.getBaseState();
|
||||
|
||||
if( !this.isDouble() )
|
||||
{
|
||||
iblockstate = iblockstate.withProperty( HALF, BlockSlab.EnumBlockHalf.BOTTOM );
|
||||
}
|
||||
|
||||
this.setDefaultState( iblockstate.withProperty( VARIANT, Variant.DEFAULT ) );
|
||||
this.setCreativeTab( CreativeTabs.BUILDING_BLOCKS );
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the given metadata into a BlockState for this Block
|
||||
*/
|
||||
public IBlockState getStateFromMeta( int meta )
|
||||
{
|
||||
IBlockState iblockstate = this.getDefaultState().withProperty( VARIANT, Variant.DEFAULT );
|
||||
|
||||
if( !this.isDouble() )
|
||||
{
|
||||
iblockstate = iblockstate.withProperty( HALF, ( meta & 8 ) == 0 ? BlockSlab.EnumBlockHalf.BOTTOM : BlockSlab.EnumBlockHalf.TOP );
|
||||
}
|
||||
|
||||
return iblockstate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert the BlockState into the correct metadata value
|
||||
*/
|
||||
public int getMetaFromState( IBlockState state )
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if( !this.isDouble() && state.getValue( HALF ) == BlockSlab.EnumBlockHalf.TOP )
|
||||
{
|
||||
i |= 8;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
protected BlockStateContainer createBlockState()
|
||||
{
|
||||
return this.isDouble() ? new BlockStateContainer( this, VARIANT ) : new BlockStateContainer( this, HALF, VARIANT );
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Item getItemDropped( IBlockState state, Random rand, int fortune )
|
||||
{
|
||||
return Item.getItemFromBlock( this );
|
||||
}
|
||||
|
||||
public ItemStack getItem( World worldIn, BlockPos pos, IBlockState state )
|
||||
{
|
||||
return new ItemStack( this, 1, 0 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName( int meta )
|
||||
{
|
||||
return getUnlocalizedName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IProperty<?> getVariantProperty()
|
||||
{
|
||||
return VARIANT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Comparable<?> getTypeForItem( ItemStack stack )
|
||||
{
|
||||
return Variant.DEFAULT;
|
||||
}
|
||||
|
||||
public static class Double extends BlockSlabCommon
|
||||
{
|
||||
|
||||
private final Block halfSlabBlock;
|
||||
|
||||
public Double( Block halfSlabBlock, Block block )
|
||||
{
|
||||
super( block );
|
||||
this.halfSlabBlock = halfSlabBlock;
|
||||
}
|
||||
|
||||
public boolean isDouble()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public Item getItemDropped( IBlockState state, Random rand, int fortune )
|
||||
{
|
||||
return Item.getItemFromBlock( halfSlabBlock );
|
||||
}
|
||||
|
||||
public ItemStack getItem( World worldIn, BlockPos pos, IBlockState state )
|
||||
{
|
||||
return new ItemStack( halfSlabBlock, 1, 0 );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class Half extends BlockSlabCommon
|
||||
{
|
||||
|
||||
public Half( Block block )
|
||||
{
|
||||
super( block );
|
||||
}
|
||||
|
||||
public boolean isDouble()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Variant implements IStringSerializable
|
||||
{
|
||||
DEFAULT;
|
||||
|
||||
public String getName()
|
||||
{
|
||||
return "default";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user