package com.carpentersblocks.util.handler; import java.util.HashMap; import java.util.Map; import net.minecraft.block.Block; import net.minecraft.block.BlockGrass; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import com.carpentersblocks.util.BlockProperties; import com.carpentersblocks.util.registry.FeatureRegistry; import com.carpentersblocks.util.registry.IconRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class OverlayHandler { public enum Overlay { NONE(new ItemStack(Blocks.air)), GRASS(new ItemStack(Blocks.grass)), SNOW(new ItemStack(Blocks.snow)), WEB(new ItemStack(Blocks.web)), VINE(new ItemStack(Blocks.vine)), HAY(new ItemStack(Blocks.hay_block)), MYCELIUM(new ItemStack(Blocks.mycelium)); private ItemStack itemStack; private Overlay(ItemStack itemStack) { this.itemStack = itemStack; } public ItemStack getItemStack() { return itemStack; } } public static Map overlayMap = new HashMap(); /** * Initializes overlay definitions from configuration file. */ public static void init() { for (String name : FeatureRegistry.overlayItems) { String itemName = name.substring(0, name.indexOf(":")); if (!overlayMap.containsKey(itemName)) { String overlayType = name.substring(name.indexOf(":") + 1).toLowerCase(); if (overlayType.equals("grass")) { overlayMap.put(itemName, Overlay.GRASS); } else if (overlayType.equals("snow")) { overlayMap.put(itemName, Overlay.SNOW); } else if (overlayType.equals("web")) { overlayMap.put(itemName, Overlay.WEB); } else if (overlayType.equals("vine")) { overlayMap.put(itemName, Overlay.VINE); } else if (overlayType.equals("hay")) { overlayMap.put(itemName, Overlay.HAY); } else if (overlayType.equals("mycelium")) { overlayMap.put(itemName, Overlay.MYCELIUM); } } } } /** * Returns true if overlay covers a majority or all of side. */ public static boolean coversFullSide(Overlay overlay, int side) { switch (overlay) { case GRASS: case SNOW: case HAY: case MYCELIUM: return side == 1; case WEB: case VINE: return true; default: {} } return true; } /** * Returns overlay from qualified ItemStack. */ public static Overlay getOverlayType(ItemStack itemStack) { Object object = overlayMap.get(itemStack.getDisplayName()); if (object == null) { object = overlayMap.get(ChatHandler.getDefaultTranslation(itemStack)); } return object == null ? Overlay.NONE : (Overlay) object; } @SideOnly(Side.CLIENT) /** * Returns icon for overlay side. * * Returns null if there is no icon to return. */ public static IIcon getOverlayIcon(Overlay overlay, int side) { Block block = BlockProperties.toBlock(overlay.getItemStack()); switch (overlay) { case GRASS: case SNOW: case HAY: case MYCELIUM: switch (side) { case 0: return null; case 1: return block.getBlockTextureFromSide(1); default: switch (overlay) { case GRASS: return RenderBlocks.fancyGrass ? BlockGrass.getIconSideOverlay() : IconRegistry.icon_overlay_fast_grass_side; case SNOW: return IconRegistry.icon_overlay_snow_side; case HAY: return IconRegistry.icon_overlay_hay_side; case MYCELIUM: return IconRegistry.icon_overlay_mycelium_side; default: return null; } } case WEB: case VINE: return block.getBlockTextureFromSide(side); default: { return null; } } } }