a14cf2204d
* Fixes #2680: Use a shorter cable anchor model when blocked by a facade. * Fixes #2664: Prevent anchors from creating intersection. Replaced the simple List<ResourceLocation> for the static models with a new container also indicating a solid part, which can be used to prevent the creation of an intersection.
161 lines
3.5 KiB
Java
161 lines
3.5 KiB
Java
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";
|
|
}
|
|
}
|
|
}
|