use of minechem.item.element.ElementItem in project Minechem by iopleke.
the class MinechemItemsRegistration method init.
public static void init() {
element = new ElementItem();
GameRegistry.registerItem(element, Reference.ID + "Element");
molecule = new MoleculeItem();
GameRegistry.registerItem(molecule, Reference.ID + "Molecule");
lens = new OpticalMicroscopeLens();
concaveLens = new ItemStack(lens, 1, 0);
convexLens = new ItemStack(lens, 1, 1);
microscopeLens = new ItemStack(lens, 1, 2);
projectorLens = new ItemStack(lens, 1, 3);
GameRegistry.registerItem(lens, Reference.ID + "OpticalMicroscopeLens");
atomicManipulator = new ItemAtomicManipulator();
GameRegistry.registerItem(atomicManipulator, Reference.ID + "AtomicManipulator");
blueprint = new ItemBlueprint();
GameRegistry.registerItem(blueprint, Reference.ID + "Blueprint");
journal = new ChemistJournalItem();
GameRegistry.registerItem(journal, Reference.ID + "Journal");
polytool = new PolytoolItem();
GameRegistry.registerItem(polytool, Reference.ID + "Polytool");
emptyTube = new ItemStack(MinechemItemsRegistration.element, 1, 0);
}
use of minechem.item.element.ElementItem in project Minechem by iopleke.
the class PolytoolContainer method transferStackInSlot.
@Override
public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slot) {
Slot slotObject = (Slot) inventorySlots.get(slot);
ItemStack stack = null;
if (slotObject != null && slotObject.getHasStack()) {
ItemStack stackInSlot = slotObject.getStack();
stack = stackInSlot.copy();
if (slot == 0) {
return null;
} else {
if (stackInSlot.stackSize == 64 && (stackInSlot.getItem() instanceof ElementItem) && PolytoolHelper.getTypeFromElement(ElementItem.getElement(stackInSlot), 1) != null) {
if (!mergeItemStack(stackInSlot, 0, 1, false)) {
return null;
}
} else if (slot < 10) {
if (!this.mergeItemStack(stackInSlot, 10, 37, true)) {
return null;
}
} else if (slot > 9) {
if (!this.mergeItemStack(stackInSlot, 1, 10, true)) {
return null;
}
}
}
if (stackInSlot.stackSize == 0) {
slotObject.putStack(null);
} else {
slotObject.onSlotChanged();
}
if (stackInSlot.stackSize == stack.stackSize) {
return null;
}
slotObject.onPickupFromSlot(entityPlayer, stackInSlot);
}
return stack;
}
use of minechem.item.element.ElementItem in project Minechem by iopleke.
the class PolytoolItem method validAlloyInfusion.
public static boolean validAlloyInfusion(ItemStack polytool, ItemStack element) {
if (element.getItem() instanceof ElementItem) {
PolytoolUpgradeType upgrade = PolytoolHelper.getTypeFromElement((ElementItem.getElement(element)), 1);
if (upgrade instanceof PolytoolTypeAlloy) {
ItemStack toApply = polytool.copy();
addTypeToNBT(toApply, upgrade);
if (!(instance.getSwordStr(toApply) > 0 && instance.getPickaxeStr(toApply) > 0 && instance.getStoneStr(toApply) > 0 && instance.getAxeStr(toApply) > 0 && instance.getShovelStr(toApply) > 0)) {
return false;
}
}
}
return true;
}
use of minechem.item.element.ElementItem in project Minechem by iopleke.
the class FluidChemicalDispenser method dispense.
@Override
public ItemStack dispense(IBlockSource blockSource, ItemStack itemStack) {
EnumFacing enumfacing = BlockDispenser.func_149937_b(blockSource.getBlockMetadata());
World world = blockSource.getWorld();
int x = blockSource.getXInt() + enumfacing.getFrontOffsetX();
int y = blockSource.getYInt() + enumfacing.getFrontOffsetY();
int z = blockSource.getZInt() + enumfacing.getFrontOffsetZ();
TileEntity inventoryTile = blockSource.getBlockTileEntity();
if (itemStack.getItem() instanceof ElementItem && itemStack.getItemDamage() != 0) {
Block frontBlock = world.getBlock(x, y, z);
MinechemChemicalType chemical = MinechemUtil.getChemical(frontBlock);
if (chemical != null && MinechemUtil.canDrain(world, frontBlock, x, y, z)) {
ItemStack stack = MinechemUtil.createItemStack(chemical, 8);
if (stack != null) {
if (itemStack.stackSize >= 8) {
itemStack.stackSize -= 8;
} else {
if (inventoryTile instanceof IInventory) {
int needs = 8 - itemStack.stackSize;
IInventory inventory = (IInventory) inventoryTile;
Set<ItemStack> otherTubes = MinechemUtil.findItemStacks(inventory, MinechemItemsRegistration.element, 0);
int free = 0;
otherTubes.remove(itemStack);
for (ItemStack emptyStack : otherTubes) {
free += emptyStack.stackSize;
}
if (free < needs) {
return itemStack;
}
itemStack.stackSize = 0;
for (ItemStack emptyStack : otherTubes) {
if (emptyStack.stackSize >= needs) {
emptyStack.stackSize -= needs;
needs = 0;
} else {
needs -= emptyStack.stackSize;
emptyStack.stackSize = 0;
}
if (emptyStack.stackSize <= 0) {
MinechemUtil.removeStackInInventory(inventory, emptyStack);
}
if (needs == 0) {
break;
}
}
}
}
TileEntity tile = world.getTileEntity(x, y, z);
if (tile instanceof RadiationFluidTileEntity && ((RadiationFluidTileEntity) tile).info != null) {
RadiationInfo.setRadiationInfo(((RadiationFluidTileEntity) tile).info, stack);
}
world.setBlockToAir(x, y, z);
if (inventoryTile instanceof IInventory) {
stack = MinechemUtil.addItemToInventory((IInventory) inventoryTile, stack);
}
MinechemUtil.throwItemStack(world, stack, x, y, z);
}
}
} else {
IInventory inventory;
Block block;
if (inventoryTile instanceof IInventory) {
inventory = (IInventory) inventoryTile;
} else {
return itemStack;
}
if (itemStack.getItem() instanceof ElementItem) {
ElementEnum element = ElementItem.getElement(itemStack);
block = FluidHelper.elementsBlocks.get(FluidHelper.elements.get(element));
} else if (itemStack.getItem() instanceof MoleculeItem) {
MoleculeEnum molecule = MoleculeEnum.getById(itemStack.getItemDamage());
block = FluidHelper.moleculeBlocks.get(FluidHelper.molecules.get(molecule));
} else {
return itemStack;
}
if (!world.isAirBlock(x, y, z) && !world.getBlock(x, y, z).getMaterial().isSolid()) {
world.func_147480_a(x, y, z, true);
world.setBlockToAir(x, y, z);
}
if (world.isAirBlock(x, y, z)) {
RadiationInfo radioactivity = ElementItem.getRadiationInfo(itemStack, world);
long worldtime = world.getTotalWorldTime();
long leftTime = radioactivity.radioactivity.getLife() - (worldtime - radioactivity.decayStarted);
if (itemStack.stackSize >= 8) {
itemStack.stackSize -= 8;
} else {
int needs = 8 - itemStack.stackSize;
itemStack.stackSize = 0;
Set<ItemStack> otherItemsStacks = MinechemUtil.findItemStacks(inventory, itemStack.getItem(), itemStack.getItemDamage());
otherItemsStacks.remove(itemStack);
int free = 0;
for (ItemStack stack : otherItemsStacks) {
free += stack.stackSize;
}
if (free < needs) {
return itemStack;
}
for (ItemStack stack : otherItemsStacks) {
RadiationInfo anotherRadiation = ElementItem.getRadiationInfo(stack, world);
long anotherLeft = anotherRadiation.radioactivity.getLife() - (worldtime - anotherRadiation.decayStarted);
if (anotherLeft < leftTime) {
radioactivity = anotherRadiation;
leftTime = anotherLeft;
}
if (stack.stackSize >= needs) {
stack.stackSize -= needs;
needs = 0;
} else {
needs -= stack.stackSize;
stack.stackSize = 0;
}
if (stack.stackSize <= 0) {
MinechemUtil.removeStackInInventory(inventory, stack);
}
if (needs == 0) {
break;
}
}
}
ItemStack empties = MinechemUtil.addItemToInventory(inventory, new ItemStack(MinechemItemsRegistration.element, 8, 0));
MinechemUtil.throwItemStack(world, empties, x, y, z);
world.setBlock(x, y, z, block, 0, 3);
TileEntity tile = world.getTileEntity(x, y, z);
if (radioactivity.isRadioactive() && tile instanceof RadiationFluidTileEntity) {
((RadiationFluidTileEntity) tile).info = radioactivity;
}
}
return itemStack;
// Block block = null;
// RadiationEnum radioactivity = null;
// if (itemStack.getItem() instanceof ElementItem)
// {
// ElementEnum element = ElementItem.getElement(itemStack);
// block = FluidHelper.elementsBlocks.get(FluidHelper.elements.get(element));
// radioactivity = element.radioactivity();
// } else if (itemStack.getItem() instanceof MoleculeItem)
// {
// MoleculeEnum molecule = MoleculeEnum.getById(itemStack.getItemDamage());
// block = FluidHelper.moleculeBlocks.get(FluidHelper.molecules.get(molecule));
// radioactivity = molecule.radioactivity();
// }
//
// if (!world.isAirBlock(x, y, z) && !world.getBlock(x, y, z).getMaterial().isSolid())
// {
// world.func_147480_a(x, y, z, true);
// world.setBlockToAir(x, y, z);
// }
//
// if (world.isAirBlock(x, y, z) && block != null)
// {
// world.setBlock(x, y, z, block, 0, 3);
// --itemStack.stackSize;
// TileEntity tile = world.getTileEntity(x, y, z);
// if (radioactivity != RadiationEnum.stable && tile instanceof RadiationFluidTileEntity)
// {
// ((RadiationFluidTileEntity) tile).info = ElementItem.getRadiationInfo(itemStack, world);
// }
// ItemStack elementStack = new ItemStack(MinechemItemsRegistration.element, 1, ElementEnum.heaviestMass);
// TileEntity inventoryTile = blockSource.getBlockTileEntity();
// if (inventoryTile instanceof IInventory)
// {
// elementStack = MinechemUtil.addItemToInventory((IInventory) inventoryTile, elementStack);
// }
// MinechemUtil.throwItemStack(world, elementStack, x, y, z);
// }
}
return itemStack;
}
use of minechem.item.element.ElementItem in project Minechem by iopleke.
the class PolytoolInventory method setInventorySlotContents.
@Override
public void setInventorySlotContents(int i, ItemStack itemstack) {
item = itemstack;
if (itemstack != null && itemstack.stackSize == 64 && (itemstack.getItem() instanceof ElementItem) && PolytoolHelper.getTypeFromElement(ElementItem.getElement(itemstack), 1) != null && PolytoolItem.validAlloyInfusion(player.getCurrentEquippedItem(), itemstack)) {
item = null;
PolytoolUpgradeType upgrade = PolytoolHelper.getTypeFromElement(ElementItem.getElement(itemstack), 1);
PolytoolItem.addTypeToNBT(player.inventory.getCurrentItem(), upgrade);
if (!player.worldObj.isRemote) {
PolytoolUpdateMessage message = new PolytoolUpdateMessage(upgrade);
MessageHandler.INSTANCE.sendTo(message, (EntityPlayerMP) player);
}
}
}
Aggregations