Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ModWall extends Block {
- public static final PropertyBool UP = PropertyBool.create("up");
- public static final PropertyBool NORTH = PropertyBool.create("north");
- public static final PropertyBool EAST = PropertyBool.create("east");
- public static final PropertyBool SOUTH = PropertyBool.create("south");
- public static final PropertyBool WEST = PropertyBool.create("west");
- protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {
- new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D),
- new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D),
- new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D),
- new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D),
- new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D),
- new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D),
- new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D),
- new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D),
- new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D),
- new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D),
- new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D),
- new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D),
- new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D),
- new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D),
- new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D),
- new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D) };
- protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] { AABB_BY_INDEX[0].setMaxY(1.5D),
- AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D),
- AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D),
- AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D),
- AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D),
- AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D) };
- public ModWall(Block modelBlock, SoundType stepSound, String tool, int toolLevel) {
- super(modelBlock.getMaterial(modelBlock.getDefaultState()));
- this.setSoundType(stepSound);
- this.setHarvestLevel(tool, toolLevel);
- this.setDefaultState(this.blockState.getBaseState().withProperty(UP, Boolean.valueOf(false))
- .withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false))
- .withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)));
- }
- @Override
- public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
- state = this.getActualState(state, source, pos);
- return AABB_BY_INDEX[getAABBIndex(state)];
- }
- @Override
- public AxisAlignedBB getSelectedBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) {
- blockState = this.getActualState(blockState, worldIn, pos);
- return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)];
- }
- @Override
- public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) {
- blockState = this.getActualState(blockState, worldIn, pos);
- return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)];
- }
- private static int getAABBIndex(IBlockState state) {
- int i = 0;
- if (((Boolean) state.getValue(NORTH)).booleanValue()) {
- i |= 1 << EnumFacing.NORTH.getHorizontalIndex();
- }
- if (((Boolean) state.getValue(EAST)).booleanValue()) {
- i |= 1 << EnumFacing.EAST.getHorizontalIndex();
- }
- if (((Boolean) state.getValue(SOUTH)).booleanValue()) {
- i |= 1 << EnumFacing.SOUTH.getHorizontalIndex();
- }
- if (((Boolean) state.getValue(WEST)).booleanValue()) {
- i |= 1 << EnumFacing.WEST.getHorizontalIndex();
- }
- return i;
- }
- @Override
- public boolean isFullCube(IBlockState state) {
- return false;
- }
- @Override
- public boolean isPassable(IBlockAccess worldIn, BlockPos pos) {
- return false;
- }
- @Override
- public boolean isOpaqueCube(IBlockState state) {
- return false;
- }
- @Override
- @SideOnly(Side.CLIENT)
- public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list) {
- list.add(new ItemStack(itemIn, 1, 0));
- }
- @SideOnly(Side.CLIENT)
- public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos,
- EnumFacing side) {
- return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true;
- }
- @Override
- public int getMetaFromState(IBlockState state) {
- return 0;
- }
- @Override
- public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) {
- boolean flag = this.canConnectTo(worldIn, pos.north());
- boolean flag1 = this.canConnectTo(worldIn, pos.east());
- boolean flag2 = this.canConnectTo(worldIn, pos.south());
- boolean flag3 = this.canConnectTo(worldIn, pos.west());
- boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3;
- return state.withProperty(UP, Boolean.valueOf(!flag4 || !worldIn.isAirBlock(pos.up())))
- .withProperty(NORTH, Boolean.valueOf(flag)).withProperty(EAST, Boolean.valueOf(flag1))
- .withProperty(SOUTH, Boolean.valueOf(flag2)).withProperty(WEST, Boolean.valueOf(flag3));
- }
- private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos) {
- IBlockState iblockstate = worldIn.getBlockState(pos);
- Block block = iblockstate.getBlock();
- Material material = iblockstate.getMaterial();
- if (block == Blocks.BARRIER) {
- return false;
- }
- if (block == ModElements.glowing_air) {
- return false;
- }
- if (block == ModElements.glowing_barrier) {
- return false;
- }
- if (material == Material.GOURD) {
- return false;
- } else {
- return true;
- }
- }
- @Override
- protected BlockStateContainer createBlockState() {
- return new BlockStateContainer(this, new IProperty[] { UP, NORTH, EAST, WEST, SOUTH });
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment