Advertisement
Guest User

BlockCardTable.java

a guest
Mar 25th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.93 KB | None | 0 0
  1. package com.mekelaina.duelcraft.blocks;
  2.  
  3. import java.util.List;
  4.  
  5. import javax.annotation.Nullable;
  6.  
  7. import com.google.common.collect.Lists;
  8. import com.mekelaina.duelcraft.Main;
  9. import com.mekelaina.duelcraft.util.IHasModel;
  10.  
  11. import net.minecraft.block.BlockHorizontal;
  12. import net.minecraft.block.SoundType;
  13. import net.minecraft.block.material.Material;
  14. import net.minecraft.block.properties.IProperty;
  15. import net.minecraft.block.properties.PropertyDirection;
  16. import net.minecraft.block.state.BlockStateContainer;
  17. import net.minecraft.block.state.IBlockState;
  18. import net.minecraft.creativetab.CreativeTabs;
  19. import net.minecraft.entity.Entity;
  20. import net.minecraft.item.Item;
  21. import net.minecraft.util.BlockRenderLayer;
  22. import net.minecraft.util.EnumFacing;
  23. import net.minecraft.util.Rotation;
  24. import net.minecraft.util.math.AxisAlignedBB;
  25. import net.minecraft.util.math.BlockPos;
  26. import net.minecraft.util.math.RayTraceResult;
  27. import net.minecraft.util.math.Vec3d;
  28. import net.minecraft.world.IBlockAccess;
  29. import net.minecraft.world.World;
  30. import net.minecraftforge.fml.relauncher.Side;
  31. import net.minecraftforge.fml.relauncher.SideOnly;
  32.  
  33. public class BlockCardTable extends BlockBase implements IHasModel
  34. {
  35.  
  36.     private static final AxisAlignedBB BASE = new AxisAlignedBB(0.156, 0, 0.156, 0.844, 0.094, 0.844);
  37.     private static final AxisAlignedBB POLE = new AxisAlignedBB(0.403, 0.095, 0.403, 0.622, 0.907, 0.622);
  38.     private static final AxisAlignedBB RULER = new AxisAlignedBB(0, 0, 0, 0.062, 1, 0.062);
  39.     private static final AxisAlignedBB TOP = new AxisAlignedBB(0, 0.906, 0, 1, 0.994, 1);
  40.     private static final AxisAlignedBB ZONE1 = new AxisAlignedBB(0.078, 0.994, 0.781, 0.172, 0.994, 0.906);
  41.     private static final AxisAlignedBB ZONE2 = new AxisAlignedBB(0.203, 0.988, 0.781, 0.297, 0.994, 0.906);
  42.     private static final AxisAlignedBB ZONE3 = new AxisAlignedBB(0.328, 0.988, 0.781, 0.422, 0.994, 0.906);
  43.     private static final AxisAlignedBB ZONE4 = new AxisAlignedBB(0.453, 0.988, 0.781, 0.546, 0.994, 0.906);
  44.     private static final AxisAlignedBB ZONE5 = new AxisAlignedBB(0.578, 0.988, 0.781, 0.672, 0.994, 0.906);
  45.     private static final AxisAlignedBB ZONE6 = new AxisAlignedBB(0.703, 0.988, 0.781, 0.797, 0.994, 0.906);
  46.     private static final AxisAlignedBB ZONE7 = new AxisAlignedBB(0.828, 0.988, 0.781, 0.922, 0.994, 0.906);
  47.     private static final AxisAlignedBB ZONE8 = new AxisAlignedBB(0.828, 0.988, 0.094, 0.922, 0.994, 0.219);
  48.     private static final AxisAlignedBB ZONE9 = new AxisAlignedBB(0.703, 0.988, 0.094, 0.797, 0.994, 0.219);
  49.     private static final AxisAlignedBB ZONE10 = new AxisAlignedBB(0.578, 0.988, 0.094, 0.672, 0.994, 0.219);
  50.     private static final AxisAlignedBB ZONE11 = new AxisAlignedBB(0.453, 0.988, 0.094, 0.546, 0.994, 0.219);
  51.     private static final AxisAlignedBB ZONE12 = new AxisAlignedBB(0.328, 0.988, 0.094, 0.422, 0.994, 0.219);
  52.     private static final AxisAlignedBB ZONE13 = new AxisAlignedBB(0.203, 0.988, 0.094, 0.297, 0.994, 0.219);
  53.     private static final AxisAlignedBB ZONE14 = new AxisAlignedBB(0.078, 0.994, 0.094, 0.172, 0.994, 0.219);
  54.     private static final AxisAlignedBB ZONE15 = new AxisAlignedBB(0.078, 0.994, 0.25, 0.172, 0.994, 0.375);
  55.     private static final AxisAlignedBB ZONE16 = new AxisAlignedBB(0.828, 0.988, 0.25, 0.922, 0.994, 0.375);
  56.     private static final AxisAlignedBB ZONE17 = new AxisAlignedBB(0.703, 0.988, 0.25, 0.797, 0.994, 0.375);
  57.     private static final AxisAlignedBB ZONE18 = new AxisAlignedBB(0.578, 0.988, 0.25, 0.672, 0.994, 0.375);
  58.     private static final AxisAlignedBB ZONE19 = new AxisAlignedBB(0.453, 0.988, 0.25, 0.547, 0.994, 0.375);
  59.     private static final AxisAlignedBB ZONE20 = new AxisAlignedBB(0.328, 0.988, 0.25, 0.422, 0.994, 0.375);
  60.     private static final AxisAlignedBB ZONE21 = new AxisAlignedBB(0.203, 0.988, 0.25, 0.297, 0.994, 0.375);
  61.     private static final AxisAlignedBB ZONE22 = new AxisAlignedBB(0.203, 0.988, 0.625, 0.297, 0.994, 0.75);
  62.     private static final AxisAlignedBB ZONE23 = new AxisAlignedBB(0.078, 0.988, 0.625, 0.172, 0.994, 0.75);
  63.     private static final AxisAlignedBB ZONE24 = new AxisAlignedBB(0.328, 0.988, 0.625, 0.422, 0.994, 0.75);
  64.     private static final AxisAlignedBB ZONE25 = new AxisAlignedBB(0.453, 0.988, 0.625, 0.547, 0.994, 0.75);
  65.     private static final AxisAlignedBB ZONE26 = new AxisAlignedBB(0.578, 0.988, 0.625, 0.672, 0.994, 0.75);
  66.     private static final AxisAlignedBB ZONE27 = new AxisAlignedBB(0.703, 0.988, 0.625, 0.797, 0.994, 0.75);
  67.     private static final AxisAlignedBB ZONE28 = new AxisAlignedBB(0.828, 0.988, 0.625, 0.922, 0.994, 0.75);
  68.     private static final AxisAlignedBB ZONE29 = new AxisAlignedBB(0.578, 0.988, 0.438, 0.672, 0.994, 0.562);
  69.     private static final AxisAlignedBB ZONE30 = new AxisAlignedBB(0.328, 0.988, 0.438, 0.422, 0.994, 0.562);
  70.    
  71.     private static final List<AxisAlignedBB> COLLISION_BOXES = Lists.newArrayList(BASE, POLE, RULER, TOP, ZONE1, ZONE2, ZONE3, ZONE4, ZONE5, ZONE6, ZONE7, ZONE8, ZONE9, ZONE10, ZONE11, ZONE12, ZONE13, ZONE14, ZONE15, ZONE16, ZONE17, ZONE18, ZONE19, ZONE20, ZONE21, ZONE22, ZONE23, ZONE24, ZONE25, ZONE26, ZONE27, ZONE28, ZONE29, ZONE30);
  72.     private static final AxisAlignedBB BOUNDING_BOX = new AxisAlignedBB(0, 0, 0, 1, 1, 1 );
  73.    
  74.     public static final PropertyDirection FACING = BlockHorizontal.FACING;
  75.     public static final BlockRenderLayer RENDER_LAYER = BlockRenderLayer.TRANSLUCENT;
  76.    
  77.     public BlockCardTable(String name, Material materialIn)
  78.     {
  79.         super(name, materialIn);
  80.         setCreativeTab(CreativeTabs.DECORATIONS);
  81.         setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH));
  82.         setSoundType(SoundType.WOOD);
  83.        
  84.         //canRenderInLayer(state, layer)
  85.     }
  86.    
  87.     @Override
  88.     public void registerModels()
  89.     {
  90.         Main.proxy.registerItemRenderer(Item.getItemFromBlock(this), 0, "inventory");
  91.        
  92.     }
  93.    
  94.    
  95.     @Override
  96.     public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
  97.     {
  98.         return BOUNDING_BOX;
  99.     }
  100.  
  101.     @Override
  102.     @Nullable
  103.     public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entity, boolean isActualState)
  104.     {
  105.         entityBox = entityBox.offset(-pos.getX(), -pos.getY(), -pos.getZ());
  106.         for (AxisAlignedBB box : COLLISION_BOXES)
  107.         {
  108.             if (entityBox.intersects(box))
  109.                 collidingBoxes.add(box.offset(pos));
  110.         }
  111.     }
  112.    
  113.      public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state)
  114.         {
  115.             this.setDefaultFacing(worldIn, pos, state);
  116.         }
  117.  
  118.         private void setDefaultFacing(World worldIn, BlockPos pos, IBlockState state)
  119.         {
  120.             if (!worldIn.isRemote)
  121.             {
  122.                 IBlockState iblockstate = worldIn.getBlockState(pos.north());
  123.                 IBlockState iblockstate1 = worldIn.getBlockState(pos.south());
  124.                 IBlockState iblockstate2 = worldIn.getBlockState(pos.west());
  125.                 IBlockState iblockstate3 = worldIn.getBlockState(pos.east());
  126.                 EnumFacing enumfacing = (EnumFacing)state.getValue(FACING);
  127.  
  128.                 if (enumfacing == EnumFacing.NORTH && iblockstate.isFullBlock() && !iblockstate1.isFullBlock())
  129.                 {
  130.                     enumfacing = EnumFacing.SOUTH;
  131.                 }
  132.                 else if (enumfacing == EnumFacing.SOUTH && iblockstate1.isFullBlock() && !iblockstate.isFullBlock())
  133.                 {
  134.                     enumfacing = EnumFacing.NORTH;
  135.                 }
  136.                 else if (enumfacing == EnumFacing.WEST && iblockstate2.isFullBlock() && !iblockstate3.isFullBlock())
  137.                 {
  138.                     enumfacing = EnumFacing.EAST;
  139.                 }
  140.                 else if (enumfacing == EnumFacing.EAST && iblockstate3.isFullBlock() && !iblockstate2.isFullBlock())
  141.                 {
  142.                     enumfacing = EnumFacing.WEST;
  143.                 }
  144.  
  145.                 worldIn.setBlockState(pos, state.withProperty(FACING, enumfacing), 2);
  146.             }
  147.         }
  148.    
  149.     @Override
  150.     public boolean isOpaqueCube(IBlockState state)
  151.     {
  152.        
  153.         return false;
  154.     }
  155.    
  156.     @Override
  157.     public boolean isFullCube(IBlockState state)
  158.     {
  159.         return false;
  160.     }
  161.  
  162.     @SideOnly(Side.CLIENT)
  163.     public BlockRenderLayer getBlockLayer()
  164.     {
  165.         return BlockRenderLayer.TRANSLUCENT;
  166.     }
  167.    
  168.     @Override
  169.     //@Nullable
  170.     public RayTraceResult collisionRayTrace(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end)
  171.     {
  172.         double distanceSq;
  173.         double distanceSqShortest = Double.POSITIVE_INFINITY;
  174.         RayTraceResult resultClosest = null;
  175.         RayTraceResult result;
  176.         start = start.subtract(pos.getX(), pos.getY(), pos.getZ());
  177.         end = end.subtract(pos.getX(), pos.getY(), pos.getZ());
  178.         for (AxisAlignedBB box : COLLISION_BOXES)
  179.         {
  180.             result = box.calculateIntercept(start, end);
  181.             if (result == null)
  182.                 continue;
  183.  
  184.             distanceSq = result.hitVec.squareDistanceTo(start);
  185.             if (distanceSq < distanceSqShortest)
  186.             {
  187.                 distanceSqShortest = distanceSq;
  188.                 resultClosest = result;
  189.             }
  190.         }
  191.         return resultClosest == null ? null : new RayTraceResult(RayTraceResult.Type.BLOCK, resultClosest.hitVec.addVector(pos.getX(), pos.getY(), pos.getZ()), resultClosest.sideHit, pos);
  192.     }
  193.    
  194.     @Override
  195.     protected BlockStateContainer createBlockState()
  196.     {
  197.         return new BlockStateContainer(this, new IProperty[] {FACING});
  198.     }
  199.    
  200.     @Override
  201.     public IBlockState withRotation(IBlockState state, Rotation rot)
  202.     {
  203.         return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING)));
  204.     }
  205.  
  206.     @Override
  207.     public IBlockState getStateFromMeta(int meta)
  208.     {
  209.         EnumFacing enumfacing = EnumFacing.getFront(meta);
  210.        
  211.         if (enumfacing.getAxis() == EnumFacing.Axis.Y)
  212.         {
  213.             enumfacing = EnumFacing.NORTH;
  214.         }
  215.        
  216.         return this.getDefaultState().withProperty(FACING, enumfacing);
  217.     }
  218.    
  219.  
  220.         /**
  221.          * Convert the BlockState into the correct metadata value
  222.          */
  223.         public int getMetaFromState(IBlockState state)
  224.         {
  225.             return ((EnumFacing)state.getValue(FACING)).getIndex();
  226.         }
  227.    
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement