147 lines
3.5 KiB
Java
147 lines
3.5 KiB
Java
package mekanism.common.item;
|
|
|
|
import java.util.List;
|
|
|
|
import mekanism.common.Tier.BaseTier;
|
|
import mekanism.common.Tier.FactoryTier;
|
|
import mekanism.common.base.IFactory.RecipeType;
|
|
import mekanism.common.tile.TileEntityAdvancedElectricMachine;
|
|
import mekanism.common.tile.TileEntityBasicBlock;
|
|
import mekanism.common.tile.TileEntityElectricMachine;
|
|
import mekanism.common.tile.TileEntityFactory;
|
|
import net.minecraft.block.Block;
|
|
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.World;
|
|
|
|
public class ItemFactoryInstaller extends ItemMekanism
|
|
{
|
|
public IIcon[] icons = new IIcon[256];
|
|
|
|
public ItemFactoryInstaller()
|
|
{
|
|
super();
|
|
setMaxStackSize(1);
|
|
setHasSubtypes(true);
|
|
}
|
|
|
|
@Override
|
|
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
|
|
{
|
|
if(world.isRemote)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
TileEntity tile = world.getTileEntity(x, y, z);
|
|
FactoryTier tier = FactoryTier.values()[stack.getItemDamage()];
|
|
|
|
if(tile instanceof TileEntityBasicBlock && ((TileEntityBasicBlock)tile).playersUsing.size() > 0)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if(tile instanceof TileEntityFactory && tier != FactoryTier.BASIC)
|
|
{
|
|
TileEntityFactory factory = (TileEntityFactory)tile;
|
|
|
|
if(factory.tier.ordinal()+1 == tier.ordinal())
|
|
{
|
|
if(!world.isRemote)
|
|
{
|
|
factory.upgrade();
|
|
}
|
|
|
|
if(!player.capabilities.isCreativeMode)
|
|
{
|
|
stack.stackSize = 0;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
else if(tile != null && tier == FactoryTier.BASIC)
|
|
{
|
|
RecipeType type = null;
|
|
|
|
for(RecipeType iterType : RecipeType.values())
|
|
{
|
|
ItemStack machineStack = iterType.getStack();
|
|
|
|
if(Block.getBlockFromItem(machineStack.getItem()) == world.getBlock(x, y, z) && machineStack.getItemDamage() == world.getBlockMetadata(x, y, z))
|
|
{
|
|
type = iterType;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(type != null)
|
|
{
|
|
if(tile instanceof TileEntityElectricMachine)
|
|
{
|
|
((TileEntityElectricMachine)tile).upgrade(type);
|
|
|
|
if(!player.capabilities.isCreativeMode)
|
|
{
|
|
stack.stackSize = 0;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
else if(tile instanceof TileEntityAdvancedElectricMachine)
|
|
{
|
|
((TileEntityAdvancedElectricMachine)tile).upgrade(type);
|
|
|
|
if(!player.capabilities.isCreativeMode)
|
|
{
|
|
stack.stackSize = 0;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
private int getOutputSlot(FactoryTier tier, int operation)
|
|
{
|
|
return 5+tier.processes+operation;
|
|
}
|
|
|
|
@Override
|
|
public void registerIcons(IIconRegister register)
|
|
{
|
|
for(FactoryTier tier : FactoryTier.values())
|
|
{
|
|
icons[tier.ordinal()] = register.registerIcon("mekanism:" + tier.getBaseTier().getName() + "FactoryInstaller");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public IIcon getIconFromDamage(int meta)
|
|
{
|
|
return icons[meta];
|
|
}
|
|
|
|
@Override
|
|
public void getSubItems(Item item, CreativeTabs tabs, List itemList)
|
|
{
|
|
for(FactoryTier tier : FactoryTier.values())
|
|
{
|
|
itemList.add(new ItemStack(item, 1, tier.ordinal()));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String getUnlocalizedName(ItemStack item)
|
|
{
|
|
return "item." + BaseTier.values()[item.getItemDamage()].getName().toLowerCase() + "FactoryInstaller";
|
|
}
|
|
}
|