Initial work complete for factory installers! Still need to add recipes and algorithm to transform generic machines into basic factories

This commit is contained in:
Aidan C. Brady 2015-03-05 01:11:51 -05:00
parent 6889bba52d
commit 274930fd8a
12 changed files with 225 additions and 20 deletions

View file

@ -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);

View file

@ -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

View file

@ -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

View file

@ -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));
}

View file

@ -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";
}
}

View file

@ -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));
}

View file

@ -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

View file

@ -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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB