Guest User

Untitled

a guest
Jun 18th, 2016
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. public class ModWall extends Block {
  2.  
  3. public static final PropertyBool UP = PropertyBool.create("up");
  4. public static final PropertyBool NORTH = PropertyBool.create("north");
  5. public static final PropertyBool EAST = PropertyBool.create("east");
  6. public static final PropertyBool SOUTH = PropertyBool.create("south");
  7. public static final PropertyBool WEST = PropertyBool.create("west");
  8. protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {
  9. new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D),
  10. new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D),
  11. new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D),
  12. new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D),
  13. new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D),
  14. new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D),
  15. new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D),
  16. new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D),
  17. new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D),
  18. new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D),
  19. new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D),
  20. new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D),
  21. new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D),
  22. new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D),
  23. new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D),
  24. new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D) };
  25. protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] { AABB_BY_INDEX[0].setMaxY(1.5D),
  26. AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D),
  27. AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D),
  28. AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D),
  29. AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D),
  30. AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D) };
  31.  
  32. public ModWall(Block modelBlock, SoundType stepSound, String tool, int toolLevel) {
  33. super(modelBlock.getMaterial(modelBlock.getDefaultState()));
  34. this.setSoundType(stepSound);
  35. this.setHarvestLevel(tool, toolLevel);
  36. this.setDefaultState(this.blockState.getBaseState().withProperty(UP, Boolean.valueOf(false))
  37. .withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false))
  38. .withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false)));
  39. }
  40.  
  41. @Override
  42. public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) {
  43. state = this.getActualState(state, source, pos);
  44. return AABB_BY_INDEX[getAABBIndex(state)];
  45. }
  46.  
  47. @Override
  48. public AxisAlignedBB getSelectedBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) {
  49. blockState = this.getActualState(blockState, worldIn, pos);
  50. return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)];
  51. }
  52.  
  53. @Override
  54. public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) {
  55. blockState = this.getActualState(blockState, worldIn, pos);
  56. return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)];
  57. }
  58.  
  59. private static int getAABBIndex(IBlockState state) {
  60. int i = 0;
  61.  
  62. if (((Boolean) state.getValue(NORTH)).booleanValue()) {
  63. i |= 1 << EnumFacing.NORTH.getHorizontalIndex();
  64. }
  65.  
  66. if (((Boolean) state.getValue(EAST)).booleanValue()) {
  67. i |= 1 << EnumFacing.EAST.getHorizontalIndex();
  68. }
  69.  
  70. if (((Boolean) state.getValue(SOUTH)).booleanValue()) {
  71. i |= 1 << EnumFacing.SOUTH.getHorizontalIndex();
  72. }
  73.  
  74. if (((Boolean) state.getValue(WEST)).booleanValue()) {
  75. i |= 1 << EnumFacing.WEST.getHorizontalIndex();
  76. }
  77.  
  78. return i;
  79. }
  80.  
  81. @Override
  82. public boolean isFullCube(IBlockState state) {
  83. return false;
  84. }
  85.  
  86. @Override
  87. public boolean isPassable(IBlockAccess worldIn, BlockPos pos) {
  88. return false;
  89. }
  90.  
  91. @Override
  92. public boolean isOpaqueCube(IBlockState state) {
  93. return false;
  94. }
  95.  
  96. @Override
  97. @SideOnly(Side.CLIENT)
  98. public void getSubBlocks(Item itemIn, CreativeTabs tab, List<ItemStack> list) {
  99. list.add(new ItemStack(itemIn, 1, 0));
  100. }
  101.  
  102. @SideOnly(Side.CLIENT)
  103. public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos,
  104. EnumFacing side) {
  105. return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true;
  106. }
  107.  
  108. @Override
  109. public int getMetaFromState(IBlockState state) {
  110. return 0;
  111. }
  112.  
  113. @Override
  114. public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) {
  115. boolean flag = this.canConnectTo(worldIn, pos.north());
  116. boolean flag1 = this.canConnectTo(worldIn, pos.east());
  117. boolean flag2 = this.canConnectTo(worldIn, pos.south());
  118. boolean flag3 = this.canConnectTo(worldIn, pos.west());
  119. boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3;
  120. return state.withProperty(UP, Boolean.valueOf(!flag4 || !worldIn.isAirBlock(pos.up())))
  121. .withProperty(NORTH, Boolean.valueOf(flag)).withProperty(EAST, Boolean.valueOf(flag1))
  122. .withProperty(SOUTH, Boolean.valueOf(flag2)).withProperty(WEST, Boolean.valueOf(flag3));
  123. }
  124.  
  125. private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos) {
  126. IBlockState iblockstate = worldIn.getBlockState(pos);
  127. Block block = iblockstate.getBlock();
  128. Material material = iblockstate.getMaterial();
  129. if (block == Blocks.BARRIER) {
  130. return false;
  131. }
  132. if (block == ModElements.glowing_air) {
  133. return false;
  134. }
  135. if (block == ModElements.glowing_barrier) {
  136. return false;
  137. }
  138. if (material == Material.GOURD) {
  139. return false;
  140. } else {
  141. return true;
  142. }
  143. }
  144.  
  145. @Override
  146. protected BlockStateContainer createBlockState() {
  147. return new BlockStateContainer(this, new IProperty[] { UP, NORTH, EAST, WEST, SOUTH });
  148. }
  149.  
  150. }
Advertisement
Add Comment
Please, Sign In to add comment