diff --git a/src/main/java/mekanism/common/MekanismItems.java b/src/main/java/mekanism/common/MekanismItems.java index 53c606c87..a9af79f56 100644 --- a/src/main/java/mekanism/common/MekanismItems.java +++ b/src/main/java/mekanism/common/MekanismItems.java @@ -11,6 +11,7 @@ import mekanism.common.item.ItemDirtyDust; import mekanism.common.item.ItemDust; import mekanism.common.item.ItemElectricBow; import mekanism.common.item.ItemEnergized; +import mekanism.common.item.ItemFactoryInstaller; import mekanism.common.item.ItemFilterCard; import mekanism.common.item.ItemFlamethrower; import mekanism.common.item.ItemFreeRunners; @@ -62,6 +63,7 @@ public class MekanismItems public static final Item SpeedUpgrade = new ItemUpgrade(Upgrade.SPEED).setUnlocalizedName("SpeedUpgrade"); public static final Item EnergyUpgrade = new ItemUpgrade(Upgrade.ENERGY).setUnlocalizedName("EnergyUpgrade"); public static final Item FilterUpgrade = new ItemUpgrade(Upgrade.FILTER).setUnlocalizedName("FilterUpgrade"); + public static final Item FactoryInstaller = new ItemFactoryInstaller().setUnlocalizedName("FactoryInstaller"); public static final ItemEnergized EnergyTablet = (ItemEnergized)new ItemEnergized(1000000).setUnlocalizedName("EnergyTablet"); public static final ItemRobit Robit = (ItemRobit)new ItemRobit().setUnlocalizedName("Robit"); public static final ItemAtomicDisassembler AtomicDisassembler = (ItemAtomicDisassembler)new ItemAtomicDisassembler().setUnlocalizedName("AtomicDisassembler"); @@ -149,6 +151,7 @@ public class MekanismItems GameRegistry.registerItem(GlowPanel, "GlowPanel"); GameRegistry.registerItem(Flamethrower, "Flamethrower"); GameRegistry.registerItem(GaugeDropper, "GaugeDropper"); + GameRegistry.registerItem(FactoryInstaller, "FactoryInstaller"); FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluid("brine"), new ItemStack(BrineBucket), FluidContainerRegistry.EMPTY_BUCKET); FluidContainerRegistry.registerFluidContainer(FluidRegistry.getFluid("lithium"), new ItemStack(LithiumBucket), FluidContainerRegistry.EMPTY_BUCKET); diff --git a/src/main/java/mekanism/common/item/ItemClump.java b/src/main/java/mekanism/common/item/ItemClump.java index 3dd70440e..5aa894aec 100644 --- a/src/main/java/mekanism/common/item/ItemClump.java +++ b/src/main/java/mekanism/common/item/ItemClump.java @@ -2,9 +2,7 @@ package mekanism.common.item; import java.util.List; -import mekanism.common.Mekanism; import mekanism.common.Resource; - import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -19,7 +17,6 @@ public class ItemClump extends ItemMekanism { super(); setHasSubtypes(true); - setCreativeTab(Mekanism.tabMekanism); } @Override diff --git a/src/main/java/mekanism/common/item/ItemCrystal.java b/src/main/java/mekanism/common/item/ItemCrystal.java index a3ae6e58a..b16066a51 100644 --- a/src/main/java/mekanism/common/item/ItemCrystal.java +++ b/src/main/java/mekanism/common/item/ItemCrystal.java @@ -2,9 +2,7 @@ package mekanism.common.item; import java.util.List; -import mekanism.common.Mekanism; import mekanism.common.Resource; - import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -19,7 +17,6 @@ public class ItemCrystal extends ItemMekanism { super(); setHasSubtypes(true); - setCreativeTab(Mekanism.tabMekanism); } @Override diff --git a/src/main/java/mekanism/common/item/ItemDust.java b/src/main/java/mekanism/common/item/ItemDust.java index d919319c6..5cf27e38e 100644 --- a/src/main/java/mekanism/common/item/ItemDust.java +++ b/src/main/java/mekanism/common/item/ItemDust.java @@ -2,8 +2,6 @@ package mekanism.common.item; import java.util.List; -import mekanism.common.Mekanism; - import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -23,7 +21,6 @@ public class ItemDust extends ItemMekanism { super(); setHasSubtypes(true); - setCreativeTab(Mekanism.tabMekanism); } @Override @@ -44,7 +41,7 @@ public class ItemDust extends ItemMekanism @Override public void getSubItems(Item item, CreativeTabs tabs, List itemList) { - for(int counter = 0; counter <= 11; ++counter) + for(int counter = 0; counter <= 11; counter++) { itemList.add(new ItemStack(item, 1, counter)); } diff --git a/src/main/java/mekanism/common/item/ItemFactoryInstaller.java b/src/main/java/mekanism/common/item/ItemFactoryInstaller.java new file mode 100644 index 000000000..a64083a2a --- /dev/null +++ b/src/main/java/mekanism/common/item/ItemFactoryInstaller.java @@ -0,0 +1,124 @@ +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.TileEntityBasicBlock; +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) + { + + } + } + + 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"; + } +} diff --git a/src/main/java/mekanism/common/item/ItemIngot.java b/src/main/java/mekanism/common/item/ItemIngot.java index 1323dda65..d0af42e02 100644 --- a/src/main/java/mekanism/common/item/ItemIngot.java +++ b/src/main/java/mekanism/common/item/ItemIngot.java @@ -2,8 +2,6 @@ package mekanism.common.item; import java.util.List; -import mekanism.common.Mekanism; - import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -20,7 +18,6 @@ public class ItemIngot extends ItemMekanism { super(); setHasSubtypes(true); - setCreativeTab(Mekanism.tabMekanism); } @Override @@ -41,7 +38,7 @@ public class ItemIngot extends ItemMekanism @Override public void getSubItems(Item item, CreativeTabs tabs, List itemList) { - for(int counter = 0; counter <= 6; ++counter) + for(int counter = 0; counter <= 6; counter++) { itemList.add(new ItemStack(item, 1, counter)); } diff --git a/src/main/java/mekanism/common/item/ItemShard.java b/src/main/java/mekanism/common/item/ItemShard.java index 9b1624552..575f86e52 100644 --- a/src/main/java/mekanism/common/item/ItemShard.java +++ b/src/main/java/mekanism/common/item/ItemShard.java @@ -2,9 +2,7 @@ package mekanism.common.item; import java.util.List; -import mekanism.common.Mekanism; import mekanism.common.Resource; - import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -19,7 +17,6 @@ public class ItemShard extends ItemMekanism { super(); setHasSubtypes(true); - setCreativeTab(Mekanism.tabMekanism); } @Override diff --git a/src/main/java/mekanism/common/tile/TileEntityFactory.java b/src/main/java/mekanism/common/tile/TileEntityFactory.java index 0fc2b26ca..eba254958 100644 --- a/src/main/java/mekanism/common/tile/TileEntityFactory.java +++ b/src/main/java/mekanism/common/tile/TileEntityFactory.java @@ -1,5 +1,7 @@ package mekanism.common.tile; +import io.netty.buffer.ByteBuf; + import java.util.ArrayList; import java.util.List; @@ -19,6 +21,7 @@ import mekanism.api.util.StackUtils; import mekanism.client.sound.IResettableSound; import mekanism.client.sound.TileSound; import mekanism.common.Mekanism; +import mekanism.common.MekanismBlocks; import mekanism.common.MekanismItems; import mekanism.common.SideData; import mekanism.common.Tier.FactoryTier; @@ -44,7 +47,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.common.Optional.Interface; import cpw.mods.fml.common.Optional.Method; -import io.netty.buffer.ByteBuf; import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; @@ -104,6 +106,8 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I public GasTank gasTank; public boolean sorting; + + public boolean upgraded; public IResettableSound[] sounds = new IResettableSound[RecipeType.values().length]; @@ -138,6 +142,79 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I gasTank = new GasTank(TileEntityAdvancedElectricMachine.MAX_GAS*tier.processes); } + + public void upgrade() + { + worldObj.setBlockToAir(xCoord, yCoord, zCoord); + worldObj.setBlock(xCoord, yCoord, zCoord, MekanismBlocks.MachineBlock, 5+tier.ordinal()+1, 3); + + TileEntityFactory factory = (TileEntityFactory)worldObj.getTileEntity(xCoord, yCoord, zCoord); + + //Basic + factory.facing = facing; + factory.clientFacing = clientFacing; + factory.ticker = ticker; + factory.redstone = redstone; + factory.redstoneLastTick = redstoneLastTick; + factory.doAutoSync = doAutoSync; + factory.components = components; + + //Electric + factory.electricityStored = electricityStored; + factory.ic2Registered = ic2Registered; + + //Noisy + factory.soundURL = soundURL; + factory.sound = sound; + + //Factory + factory.sideConfig = sideConfig; + + for(int i = 0; i < tier.processes; i++) + { + factory.progress[i] = progress[i]; + } + + factory.recipeTicks = recipeTicks; + factory.clientActive = clientActive; + factory.isActive = isActive; + factory.updateDelay = updateDelay; + factory.recipeType = recipeType; + factory.prevEnergy = prevEnergy; + factory.gasTank.setGas(gasTank.getGas()); + factory.sorting = sorting; + factory.sounds = sounds; + factory.controlType = controlType; + factory.upgradeComponent = upgradeComponent; + factory.ejectorComponent = ejectorComponent; + + for(int i = 0; i < tier.processes+5; i++) + { + factory.inventory[i] = inventory[i]; + } + + for(int i = 0; i < tier.processes; i++) + { + int output = getOutputSlot(i); + + if(inventory[output] != null) + { + int newOutput = 5+factory.tier.processes+i; + + factory.inventory[newOutput] = inventory[output]; + } + } + + for(Upgrade upgrade : upgradeComponent.getSupportedTypes()) + { + factory.recalculateUpgradables(upgrade); + } + + factory.upgraded = true; + + markDirty(); + Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(factory), factory.getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(factory))); + } @Override public void onUpdate() @@ -588,6 +665,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I recipeTicks = dataStream.readInt(); controlType = RedstoneControl.values()[dataStream.readInt()]; sorting = dataStream.readBoolean(); + upgraded = dataStream.readBoolean(); for(int i = 0; i < tier.processes; i++) { @@ -613,6 +691,13 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I isActive = clientActive; MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); } + + if(upgraded) + { + markDirty(); + MekanismUtils.updateBlock(worldObj, xCoord, yCoord, zCoord); + upgraded = false; + } } @Override @@ -685,6 +770,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I data.add(recipeTicks); data.add(controlType.ordinal()); data.add(sorting); + data.add(upgraded); data.add(progress); data.add(sideConfig); @@ -697,18 +783,20 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I else { data.add(false); } + + upgraded = false; return data; } public int getInputSlot(int operation) { - return operation+5; + return 5+operation; } public int getOutputSlot(int operation) { - return tier.processes+5+operation; + return 5+tier.processes+operation; } @Override diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index 7341650e5..6e539b232 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -181,6 +181,11 @@ tile.EnergyCube.Elite.name=Elite Energy Cube tile.EnergyCube.Ultimate.name=Ultimate Energy Cube tile.EnergyCube.Creative.name=Creative Energy Cube +//Factory Installers +item.basicFactoryInstaller.name=Basic Factory Installer +item.advancedFactoryInstaller.name=Advanced Factory Installer +item.eliteFactoryInstaller.name=Elite Factory Installer + //Dust item.ironDust.name=Iron Dust item.goldDust.name=Gold Dust diff --git a/src/main/resources/assets/mekanism/textures/items/AdvancedFactoryInstaller.png b/src/main/resources/assets/mekanism/textures/items/AdvancedFactoryInstaller.png new file mode 100644 index 000000000..27a40e995 Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/items/AdvancedFactoryInstaller.png differ diff --git a/src/main/resources/assets/mekanism/textures/items/BasicFactoryInstaller.png b/src/main/resources/assets/mekanism/textures/items/BasicFactoryInstaller.png new file mode 100644 index 000000000..66954141a Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/items/BasicFactoryInstaller.png differ diff --git a/src/main/resources/assets/mekanism/textures/items/EliteFactoryInstaller.png b/src/main/resources/assets/mekanism/textures/items/EliteFactoryInstaller.png new file mode 100644 index 000000000..0ba1b50ad Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/items/EliteFactoryInstaller.png differ