150 lines
4.4 KiB
Java
150 lines
4.4 KiB
Java
package biomesoplenty.blocks.renderers;
|
|
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.client.renderer.EntityRenderer;
|
|
import net.minecraft.client.renderer.RenderBlocks;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import net.minecraft.world.IBlockAccess;
|
|
import biomesoplenty.api.Blocks;
|
|
import biomesoplenty.blocks.BlockBOPPlant;
|
|
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
|
|
|
|
public class PlantsRenderer implements ISimpleBlockRenderingHandler
|
|
{
|
|
@Override
|
|
public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer)
|
|
{
|
|
// Doesn't render in inventory
|
|
}
|
|
|
|
@Override
|
|
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
|
|
{
|
|
if (modelId == RenderUtils.plantsModel)
|
|
{
|
|
int meta = world.getBlockMetadata(x, y, z);
|
|
if (meta < 5)
|
|
return renderCrossedSquares(block, x, y, z, renderer, true);
|
|
if (meta == 5)
|
|
return renderer.renderCrossedSquares(block, x, y, z);
|
|
if (meta == 6)
|
|
return renderBlockCrops(block, x, y, z, renderer);
|
|
if (meta == 7)
|
|
return renderer.renderBlockCrops(block, x, y, z);
|
|
if (meta == 8)
|
|
return renderer.renderBlockCrops(block, x, y, z);
|
|
if (meta == 9)
|
|
return renderer.renderBlockCrops(block, x, y, z);
|
|
if (meta == 10)
|
|
return renderer.renderBlockCrops(block, x, y, z);
|
|
if (meta == 11)
|
|
return renderer.renderBlockCrops(block, x, y, z);
|
|
if (meta == 12)
|
|
return renderCrossedSquares(block, x, y, z, renderer, true);
|
|
if (meta == 13)
|
|
return renderer.renderBlockCrops(block, x, y, z);
|
|
if (meta == 14)
|
|
{
|
|
return renderCrossedSquares(block, x, y, z, renderer, false);
|
|
}
|
|
if (meta == 15)
|
|
return renderCrossedSquares(block, x, y, z, renderer, true);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean shouldRender3DInInventory()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public int getRenderId()
|
|
{
|
|
return RenderUtils.plantsModel;
|
|
}
|
|
|
|
private boolean renderBlockCrops(Block par1Block, int par2, int par3, int par4, RenderBlocks renderer)
|
|
{
|
|
Tessellator tessellator = Tessellator.instance;
|
|
tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3, par4));
|
|
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
|
|
|
|
double d0 = par2;
|
|
double d1 = par3;
|
|
double d2 = par4;
|
|
|
|
long i1 = par2 * 3129871 ^ par4 * 116129781L ^ par3;
|
|
|
|
i1 = i1 * i1 * 42317861L + i1 * 11L;
|
|
d0 += ((i1 >> 16 & 15L) / 15.0F - 0.5D) * 0.125D;
|
|
d2 += ((i1 >> 24 & 15L) / 15.0F - 0.5D) * 0.125D;
|
|
|
|
renderer.renderBlockCropsImpl(par1Block, renderer.blockAccess.getBlockMetadata(par2, par3, par4), d0, par3 - 0.0625F, d2);
|
|
return true;
|
|
}
|
|
|
|
private boolean renderCrossedSquares(Block par1Block, int par2, int par3, int par4, RenderBlocks renderer, boolean colourMultiply)
|
|
{
|
|
Tessellator tessellator = Tessellator.instance;
|
|
tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(renderer.blockAccess, par2, par3, par4));
|
|
float f = 1.0F;
|
|
int l = par1Block.colorMultiplier(renderer.blockAccess, par2, par3, par4);
|
|
float f1 = (l >> 16 & 255) / 255.0F;
|
|
float f2 = (l >> 8 & 255) / 255.0F;
|
|
float f3 = (l & 255) / 255.0F;
|
|
|
|
if (EntityRenderer.anaglyphEnable)
|
|
{
|
|
float f4 = (f1 * 30.0F + f2 * 59.0F + f3 * 11.0F) / 100.0F;
|
|
float f5 = (f1 * 30.0F + f2 * 70.0F) / 100.0F;
|
|
float f6 = (f1 * 30.0F + f3 * 70.0F) / 100.0F;
|
|
f1 = f4;
|
|
f2 = f5;
|
|
f3 = f6;
|
|
}
|
|
|
|
if (!colourMultiply)
|
|
{
|
|
f1 = f;
|
|
f2 = f;
|
|
f3 = f;
|
|
}
|
|
|
|
tessellator.setColorOpaque_F(f * f1, f * f2, f * f3);
|
|
double d0 = par2;
|
|
double d1 = par3;
|
|
double d2 = par4;
|
|
|
|
long i1 = par2 * 3129871 ^ par4 * 116129781L ^ par3;
|
|
|
|
int meta = renderer.blockAccess.getBlockMetadata(par2, par3, par4);
|
|
|
|
if (meta == 15)
|
|
{
|
|
i1 = i1 * i1 * 42317861L + i1 * 11L;
|
|
d0 += ((i1 >> 16 & 15L) / 15.0F - 0.5D) * 0.2D;
|
|
d1 -= ((i1 >> 20 & 15L) / 15.0F - 1.0D) * 0.4D;
|
|
d2 += ((i1 >> 24 & 15L) / 15.0F - 0.5D) * 0.2D;
|
|
}
|
|
else
|
|
{
|
|
i1 = i1 * i1 * 42317861L + i1 * 11L;
|
|
d0 += ((i1 >> 16 & 15L) / 15.0F - 0.5D) * 0.5D;
|
|
d1 += ((i1 >> 20 & 15L) / 15.0F - 1.0D) * 0.2D;
|
|
d2 += ((i1 >> 24 & 15L) / 15.0F - 0.5D) * 0.5D;
|
|
}
|
|
|
|
if (meta == 14)
|
|
{
|
|
renderer.drawCrossedSquares(par1Block, meta, d0, d1, d2, 1.0F);
|
|
RenderUtils.renderCrossedSquaresFromIcon(((BlockBOPPlant)Blocks.plants.get()).reedbottom, d0, d1 - 1, d2, 1.0F, renderer);
|
|
}
|
|
else
|
|
{
|
|
renderer.drawCrossedSquares(par1Block, meta, d0, d1, d2, 1.0F);
|
|
}
|
|
return true;
|
|
}
|
|
}
|