summaryrefslogtreecommitdiff
path: root/src/main/java/ihl/processing/metallurgy/ExtruderTileEntity.java
blob: a46ae62405fb55dca890e3d637fb7d7bbe777200 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package ihl.processing.metallurgy;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ic2.core.ContainerBase;
import ic2.core.block.invslot.InvSlot.Access;
import ihl.processing.chemistry.ApparatusProcessableInvSlot;
import ihl.recipes.UniversalRecipeInput;
import ihl.recipes.UniversalRecipeManager;
import ihl.recipes.UniversalRecipeOutput;
import ihl.utils.IHLUtils;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.IFluidHandler;

public class ExtruderTileEntity extends BasicElectricMotorTileEntity{

    public final ApparatusProcessableInvSlot input;
    public final ApparatusProcessableInvSlot input2;
	private int processTimer=0;
	private FluidTank fluidTank = new FluidTank(1000);
	protected static final UniversalRecipeManager recipeManager = new UniversalRecipeManager("extruder");

	public ExtruderTileEntity()
	{
		super();
		input = new ApparatusProcessableInvSlot(this, "input", 1, Access.IO, 1, 64);
		input2 = new ApparatusProcessableInvSlot(this, "input2", 2, Access.IO, 1, 64);
	}
	
	
	
	@Override
    public List<String> getNetworkedFields()
    {
		return super.getNetworkedFields();
    }
	

	@Override
	public String getInventoryName() {
		return "Extruder";
	}
	
	   @Override
	public void updateEntityServer()
	    {
	        super.updateEntityServer();
			ForgeDirection dir = ForgeDirection.getOrientation(getFacing());
			TileEntity te = worldObj.getTileEntity(xCoord+dir.offsetX,yCoord+dir.offsetY,zCoord+dir.offsetZ);
			if(checkCorrectAccembly() && this.fluidTank.getFluidAmount()>0 && this.processTimer++>20)
			{
				this.processTimer=0;
				((IFluidHandler)te).fill(ForgeDirection.getOrientation(getFacing()), this.fluidTank.drain(this.fluidTank.getCapacity(), true), true);
			}

	    }
	
	@Override
	public ItemStack getWrenchDrop(EntityPlayer player)
	{
		return IHLUtils.getThisModItemStack("extruder");
	}
	
	@Override
	@SideOnly(Side.CLIENT)
	public GuiScreen getGui(EntityPlayer player, boolean arg1) {
		return new ExtruderGui(new ExtruderContainer(player, this));
	}
	
	@Override
	public ContainerBase<?> getGuiContainer(EntityPlayer player) {
		return new ExtruderContainer(player, this);
	}
	
	@Override
	public void operate() 
	{
		UniversalRecipeInput ri = ExtruderTileEntity.recipeManager.getRecipeInput(getInput());
		this.fluidTank.fill(getOutput().getFluidOutputs().get(0), true);
		this.input.consume(ri.getItemInputs().get(0));
		this.input2.consume(ri.getItemInputs().get(1));
	}
	
    public UniversalRecipeOutput getOutput()
    {
    	return ExtruderTileEntity.recipeManager.getOutputFor(this.getInput());
    }
    
	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public List[] getInput()
	{
		return new List[]{null,Arrays.asList(new ItemStack[] {input.get(),input2.get()})};
	}
	
	@Override
	public boolean canOperate()
	{
		return this.fluidTank.getFluidAmount()<this.fluidTank.getCapacity() && this.getOutput()!=null && checkCorrectAccembly();
	}
	
	private boolean checkCorrectAccembly()
	{
		TileEntity te = worldObj.getTileEntity(xCoord+ForgeDirection.getOrientation(getFacing()).offsetX,yCoord+ForgeDirection.getOrientation(getFacing()).offsetY,zCoord+ForgeDirection.getOrientation(getFacing()).offsetZ);
		return te instanceof IFluidHandler && ((IFluidHandler)te).canFill(ForgeDirection.getOrientation(getFacing()), FluidRegistry.getFluid("molten.rubberwithsulfur"));
	}

	@Override
	public void onGuiClosed(EntityPlayer arg0) {}
		
	@Override
	   public void readFromNBT(NBTTagCompound nbttagcompound)
	    {
	        super.readFromNBT(nbttagcompound);
	        this.fluidTank.readFromNBT(nbttagcompound.getCompoundTag("fluidTank"));
	    }

	@Override
	    public void writeToNBT(NBTTagCompound nbttagcompound)
	    {
	        super.writeToNBT(nbttagcompound);
	        NBTTagCompound fluidTankTag = new NBTTagCompound();
	        this.fluidTank.writeToNBT(fluidTankTag);
	        nbttagcompound.setTag("fluidTank", fluidTankTag);
	    }

	public static void addRecipe(ItemStack input, ItemStack input2, FluidStack output) 
	{
		recipeManager.addRecipe(new UniversalRecipeInput(null, new ItemStack[] {input,input2}), new UniversalRecipeOutput(new FluidStack [] {output},null,20));
	}
	

	public static Map<UniversalRecipeInput, UniversalRecipeOutput> getRecipes() {
		return recipeManager.getRecipes();
	}
	
	@Override
    public boolean shouldRenderInPass(int pass)
    {
        return pass==0;
    }
	
}