package com.mrcrayfish.skateboarding.block;
import java.util.List;
import com.mrcrayfish.skateboarding.MrCrayfishSkateboardingMod;
import com.mrcrayfish.skateboarding.block.attributes.Grindable;
import com.mrcrayfish.skateboarding.util.RotationHelper;
import com.mrcrayfish.skateboarding.util.StateHelper;
import com.mrcrayfish.skateboarding.util.StateHelper.RelativeFacing;
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockHandRail extends BlockObject implements Grindable
{
public static final PropertyBool LEFT = PropertyBool.create("left");
public static final PropertyBool RIGHT = PropertyBool.create("right");
private static final AxisAlignedBB BOUNDING_BOX_ONE = RotationHelper.getBlockBounds(EnumFacing.NORTH, 0.375, 0.0, 0.0, 0.625, 16 * 0.0625, 1.0);
private static final AxisAlignedBB BOUNDING_BOX_TWO = RotationHelper.getBlockBounds(EnumFacing.EAST, 0.375, 0.0, 0.0, 0.625, 16 * 0.0625, 1.0);
private static final AxisAlignedBB[] BOUNDING_BOXES = { BOUNDING_BOX_ONE, BOUNDING_BOX_TWO };
private static final AxisAlignedBB COLLISION_BOX_ONE = RotationHelper.getBlockBounds(EnumFacing.NORTH, 0.375, 0.0, 0.0, 0.625, 16 * 0.0625, 1.0);
private static final AxisAlignedBB COLLISION_BOX_TWO = RotationHelper.getBlockBounds(EnumFacing.EAST, 0.375, 0.0, 0.0, 0.625, 16 * 0.0625, 1.0);
private static final AxisAlignedBB[] COLLISION_BOXES = { COLLISION_BOX_ONE, COLLISION_BOX_TWO };
public BlockHandRail(Material materialIn)
{
super(materialIn);
this.setUnlocalizedName("handrail");
this.setRegistryName("handrail");
this.setCreativeTab(MrCrayfishSkateboardingMod.skateTab);
this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH).withProperty(LEFT, false).withProperty(RIGHT, false));
}
@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, Entity entityIn)
{
EnumFacing facing = state.getValue(FACING);
super.addCollisionBoxToList(pos, entityBox, collidingBoxes, COLLISION_BOXES[facing.getHorizontalIndex() % 2]);
}
@Override
public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
{
EnumFacing facing = state.getValue(FACING);
return BOUNDING_BOXES[facing.getHorizontalIndex() % 2];
}
@Override
public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos)
{
EnumFacing facing = state.getValue(FACING);
if(StateHelper.getRelativeBlock(worldIn, pos, facing, RelativeFacing.LEFT) == this)
{
RelativeFacing relativeFacing = StateHelper.getRelativeFacing(worldIn, pos, facing, RelativeFacing.LEFT);
if(relativeFacing == RelativeFacing.OPPOSITE || relativeFacing == RelativeFacing.SAME)
{
state = state.withProperty(LEFT, true);
}
}
if(StateHelper.getRelativeBlock(worldIn, pos, facing, RelativeFacing.RIGHT) == this)
{
RelativeFacing relativeFacing = StateHelper.getRelativeFacing(worldIn, pos, facing, RelativeFacing.RIGHT);
if(relativeFacing == RelativeFacing.OPPOSITE || relativeFacing == RelativeFacing.SAME)
{
state = state.withProperty(RIGHT, true);
}
}
return state;
}
@Override
protected BlockStateContainer createBlockState()
{
return new BlockStateContainer(this, new IProperty[] { FACING, LEFT, RIGHT });
}
@Override
public boolean canGrind(World world, IBlockState state, BlockPos pos, double posX, double posY, double posZ)
{
return posY >= 1.0;
}
}