/******************************************************************************* * Copyright (c) 2013 Aroma1997. * All rights reserved. This program and other files related to this program are * licensed with a extended GNU General Public License v. 3 * License informations are at: * https://github.com/Aroma1997/CompactWindmills/blob/master/license.txt ******************************************************************************/ package aroma1997.compactwindmills; import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import org.apache.logging.log4j.Level; import aroma1997.core.inventories.Inventories; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** * * @author Aroma1997 * */ public class BlockCompactWindmill extends BlockContainer { public static final int[][] sideAndMetaToTextureNumber = { {0, 0, 0, 0, 0, 0}, {1, 2, 1, 1, 1, 1}, {3, 3, 2, 3, 3, 3}, {3, 3, 3, 2, 3, 3}, {3, 3, 3, 3, 2, 3}, {3, 3, 3, 3, 3, 2}}; @SideOnly(Side.CLIENT) private IIcon[][] textures; public BlockCompactWindmill() { super(Material.iron); setBlockName("compactwindmills:compactWindmill"); setHardness(2.0F); setBlockTextureName("compactwindmills:compactWindmill"); setCreativeTab(CompactWindmills.creativeTabCompactWindmills); } @Override public TileEntity createNewTileEntity(World var1, int metadata) { return WindType.makeTileEntity(metadata); } @Override public int damageDropped(int meta) { return meta; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(IBlockAccess iBlockAccess, int x, int y, int z, int side) { int facing = getFacing(iBlockAccess, x, y, z); int meta = iBlockAccess.getBlockMetadata(x, y, z); int textureIndex = sideAndMetaToTextureNumber[side][facing]; try { return textures[meta][textureIndex]; } catch (Exception e) { CompactWindmills.instance.windMillLog.log(Level.WARN, "Failed to get texture at: x=" + x + "; y=" + y + "; z=" + z + "; facing=" + facing + "; side=" + side + "; meta=" + meta + ";"); } return null; } public int getFacing(IBlockAccess iBlockAccess, int x, int y, int z) { TileEntity tileEntity = iBlockAccess.getTileEntity(x, y, z); if (tileEntity instanceof TileEntityWindmill) { return ((TileEntityWindmill) tileEntity).getFacing(); } CompactWindmills.instance.windMillLog.log(Level.WARN, "Failed to get Facing at: x=" + x + "; y=" + y + "; z=" + z + ";"); return 4; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { if (meta > WindType.values().length) { return null; } int facing = 4; int textureIndex = sideAndMetaToTextureNumber[side][facing]; try { return textures[meta][textureIndex]; } catch (Exception e) { CompactWindmills.instance.windMillLog.log(Level.WARN, "Failed to get texture at: side=" + side + "; meta=" + meta + ";"); } return null; } @SuppressWarnings({"rawtypes", "unchecked"}) @Override @SideOnly(Side.CLIENT) public void getSubBlocks(Item item, CreativeTabs creativetab, List itemList) { for (WindType type : WindType.values()) { itemList.add(new ItemStack(this, 1, type.ordinal())); } } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer thePlayer, int s, float f1, float f2, float f3) { if (thePlayer.isSneaking()) { return false; } TileEntity tileEntity = world.getTileEntity(x, y, z); if (tileEntity == null) return false; if (world.isRemote) return true; Inventories.openContainerTileEntity(thePlayer, tileEntity, true); return true; } @Override public int quantityDropped(Random random) { return 1; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister par1IconRegister) { textures = new IIcon[WindType.values().length][4]; for (WindType type : WindType.values()) { for (int side = 0; side < 4; side++) { String sideName = side == 0 ? "bottom" : side == 1 ? "top" : side == 2 ? "front" : "side"; textures[type.ordinal()][side] = par1IconRegister .registerIcon(Reference.ModID + ":" + type.name() + "_" + sideName); } } } }