From 05c78126859231a68e199dc34613689bd0978e2f Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Mon, 11 Apr 2016 19:44:54 +0300 Subject: Initial commit --- .../VacuumInductionMeltingFurnaceTileEntity.java | 260 +++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 ihl/processing/metallurgy/VacuumInductionMeltingFurnaceTileEntity.java (limited to 'ihl/processing/metallurgy/VacuumInductionMeltingFurnaceTileEntity.java') diff --git a/ihl/processing/metallurgy/VacuumInductionMeltingFurnaceTileEntity.java b/ihl/processing/metallurgy/VacuumInductionMeltingFurnaceTileEntity.java new file mode 100644 index 0000000..3fc85a8 --- /dev/null +++ b/ihl/processing/metallurgy/VacuumInductionMeltingFurnaceTileEntity.java @@ -0,0 +1,260 @@ +package ihl.processing.metallurgy; + +import java.util.Arrays; +import java.util.Map; + +import ic2.api.network.INetworkClientTileEntityEventListener; +import ic2.core.ContainerBase; +import ihl.IHLMod; +import ihl.processing.chemistry.GaedesMercuryRotaryPumpTileEntity; +import ihl.recipes.UniversalRecipeInput; +import ihl.recipes.UniversalRecipeManager; +import ihl.recipes.UniversalRecipeOutput; +import ihl.tunneling_shield.IMultiBlock; +import ihl.tunneling_shield.MultiBlockSpacerBlock; +import ihl.utils.IHLFluidTank; +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.FluidStack; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class VacuumInductionMeltingFurnaceTileEntity extends MachineBaseTileEntity implements INetworkClientTileEntityEventListener, IMultiBlock{ + + protected static UniversalRecipeManager recipeManager = new UniversalRecipeManager("vacuuminductionmeltingfurnace"); + public final IHLFluidTank fluidTank = new IHLFluidTank(864); + public boolean vacuumPumpConnected=false; + private GaedesMercuryRotaryPumpTileEntity lastGMRP; + private int minX,minY,minZ,maxX,maxY,maxZ; + + public VacuumInductionMeltingFurnaceTileEntity() + { + super(1); + } + + @Override + public void setFacing(short facing1) + { + short facing2 = (short) Math.max(facing1, 2); + super.setFacing(facing2); + switch(facing2) + { + case 0: + setupMultiblockStructure(-1,-2,0); + break; + case 1: + setupMultiblockStructure(-1,0,0); + break; + case 2: + setupMultiblockStructure(-1,0,-2); + break; + case 3: + setupMultiblockStructure(-1,0,0); + break; + case 4: + setupMultiblockStructure(-2,0,-1); + break; + case 5: + setupMultiblockStructure(0,0,-1); + break; + } + } + + @Override + public String getStartSoundFile() { + return null; + } + + @Override + public String getLoopSoundFile() { + return null; + } + + @Override + public String getStopSoundFile() { + return null; + } + + @Override + public String getInventoryName() { + return "VacuumInductionMeltingFurnace"; + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen getGui(EntityPlayer player, boolean arg1) { + return new VacuumInductionMeltingFurnaceGui(new VacuumInductionMeltingFurnaceContainer(player, this)); + } + + @Override + public ContainerBase getGuiContainer(EntityPlayer player) { + return new VacuumInductionMeltingFurnaceContainer(player, this); + } + + @Override + public void operate() + { + ItemStack content = this.input.get(); + if(content!=null) + { + UniversalRecipeOutput routput = recipeManager.getOutputFor(null, Arrays.asList(new ItemStack [] {content}),false, false); + if(routput!=null && !routput.getFluidOutputs().isEmpty()) + { + FluidStack fluidStack = routput.getFluidOutputs().get(0).copy(); + fluidStack.amount *= content.stackSize; + this.input.clear(); + this.fluidTank.fill(fluidStack, true); + useVacuumPump(); + } + } + } + + @Override + public boolean canOperate() + { + return checkSpecialConditionVacuumPump() && getOutput()!=null; + } + + private void useVacuumPump() + { + if(lastGMRP!=null && !lastGMRP.isInvalid() && lastGMRP.ready) + { + lastGMRP.ready=false; + } + } + + private boolean checkSpecialConditionVacuumPump() + { + if(lastGMRP!=null && !lastGMRP.isInvalid() && lastGMRP.ready) + { + this.vacuumPumpConnected=true; + return true; + } + int[] xz = new int [] {0,1,1,0,-1,-1,0}; + for(int i0=-1;i0<=0;i0++) + { + for(int i=0;i getRecipes() { + return recipeManager.getRecipes(); + } + + @Override + public UniversalRecipeOutput getOutput() + { + return VacuumInductionMeltingFurnaceTileEntity.recipeManager.getOutputFor(this.getInput(), false, false); + } + + @Override + public void onNetworkEvent(EntityPlayer player, int event) + { + switch(event) + { + case 0: + TileEntity te = worldObj.getTileEntity(xCoord, yCoord, zCoord); + if(te instanceof InjectionMoldTileEntity) + { + InjectionMoldTileEntity im = (InjectionMoldTileEntity)te; + im.fill(ForgeDirection.UP, this.fluidTank.drain(this.fluidTank.getCapacity(), true), true); + } + break; + } + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) + { + super.readFromNBT(nbttagcompound); + try + { + this.energy = nbttagcompound.getDouble("energy"); + } + catch (Exception var3)//This was blindlessly copied from IC2 source a lot of time ago. And this is not necessary here. And still... + { + this.energy = nbttagcompound.getInteger("energy"); + + if (this.maxStorage > Integer.MAX_VALUE) + { + this.energy *= 10.0D; + } + } + this.fluidTank.readFromNBT(nbttagcompound.getCompoundTag("fluidTank")); + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) + { + super.writeToNBT(nbttagcompound); + nbttagcompound.setDouble("energy", this.energy); + NBTTagCompound fluidTankTag = new NBTTagCompound(); + this.fluidTank.writeToNBT(fluidTankTag); + nbttagcompound.setTag("fluidTank", fluidTankTag); + } + + private void setupMultiblockStructure(int x0,int y0,int z0) + { + minX=xCoord+x0; + maxX=xCoord+x0+3; + minY=yCoord+y0; + maxY=yCoord+y0+3; + minZ=zCoord+z0; + maxZ=zCoord+z0+3; + for(int ix=xCoord+x0;ix=minX && x<=maxX && y>=minY && y<=maxY && z>=minZ && z<=maxZ; + } + + @Override + public boolean getIsInvalid() + { + return this.isInvalid(); + } + +} -- cgit v1.2.3