/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.aesthetics.glass; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.*; import mods.railcraft.client.util.textures.TextureAtlasSheet; import mods.railcraft.common.core.Railcraft; import mods.railcraft.common.core.RailcraftConfig; import mods.railcraft.common.plugins.forestry.ForestryPlugin; import mods.railcraft.common.plugins.forge.CreativePlugin; import mods.railcraft.common.plugins.forge.RailcraftRegistry; import mods.railcraft.common.plugins.forge.WorldPlugin; import mods.railcraft.common.plugins.misc.MicroBlockPlugin; import mods.railcraft.common.util.misc.EnumColor; import net.minecraft.block.Block; import net.minecraft.block.BlockGlass; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; /** * * @author CovertJaguar <http://www.railcraft.info/> */ public class BlockStrengthGlass extends BlockGlass { private static BlockStrengthGlass instance; public static boolean renderingHighlight; public static BlockStrengthGlass getBlock() { return instance; } public static void registerBlock() { if (instance == null) if (RailcraftConfig.isBlockEnabled("glass")) { instance = new BlockStrengthGlass(Railcraft.proxy.getRenderId()); RailcraftRegistry.register(instance, ItemStrengthGlass.class); ForestryPlugin.addBackpackItem("builder", instance); for (int meta = 0; meta < 16; meta++) { MicroBlockPlugin.addMicroBlockCandidate(instance, meta); } } } public static ItemStack getItem(int meta) { return getItem(1, meta); } public static ItemStack getItem(int qty, int meta) { if (instance == null) return null; return new ItemStack(instance, qty, meta); } private final int renderId; private IIcon[] icons; private final Map<EnumSet<Neighbors>, IIcon> patterns = new HashMap<EnumSet<Neighbors>, IIcon>(); public BlockStrengthGlass(int renderId) { super(Material.glass, false); this.renderId = renderId; setResistance(5); setHardness(1); setStepSound(Block.soundTypeGlass); setCreativeTab(CreativePlugin.RAILCRAFT_TAB); setBlockName("railcraft.glass"); } @Override public int getRenderType() { return renderId; } @Override public int damageDropped(int meta) { return meta; } @Override protected boolean canSilkHarvest() { return true; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { icons = TextureAtlasSheet.unstitchIcons(iconRegister, "railcraft:glass", 1, 5); patterns.put(EnumSet.noneOf(Neighbors.class), icons[0]); patterns.put(EnumSet.of(Neighbors.BOTTOM), icons[1]); patterns.put(EnumSet.of(Neighbors.TOP, Neighbors.BOTTOM), icons[2]); patterns.put(EnumSet.of(Neighbors.TOP), icons[3]); } private enum Neighbors { TOP, BOTTOM; } @Override public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { if (renderingHighlight) return icons[4]; if (side <= 1) return icons[0]; int meta = world.getBlockMetadata(x, y, z); EnumSet neighbors = EnumSet.noneOf(Neighbors.class); if (WorldPlugin.getBlock(world, x, y + 1, z) == this && world.getBlockMetadata(x, y + 1, z) == meta) neighbors.add(Neighbors.TOP); if (WorldPlugin.getBlock(world, x, y - 1, z) == this && world.getBlockMetadata(x, y - 1, z) == meta) neighbors.add(Neighbors.BOTTOM); return patterns.get(neighbors); } @Override public IIcon getIcon(int side, int meta) { if (renderingHighlight) return icons[4]; return icons[0]; } @Override public void getSubBlocks(Item item, CreativeTabs tab, List list) { for (int meta = 0; meta < 16; meta++) { list.add(new ItemStack(item, 1, meta)); } } @Override public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { return false; } @Override public boolean recolourBlock(World world, int x, int y, int z, ForgeDirection side, int colour) { int meta = world.getBlockMetadata(x, y, z); if (meta != colour) { world.setBlockMetadataWithNotify(x, y, z, colour, 3); return true; } return false; } @Override public int colorMultiplier(IBlockAccess world, int x, int y, int z) { if (renderingHighlight) return super.colorMultiplier(world, x, y, z); int meta = world.getBlockMetadata(x, y, z); return EnumColor.fromId(15 - meta).getHexColor(); } }