package crazypants.enderio.machine.solar; import java.util.List; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import com.enderio.core.api.client.gui.IResourceTooltipProvider; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import crazypants.enderio.BlockEio; import crazypants.enderio.EnderIO; import crazypants.enderio.ModObject; import crazypants.enderio.config.Config; import crazypants.enderio.waila.IWailaInfoProvider; public class BlockSolarPanel extends BlockEio implements IResourceTooltipProvider, IWailaInfoProvider { public static int renderId; public static BlockSolarPanel create() { BlockSolarPanel result = new BlockSolarPanel(); result.init(); return result; } private static final float BLOCK_HEIGHT = 0.15f; IIcon sideIcon; IIcon advancedSideIcon; IIcon advancedIcon; IIcon borderIcon; IIcon advancedBorderIcon; private BlockSolarPanel() { super(ModObject.blockSolarPanel.unlocalisedName, TileEntitySolarPanel.class); if(!Config.photovoltaicCellEnabled) { setCreativeTab(null); } setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, BLOCK_HEIGHT, 1.0F); } @Override protected void init() { GameRegistry.registerBlock(this, BlockItemSolarPanel.class, name); if(teClass != null) { GameRegistry.registerTileEntity(teClass, name + "TileEntity"); } } @Override public int damageDropped(int damage) { return damage; } @Override public boolean renderAsNormalBlock() { return false; } @Override public boolean isOpaqueCube() { return false; } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(int side, int meta) { if(side == ForgeDirection.UP.ordinal()) { return meta == 0 ? blockIcon : advancedIcon; } return meta == 0 ? sideIcon : advancedSideIcon; } public IIcon getBorderIcon(int i, int meta) { return meta == 0 ? borderIcon : advancedBorderIcon; } @Override public int getRenderType() { return renderId; } @Override public void onNeighborBlockChange(World world, int x, int y, int z, Block par5) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntitySolarPanel) { ((TileEntitySolarPanel) te).onNeighborBlockChange(); } } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister register) { blockIcon = register.registerIcon("enderio:solarPanelTop"); advancedIcon = register.registerIcon("enderio:solarPanelAdvancedTop"); sideIcon = register.registerIcon("enderio:solarPanelSide"); advancedSideIcon = register.registerIcon("enderio:solarPanelAdvancedSide"); borderIcon = register.registerIcon("enderio:solarPanelBorder"); advancedBorderIcon = register.registerIcon("enderio:solarPanelAdvancedBorder"); } @Override public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) { setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, BLOCK_HEIGHT, 1.0F); } @Override public void setBlockBoundsForItemRender() { setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, BLOCK_HEIGHT, 1.0F); } @SuppressWarnings("rawtypes") @Override public void addCollisionBoxesToList(World par1World, int par2, int par3, int par4, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity) { setBlockBoundsBasedOnState(par1World, par2, par3, par4); super.addCollisionBoxesToList(par1World, par2, par3, par4, par5AxisAlignedBB, par6List, par7Entity); } @Override public String getUnlocalizedNameForTooltip(ItemStack itemStack) { return getUnlocalizedName(); } @Override public void getWailaInfo(List<String> tooltip, EntityPlayer player, World world, int x, int y, int z) { TileEntity te = world.getTileEntity(x, y, z); if(te instanceof TileEntitySolarPanel) { TileEntitySolarPanel solar = (TileEntitySolarPanel) te; float efficiency = solar.calculateLightRatio(); if(!solar.canSeeSun()) { tooltip.add(EnumChatFormatting.RED + EnderIO.lang.localize("tooltip.sunlightBlocked")); } else { tooltip.add(String.format("%s : %s%.0f%%", EnumChatFormatting.WHITE + EnderIO.lang.localize("tooltip.efficiency") + EnumChatFormatting.RESET, EnumChatFormatting.WHITE, efficiency * 100)); } } } @Override public int getDefaultDisplayMask(World world, int x, int y, int z) { return 0; } }