package com.carpentersblocks.renderer; import net.minecraft.block.Block; import net.minecraft.block.BlockCrops; import net.minecraft.client.renderer.Tessellator; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import com.carpentersblocks.block.BlockCoverable; import com.carpentersblocks.renderer.helper.RenderHelperFlowerPot; import com.carpentersblocks.util.BlockProperties; import com.carpentersblocks.util.flowerpot.FlowerPotHandler; import com.carpentersblocks.util.flowerpot.FlowerPotProperties; import com.carpentersblocks.util.handler.DesignHandler; import com.carpentersblocks.util.registry.IconRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class BlockHandlerCarpentersFlowerPot extends BlockHandlerBase { @Override public boolean shouldRender3DInInventory(int modelId) { return false; } @Override /** * Override to provide custom icons. */ protected IIcon getUniqueIcon(ItemStack itemStack, int side, IIcon icon) { Block block = BlockProperties.toBlock(itemStack); if (block instanceof BlockCoverable) { return IconRegistry.icon_uncovered_solid; } else if (block.equals(Blocks.glass)) { return IconRegistry.icon_flower_pot_glass; } else { return icon; } } @Override /** * Renders block */ protected void renderCarpentersBlock(int x, int y, int z) { renderBlocks.renderAllFaces = true; ItemStack itemStack = getCoverForRendering(); if (TE.hasDesign()) { suppressOverlay = true; suppressChiselDesign = true; suppressDyeColor = true; } renderPot(itemStack, x, y, z); suppressOverlay = true; suppressChiselDesign = true; suppressDyeColor = true; if (TE.hasAttribute(TE.ATTR_SOIL)) { renderSoil(TE.getAttribute(TE.ATTR_SOIL), x, y, z); } if (TE.hasAttribute(TE.ATTR_PLANT)) { renderPlant(TE.getAttribute(TE.ATTR_PLANT), x, y, z); } suppressOverlay = false; suppressChiselDesign = false; suppressDyeColor = false; renderBlocks.renderAllFaces = false; } /** * Renders flower pot */ public boolean renderPot(ItemStack itemStack, int x, int y, int z) { if (TE.hasDesign()) { IIcon designIcon = IconRegistry.icon_design_flower_pot.get(DesignHandler.listFlowerPot.indexOf(TE.getDesign())); setIconOverride(6, designIcon); } /* BOTTOM BOX */ renderBlocks.setRenderBounds(0.375D, 0.0D, 0.375D, 0.625D, 0.0625D, 0.625D); renderBlock(itemStack, x, y, z); /* NORTH BOX */ renderBlocks.setRenderBounds(0.375D, 0.0D, 0.3125D, 0.625D, 0.375D, 0.375D); renderBlock(itemStack, x, y, z); /* SOUTH BOX */ renderBlocks.setRenderBounds(0.375D, 0.0D, 0.625D, 0.625D, 0.375D, 0.6875D); renderBlock(itemStack, x, y, z); /* WEST BOX */ renderBlocks.setRenderBounds(0.3125D, 0.0D, 0.3125D, 0.375D, 0.375D, 0.6875D); renderBlock(itemStack, x, y, z); /* EAST BOX */ renderBlocks.setRenderBounds(0.625D, 0.0D, 0.3125D, 0.6875D, 0.375D, 0.6875D); renderBlock(itemStack, x, y, z); clearIconOverride(6); return true; } /** * Renders soil */ public boolean renderSoil(ItemStack itemStack, int x, int y, int z) { renderBlocks.setRenderBounds(0.375D, 0.0625D, 0.375D, 0.625D, 0.25D, 0.625D); renderBlock(itemStack, x, y, z); return true; } /** * Renders plant */ public boolean renderPlant(ItemStack itemStack, int x, int y, int z) { Block block = FlowerPotProperties.toBlock(itemStack); if (block.getRenderBlockPass() != renderPass) { return false; } /* Crop plants will use fully matured metadata. */ if (block instanceof BlockCrops) { itemStack.setItemDamage(7); } Tessellator tessellator = Tessellator.instance; tessellator.addTranslation(0.0F, 0.25F, 0.0F); RenderHelperFlowerPot.setPlantColor(this, itemStack, x, y, z); IIcon icon = block.getIcon(2, itemStack.getItemDamage()); switch (FlowerPotHandler.getPlantProfile(itemStack)) { case DOUBLEPLANT: RenderHelperFlowerPot.renderBlockDoublePlant(TE, renderBlocks, itemStack, x, y, z, false); break; case THIN_DOUBLEPLANT: RenderHelperFlowerPot.renderBlockDoublePlant(TE, renderBlocks, itemStack, x, y, z, true); break; case REDUCED_SCALE_YP: RenderHelperFlowerPot.renderPlantCrossedSquares(renderBlocks, block, icon, x, y, z, 0.75F, false); break; case REDUCED_SCALE_YN: RenderHelperFlowerPot.renderPlantCrossedSquares(renderBlocks, block, icon, x, y, z, 0.75F, true); break; case TRUE_SCALE: RenderHelperFlowerPot.renderPlantCrossedSquares(renderBlocks, block, icon, x, y, z, 1.0F, false); break; case THIN_YP: RenderHelperFlowerPot.renderPlantThinCrossedSquares(renderBlocks, block, icon, x, y, z, false); break; case THIN_YN: RenderHelperFlowerPot.renderPlantThinCrossedSquares(renderBlocks, block, icon, x, y, z, true); break; case CACTUS: RenderHelperFlowerPot.drawPlantCactus(lightingHelper, renderBlocks, itemStack, x, y, z); break; case LEAVES: drawStackedBlocks(itemStack, x, y, z); break; } tessellator.addTranslation(0.0F, -0.25F, 0.0F); return true; } /** * Draws stacked blocks for leaves or mod cacti. */ private void drawStackedBlocks(ItemStack itemStack, int x, int y, int z) { TE.setMetadata(itemStack.getItemDamage()); renderBlocks.setRenderBounds(0.375F, 0.0D, 0.375F, 0.625F, 0.25D, 0.625F); renderBlock(itemStack, x, y, z); renderBlocks.setRenderBounds(0.375F, 0.25D, 0.375F, 0.625F, 0.50D, 0.625F); renderBlock(itemStack, x, y, z); renderBlocks.setRenderBounds(0.375F, 0.50D, 0.375F, 0.625F, 0.75D, 0.625F); renderBlock(itemStack, x, y, z); renderBlocks.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); TE.restoreMetadata(); } }