Package extracells.blocks

Source Code of extracells.blocks.BlockMEDropper

package extracells.blocks;

import net.minecraft.block.BlockSourceImpl;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.dispenser.*;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.Icon;
import net.minecraft.util.StatCollector;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import appeng.api.Util;
import appeng.api.me.items.IAEWrench;
import appeng.api.me.util.IMEInventoryHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import extracells.Extracells;
import extracells.tileentity.TileEntityMEDropper;

public class BlockMEDropper extends RotatableColorBlock
{
  public static final IRegistry dispenseBehaviorRegistry = new RegistryDefaulted(new BehaviorDefaultDispenseItem());
  @SideOnly(Side.CLIENT)
  public Icon sideIcon;
  @SideOnly(Side.CLIENT)
  public Icon topIcon;
  @SideOnly(Side.CLIENT)
  public Icon frontHorizontalIcon;
  @SideOnly(Side.CLIENT)
  public Icon frontVerticalIcon;
  public Boolean unpowered = true;

  public BlockMEDropper(int id)
  {
    super(id, Material.rock);
    setCreativeTab(Extracells.ModTab);
    setUnlocalizedName("block.medropper");
    setHardness(2.0F);
    setResistance(10.0F);
  }

  @SideOnly(Side.CLIENT)
  public Icon getIcon(int side, int metadata)
  {
    return side == 3 ? (metadata != 1 && metadata != 0 ? frontHorizontalIcon : frontVerticalIcon) : (metadata != 1 && metadata != 0 ? (side != 1 && side != 0 ? sideIcon : topIcon) : topIcon);
  }

  @Override
  @SideOnly(Side.CLIENT)
  public Icon getBlockTexture(IBlockAccess blockAccess, int x, int y, int z, int side)
  {
    TileEntity tileentity = blockAccess.getBlockTileEntity(x, y, z);
    int metadata = blockAccess.getBlockMetadata(x, y, z);

    if (tileentity != null)
    {
      return side == metadata ? (metadata != 1 && metadata != 0 ? frontHorizontalIcon : frontVerticalIcon) : (metadata != 1 && metadata != 0 ? (side != 1 && side != 0 ? sideIcon : topIcon) : topIcon);
    }
    return null;
  }

  @SideOnly(Side.CLIENT)
  public void registerIcons(IconRegister iconregister)
  {
    sideIcon = iconregister.registerIcon("extracells:machine.side");
    topIcon = iconregister.registerIcon("extracells:machine.top");
    frontHorizontalIcon = iconregister.registerIcon("extracells:medropper.front_horizontal");
    frontVerticalIcon = iconregister.registerIcon("extracells:medropper.front_vertical");
  }

  @Override
  public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z, int side)
  {
    return false;
  }

  @Override
  public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float offsetX, float offsetY, float offsetZ)
  {
    if (player.inventory.getCurrentItem() != null && player.inventory.getCurrentItem().getItem() instanceof IAEWrench)
    {
      return false;
    }
    if (!world.isRemote)
    {
      if (!player.isSneaking())
      {
        if (!((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).getLocked())
        {
          if (player.inventory.getCurrentItem() != null)
          {
            ((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).setItem(player.inventory.getCurrentItem().copy());
            player.addChatMessage(StatCollector.translateToLocal("tooltip.dropset") + " " + player.inventory.getCurrentItem().getDisplayName());
          }
        } else
        {
          ItemStack item = ((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).getItem();
          player.addChatMessage(StatCollector.translateToLocal("tooltip.item") + ": " + item != null ? item.getDisplayName() : StatCollector.translateToLocal("tooltip.empty1"));
        }
      } else
      {
        ((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).setLocked(!((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).getLocked());
        if (((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).getLocked())
        {
          player.addChatMessage(StatCollector.translateToLocal("tooltip.dropperlocked") + "!");
        } else
        {
          player.addChatMessage(StatCollector.translateToLocal("tooltip.dropperunlocked") + "!");
        }
      }
    }
    return true;
  }

  @Override
  public void onNeighborBlockChange(World world, int x, int y, int z, int neighbourID)
  {
    if (((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).todispense != null)
    {
      ItemStack request = ((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).todispense;
      if (!world.isRemote)
      {
        if ((world.isBlockIndirectlyGettingPowered(x, y, z) || world.isBlockIndirectlyGettingPowered(x, y + 1, z)) && unpowered)
        {
          if (((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).getGrid() != null)
          {
            IMEInventoryHandler cellArray = ((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).getGrid().getCellArray();
            if (cellArray != null && cellArray.extractItems(Util.createItemStack(request)) != null)
            {
              dispense(world, x, y, z, ((TileEntityMEDropper) world.getBlockTileEntity(x, y, z)).getItem().copy());
              unpowered = false;
            }
          }
        } else
        {
          unpowered = true;
        }
      }
    }
  }

  protected void dispense(World world, int x, int y, int z, ItemStack toDispense)
  {
    BlockSourceImpl blockSource = new BlockSourceImpl(world, x, y, z);
    world.playAuxSFX(1001, x, y, z, 0);
    IBehaviorDispenseItem ibehaviordispenseitem = getBehaviorForItemStack(toDispense);
    ibehaviordispenseitem.dispense(blockSource, toDispense);
  }

  protected IBehaviorDispenseItem getBehaviorForItemStack(ItemStack itemstack)
  {
    return (IBehaviorDispenseItem) dispenseBehaviorRegistry.getObject(itemstack.getItem());
  }

  public static IPosition getIPositionFromBlockSource(IBlockSource par0IBlockSource)
  {
    EnumFacing enumfacing = getFacing(par0IBlockSource.getBlockMetadata());
    double d0 = par0IBlockSource.getX() + 0.7D * enumfacing.getFrontOffsetX();
    double d1 = par0IBlockSource.getY() + 0.7D * enumfacing.getFrontOffsetY();
    double d2 = par0IBlockSource.getZ() + 0.7D * enumfacing.getFrontOffsetZ();
    return new PositionImpl(d0, d1, d2);
  }

  public static EnumFacing getFacing(int metadata)
  {
    return EnumFacing.getFront(metadata);
  }

  @Override
  public TileEntity createNewTileEntity(World world)
  {
    return new TileEntityMEDropper();
  }

  @Override
  public boolean hasTileEntity()
  {
    return true;
  }
}
TOP

Related Classes of extracells.blocks.BlockMEDropper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.