Advertisement
WackoMcGoose

mod_EvilMinecraft.RenderGrassBlockInWorld

Feb 13th, 2012
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.25 KB | None | 0 0
  1. //Everyday I'm renderin'
  2.  
  3. private boolean RenderGrassBlockInWorld(RenderBlocks renderblocks, IBlockAccess iblockaccess, int i, int j, int k, Block block)
  4.     {
  5.         //Determine state of adjacent blocks
  6.         boolean solidBlockToNorth = BlockGrass.blockConsideredSolid(i, j, k + 1, iblockaccess) || BlockGrass.blockConsideredSolid(i, j + 1, k + 1, iblockaccess);
  7.         boolean solidBlockToEast = BlockGrass.blockConsideredSolid(i + 1, j, k, iblockaccess) || BlockGrass.blockConsideredSolid(i + 1, j + 1, k, iblockaccess);
  8.         boolean solidBlockToSouth = BlockGrass.blockConsideredSolid(i, j, k - 1, iblockaccess) || BlockGrass.blockConsideredSolid(i, j + 1, k - 1, iblockaccess);
  9.         boolean solidBlockToWest = BlockGrass.blockConsideredSolid(i - 1, j, k, iblockaccess) || BlockGrass.blockConsideredSolid(i - 1, j + 1, k, iblockaccess);
  10.         boolean solidBlockToNW = BlockGrass.blockConsideredSolid(i - 1, j, k + 1, iblockaccess) || BlockGrass.blockConsideredSolid(i - 1, j + 1, k + 1, iblockaccess);
  11.         boolean solidBlockToNE = BlockGrass.blockConsideredSolid(i + 1, j, k + 1, iblockaccess) || BlockGrass.blockConsideredSolid(i + 1, j + 1, k + 1, iblockaccess);
  12.         boolean solidBlockToSE = BlockGrass.blockConsideredSolid(i + 1, j, k - 1, iblockaccess) || BlockGrass.blockConsideredSolid(i + 1, j + 1, k - 1, iblockaccess);
  13.         boolean solidBlockToSW = BlockGrass.blockConsideredSolid(i - 1, j, k - 1, iblockaccess) || BlockGrass.blockConsideredSolid(i - 1, j + 1, k - 1, iblockaccess);
  14.         boolean solidBlockOnTop = BlockGrass.blockConsideredSolid(i, j + 1, k, iblockaccess);
  15.         //Determine possible corner types - This is "blocks are in this corner", not "this block is at this corner"
  16.         boolean cornerNW = solidBlockToNorth && solidBlockToWest && solidBlockToNW;
  17.         boolean cornerNE = solidBlockToNorth && solidBlockToEast && solidBlockToNE;
  18.         boolean cornerSW = solidBlockToSouth && solidBlockToWest && solidBlockToSW;
  19.         boolean cornerSE = solidBlockToSouth && solidBlockToEast && solidBlockToSE;
  20.        
  21.         //Render type - Surrounded by blocks, or a block on top = fullblock
  22.         if((cornerNW && cornerNE && cornerSE && cornerSW) || solidBlockOnTop)
  23.         {
  24.             block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
  25.             renderblocks.renderStandardBlock(block, i, j, k);
  26.             //block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); //Full hitbox
  27.             return false;
  28.         }
  29.         //Render type - Corner or edge or flat
  30.         else
  31.         {
  32.             //Toggle the corners, make it easier
  33.             boolean renderCornerNW = false;
  34.             boolean renderCornerNE = false;
  35.             boolean renderCornerSE = false;
  36.             boolean renderCornerSW = false;
  37.             //Edge-type: One or more solid backing blocks
  38.             if(BlockGrass.blockConsideredSolid(i, j, k + 1, iblockaccess) && (iblockaccess.getBlockId(i, j, k + 1) != Block.grass.blockID || BlockGrass.blockConsideredSolid(i, j + 1, k + 1, iblockaccess)))
  39.             {
  40.                 renderCornerNW = renderCornerNE = true;
  41.             }
  42.             if(BlockGrass.blockConsideredSolid(i + 1, j, k, iblockaccess) && (iblockaccess.getBlockId(i + 1, j, k) != Block.grass.blockID || BlockGrass.blockConsideredSolid(i + 1, j + 1, k, iblockaccess)))
  43.             {
  44.                 renderCornerNE = renderCornerSE = true;
  45.             }
  46.             if(BlockGrass.blockConsideredSolid(i, j, k - 1, iblockaccess) && (iblockaccess.getBlockId(i, j, k - 1) != Block.grass.blockID || BlockGrass.blockConsideredSolid(i, j + 1, k - 1, iblockaccess)))
  47.             {
  48.                 renderCornerSE = renderCornerSW = true;
  49.             }
  50.             if(BlockGrass.blockConsideredSolid(i - 1, j, k, iblockaccess) && (iblockaccess.getBlockId(i - 1, j, k) != Block.grass.blockID || BlockGrass.blockConsideredSolid(i - 1, j + 1, k, iblockaccess)))
  51.             {
  52.                 renderCornerSW = renderCornerNW = true;
  53.             }
  54.             //Cornering
  55.             if(cornerNW)
  56.             {
  57.                 renderCornerNW = true;
  58.             }
  59.             if(cornerNE)
  60.             {
  61.                 renderCornerNE = true;
  62.             }
  63.             if(cornerSE)
  64.             {
  65.                 renderCornerSE = true;
  66.             }
  67.             if(cornerSW)
  68.             {
  69.                 renderCornerSW = true;
  70.             }
  71.             //Actually render the things
  72.             if(renderCornerNW && renderCornerNE && renderCornerSE && renderCornerSW) //If all four corners are true
  73.             {
  74.                 block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
  75.                 renderblocks.renderStandardBlock(block, i, j, k);
  76.                 //block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); //Full hitbox
  77.                 return false;
  78.             }
  79.             //Base half-layer, placed even if grass has no solid blocks around it
  80.             block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
  81.             renderblocks.renderStandardBlock(block, i, j, k);
  82.             if(renderCornerNW)
  83.             {
  84.                 block.setBlockBounds(0.0F, 0.5F, 0.5F, 0.5F, 1.0F, 1.0F);
  85.                 renderblocks.renderStandardBlock(block, i, j, k);              
  86.             }
  87.             if(renderCornerNE)
  88.             {
  89.                 block.setBlockBounds(0.5F, 0.5F, 0.5F, 1.0F, 1.0F, 1.0F);
  90.                 renderblocks.renderStandardBlock(block, i, j, k);
  91.             }
  92.             if(renderCornerSE)
  93.             {
  94.                 block.setBlockBounds(0.5F, 0.5F, 0.0F, 1.0F, 1.0F, 0.5F);
  95.                 renderblocks.renderStandardBlock(block, i, j, k);  
  96.             }
  97.             if(renderCornerSW)
  98.             {
  99.                 block.setBlockBounds(0.0F, 0.5F, 0.0F, 0.5F, 1.0F, 0.5F);
  100.                 renderblocks.renderStandardBlock(block, i, j, k);
  101.             }
  102.             /*if(!renderCornerNW && !renderCornerNE && !renderCornerSE && !renderCornerSW)
  103.             {
  104.                 block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); //Half hitbox
  105.             }*/
  106.         }
  107.         block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); //Full hitbox
  108.         return false;
  109.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement