Search in sources :

Example 1 with ElementItem

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);
}
Also used : ElementItem(minechem.item.element.ElementItem) ItemBlueprint(minechem.item.blueprint.ItemBlueprint) OpticalMicroscopeLens(minechem.item.OpticalMicroscopeLens) ItemAtomicManipulator(minechem.item.ItemAtomicManipulator) MoleculeItem(minechem.item.molecule.MoleculeItem) ChemistJournalItem(minechem.item.chemistjournal.ChemistJournalItem) PolytoolItem(minechem.item.polytool.PolytoolItem) ItemStack(net.minecraft.item.ItemStack)

Example 2 with ElementItem

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;
}
Also used : ElementItem(minechem.item.element.ElementItem) Slot(net.minecraft.inventory.Slot) ItemStack(net.minecraft.item.ItemStack)

Example 3 with ElementItem

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;
}
Also used : ElementItem(minechem.item.element.ElementItem) ItemStack(net.minecraft.item.ItemStack)

Example 4 with ElementItem

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;
}
Also used : ElementItem(minechem.item.element.ElementItem) IInventory(net.minecraft.inventory.IInventory) RadiationFluidTileEntity(minechem.radiation.RadiationFluidTileEntity) EnumFacing(net.minecraft.util.EnumFacing) MoleculeItem(minechem.item.molecule.MoleculeItem) World(net.minecraft.world.World) MinechemChemicalType(minechem.item.MinechemChemicalType) TileEntity(net.minecraft.tileentity.TileEntity) RadiationFluidTileEntity(minechem.radiation.RadiationFluidTileEntity) ElementEnum(minechem.item.element.ElementEnum) RadiationInfo(minechem.radiation.RadiationInfo) Block(net.minecraft.block.Block) MoleculeEnum(minechem.item.molecule.MoleculeEnum) ItemStack(net.minecraft.item.ItemStack)

Example 5 with ElementItem

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);
        }
    }
}
Also used : ElementItem(minechem.item.element.ElementItem) PolytoolUpdateMessage(minechem.network.message.PolytoolUpdateMessage)

Aggregations

ElementItem (minechem.item.element.ElementItem)6 ItemStack (net.minecraft.item.ItemStack)5 MoleculeItem (minechem.item.molecule.MoleculeItem)3 ItemAtomicManipulator (minechem.item.ItemAtomicManipulator)1 MinechemChemicalType (minechem.item.MinechemChemicalType)1 OpticalMicroscopeLens (minechem.item.OpticalMicroscopeLens)1 ItemBlueprint (minechem.item.blueprint.ItemBlueprint)1 MinechemBucketItem (minechem.item.bucket.MinechemBucketItem)1 ChemistJournalItem (minechem.item.chemistjournal.ChemistJournalItem)1 ElementEnum (minechem.item.element.ElementEnum)1 MoleculeEnum (minechem.item.molecule.MoleculeEnum)1 PolytoolItem (minechem.item.polytool.PolytoolItem)1 PolytoolUpdateMessage (minechem.network.message.PolytoolUpdateMessage)1 PotionChemical (minechem.potion.PotionChemical)1 RadiationFluidTileEntity (minechem.radiation.RadiationFluidTileEntity)1 RadiationInfo (minechem.radiation.RadiationInfo)1 Block (net.minecraft.block.Block)1 IInventory (net.minecraft.inventory.IInventory)1 Slot (net.minecraft.inventory.Slot)1 Item (net.minecraft.item.Item)1