From 0bbacd5f25b31ec4b56a39f984898b402115284d Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 17 May 2022 16:29:37 +0200 Subject: [PATCH] ported even more machines to the new fluid system, flare stack upgrades --- .../hbm/inventory/gui/GUIMachineGasFlare.java | 14 ++--- .../java/com/hbm/tileentity/TileMappings.java | 10 ++++ .../machine/TileEntityMachineCyclotron.java | 48 +++++++++++---- .../machine/TileEntityMachineMiningLaser.java | 13 +++- .../machine/TileEntitySolarBoiler.java | 25 ++++++-- .../machine/TileEntityStorageDrum.java | 11 +++- .../oil/TileEntityMachineFractionTower.java | 56 +++++++++++++++--- .../oil/TileEntityMachineLiquefactor.java | 43 +++++++++++--- .../oil/TileEntityMachineRefinery.java | 43 +++++++++++--- .../oil/TileEntityMachineSolidifier.java | 37 ++++++++---- .../gui/generators/gui_flare_stack.png | Bin 4187 -> 4398 bytes 11 files changed, 238 insertions(+), 62 deletions(-) diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java b/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java index e99ec94ec..cb4b41e86 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineGasFlare.java @@ -35,8 +35,8 @@ public class GUIMachineGasFlare extends GuiInfoContainer { public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 20, 35, 10, mouseX, mouseY, I18nUtil.resolveKeyArray("flare.valve")); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 54, 35, 14, mouseX, mouseY, I18nUtil.resolveKeyArray("flare.ignition")); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 16, 35, 10, mouseX, mouseY, I18nUtil.resolveKeyArray("flare.valve")); + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 79, guiTop + 50, 35, 14, mouseX, mouseY, I18nUtil.resolveKeyArray("flare.ignition")); flare.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 35, guiTop + 69 - 52, 16, 52); this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 143, guiTop + 69 - 52, 16, 52, flare.power, flare.maxPower); @@ -45,13 +45,13 @@ public class GUIMachineGasFlare extends GuiInfoContainer { protected void mouseClicked(int x, int y, int i) { super.mouseClicked(x, y, i); - if(guiLeft + 89 <= x && guiLeft + 89 + 16 > x && guiTop + 20 < y && guiTop + 20 + 10 >= y) { + if(guiLeft + 89 <= x && guiLeft + 89 + 16 > x && guiTop + 16 < y && guiTop + 16 + 10 >= y) { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); NBTTagCompound data = new NBTTagCompound(); data.setBoolean("valve", true); PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, flare.xCoord, flare.yCoord, flare.zCoord)); - } else if(guiLeft + 89 <= x && guiLeft + 89 + 16 > x && guiTop + 54 < y && guiTop + 54 + 14 >= y) { + } else if(guiLeft + 89 <= x && guiLeft + 89 + 16 > x && guiTop + 50 < y && guiTop + 50 + 14 >= y) { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); NBTTagCompound data = new NBTTagCompound(); data.setBoolean("dial", true); @@ -77,11 +77,11 @@ public class GUIMachineGasFlare extends GuiInfoContainer { int j = (int)flare.getPowerScaled(52); drawTexturedModalRect(guiLeft + 143, guiTop + 69 - j, 176, 94 - j, 16, j); - if(flare.isOn) drawTexturedModalRect(guiLeft + 79, guiTop + 20, 176, 0, 35, 10); - if(flare.doesBurn) drawTexturedModalRect(guiLeft + 79, guiTop + 54, 176, 10, 35, 14); + if(flare.isOn) drawTexturedModalRect(guiLeft + 79, guiTop + 16, 176, 0, 35, 10); + if(flare.doesBurn) drawTexturedModalRect(guiLeft + 79, guiTop + 50, 176, 10, 35, 14); if(flare.isOn && flare.doesBurn && flare.tank.getFill() > 0 && flare.tank.getTankType().traits.contains(FluidTrait.GASEOUS) && flare.tank.getTankType() instanceof FluidTypeFlammable) - drawTexturedModalRect(guiLeft + 88, guiTop + 34, 176, 24, 18, 18); + drawTexturedModalRect(guiLeft + 88, guiTop + 29, 176, 24, 18, 18); flare.tank.renderTank(guiLeft + 35, guiTop + 69, this.zLevel, 16, 52); } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index da4877661..91855540a 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -7,6 +7,10 @@ import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.network.CableDiode.TileEntityDiode; +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.interfaces.IFluidContainer; +import com.hbm.interfaces.IFluidSource; +import com.hbm.main.MainRegistry; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.conductor.*; import com.hbm.tileentity.deco.*; @@ -17,7 +21,9 @@ import com.hbm.tileentity.machine.rbmk.*; import com.hbm.tileentity.machine.storage.*; import com.hbm.tileentity.network.*; import com.hbm.tileentity.turret.*; +import com.hbm.util.LoggingUtil; +import api.hbm.fluid.IFluidConnector; import net.minecraft.tileentity.TileEntity; public class TileMappings { @@ -312,5 +318,9 @@ public class TileMappings { private static void put(Class clazz, String... names) { map.put(clazz, names); + + if((IFluidSource.class.isAssignableFrom(clazz) || IFluidAcceptor.class.isAssignableFrom(clazz)) && !IFluidConnector.class.isAssignableFrom(clazz)) { + LoggingUtil.errorWithHighlight(clazz.getCanonicalName() + " implements the old interfaces but not IFluidConnector!"); + } } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java index 5faccef34..c148caf89 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineCyclotron.java @@ -1,7 +1,6 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.hbm.config.BombConfig; @@ -22,8 +21,10 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -32,7 +33,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser { +public class TileEntityMachineCyclotron extends TileEntityMachineBase implements IFluidSource, IFluidAcceptor, IEnergyUser, IFluidStandardTransceiver { public long power; public static final long maxPower = 100000000; @@ -142,6 +143,7 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements progress = 0; } + this.sendFluid(); NBTTagCompound data = new NBTTagCompound(); data.setLong("power", power); @@ -156,15 +158,29 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements } private void updateConnections() { - - this.trySubscribe(worldObj, xCoord + 3, yCoord, zCoord + 1, Library.POS_X); - this.trySubscribe(worldObj, xCoord + 3, yCoord, zCoord - 1, Library.POS_X); - this.trySubscribe(worldObj, xCoord - 3, yCoord, zCoord + 1, Library.NEG_X); - this.trySubscribe(worldObj, xCoord - 3, yCoord, zCoord - 1, Library.NEG_X); - this.trySubscribe(worldObj, xCoord + 1, yCoord, zCoord + 3, Library.POS_Z); - this.trySubscribe(worldObj, xCoord - 1, yCoord, zCoord + 3, Library.POS_Z); - this.trySubscribe(worldObj, xCoord + 1, yCoord, zCoord - 3, Library.NEG_Z); - this.trySubscribe(worldObj, xCoord - 1, yCoord, zCoord - 3, Library.NEG_Z); + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(coolant.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + private void sendFluid() { + for(DirPos pos : getConPos()) { + this.sendFluid(amat.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + public DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 3, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord + 3, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord - 3, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 3, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord + 1, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord + 3, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 3, Library.NEG_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 3, Library.NEG_Z) + }; } public void networkUnpack(NBTTagCompound data) { @@ -510,4 +526,14 @@ public class TileEntityMachineCyclotron extends TileEntityMachineBase implements public long getMaxPower() { return this.maxPower; } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { amat }; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] { coolant }; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java index 5baf6292e..a11f0a5c4 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMiningLaser.java @@ -25,6 +25,7 @@ import com.hbm.util.InventoryUtil; import api.hbm.block.IDrillInteraction; import api.hbm.block.IMiningDrill; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; @@ -41,7 +42,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IMiningDrill { +public class TileEntityMachineMiningLaser extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IMiningDrill, IFluidStandardSender { public long power; public int age = 0; @@ -89,6 +90,11 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen if (age == 9 || age == 19) fillFluidInit(tank.getTankType()); + + this.sendFluid(tank.getTankType(), worldObj, xCoord + 2, yCoord, zCoord, Library.POS_X); + this.sendFluid(tank.getTankType(), worldObj, xCoord - 2, yCoord, zCoord, Library.NEG_X); + this.sendFluid(tank.getTankType(), worldObj, xCoord, yCoord + 2, zCoord, Library.POS_Z); + this.sendFluid(tank.getTankType(), worldObj, xCoord, yCoord - 2, zCoord, Library.NEG_Z); power = Library.chargeTEFromItems(slots, 0, power, maxPower); tank.updateTank(xCoord, yCoord, zCoord, this.worldObj.provider.dimensionId); @@ -680,4 +686,9 @@ public class TileEntityMachineMiningLaser extends TileEntityMachineBase implemen public int getDrillRating() { return 100; } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { tank }; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java index eeb4e81bd..2fa7e2248 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySolarBoiler.java @@ -1,7 +1,6 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -12,6 +11,7 @@ import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.lib.Library; +import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.nbt.NBTTagCompound; @@ -19,7 +19,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.ChunkCoordinates; -public class TileEntitySolarBoiler extends TileEntity implements IFluidAcceptor, IFluidSource { +public class TileEntitySolarBoiler extends TileEntity implements IFluidAcceptor, IFluidSource, IFluidStandardTransceiver { private FluidTank water; private FluidTank steam; @@ -40,8 +40,11 @@ public class TileEntitySolarBoiler extends TileEntity implements IFluidAcceptor, if(!worldObj.isRemote) { //if(worldObj.getTotalWorldTime() % 5 == 0) { - fillFluidInit(Fluids.STEAM); + fillFluidInit(Fluids.STEAM); //} + + this.trySubscribe(water.getTankType(), worldObj, xCoord, yCoord + 3, zCoord, Library.POS_Y); + this.trySubscribe(water.getTankType(), worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); int process = heat / 10; process = Math.min(process, water.getFill()); @@ -52,9 +55,9 @@ public class TileEntitySolarBoiler extends TileEntity implements IFluidAcceptor, water.setFill(water.getFill() - process); steam.setFill(steam.getFill() + process * 100); - - //if(steam.getFill() > steam.getMaxFill() * 0.9) - // System.out.println("*" + steam.getFill()); + + this.sendFluid(steam.getTankType(), worldObj, xCoord, yCoord + 3, zCoord, Library.POS_Y); + this.sendFluid(steam.getTankType(), worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); heat = 0; } else { @@ -176,4 +179,14 @@ public class TileEntitySolarBoiler extends TileEntity implements IFluidAcceptor, public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { steam }; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] { water }; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java index dba776359..126b9055f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStorageDrum.java @@ -20,6 +20,7 @@ import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; +import api.hbm.fluid.IFluidStandardSender; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -28,7 +29,7 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidSource { +public class TileEntityStorageDrum extends TileEntityMachineBase implements IFluidSource, IFluidStandardSender { public FluidTank[] tanks; private static final int[] slots_arr = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 }; @@ -139,6 +140,9 @@ public class TileEntityStorageDrum extends TileEntityMachineBase implements IFlu fillFluidInit(tanks[1].getTankType()); } + this.sendFluidToAll(tanks[0].getTankType(), this); + this.sendFluidToAll(tanks[1].getTankType(), this); + tanks[0].updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId); tanks[1].updateTank(xCoord, yCoord, zCoord, worldObj.provider.dimensionId); @@ -308,4 +312,9 @@ public class TileEntityStorageDrum extends TileEntityMachineBase implements IFlu this.tanks[0].writeToNBT(nbt, "liquid"); this.tanks[1].writeToNBT(nbt, "gas"); } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { tanks[0], tanks[1] }; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java index 2ea577f19..d25f42aef 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineFractionTower.java @@ -13,7 +13,9 @@ import com.hbm.inventory.recipes.RefineryRecipes; import com.hbm.lib.Library; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.util.Tuple.Pair; +import com.hbm.util.fauxpointtwelve.DirPos; +import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.nbt.NBTTagCompound; @@ -21,7 +23,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineFractionTower extends TileEntity implements IFluidSource, IFluidAcceptor, INBTPacketReceiver { +public class TileEntityMachineFractionTower extends TileEntity implements IFluidSource, IFluidAcceptor, INBTPacketReceiver, IFluidStandardTransceiver { public FluidTank[] tanks; public List list1 = new ArrayList(); @@ -41,7 +43,6 @@ public class TileEntityMachineFractionTower extends TileEntity implements IFluid TileEntity stack = worldObj.getTileEntity(xCoord, yCoord + 3, zCoord); - if(stack instanceof TileEntityMachineFractionTower) { TileEntityMachineFractionTower frac = (TileEntityMachineFractionTower) stack; @@ -65,6 +66,7 @@ public class TileEntityMachineFractionTower extends TileEntity implements IFluid } setupTanks(); + this.updateConnections(); if(worldObj.getTotalWorldTime() % 20 == 0) fractionate(); @@ -72,14 +74,16 @@ public class TileEntityMachineFractionTower extends TileEntity implements IFluid if(worldObj.getTotalWorldTime() % 10 == 0) { fillFluidInit(tanks[1].getTankType()); fillFluidInit(tanks[2].getTankType()); - - NBTTagCompound data = new NBTTagCompound(); - - for(int i = 0; i < 3; i++) - tanks[i].writeToNBT(data, "tank" + i); - - INBTPacketReceiver.networkPack(this, data, 50); } + + this.sendFluid(); + + NBTTagCompound data = new NBTTagCompound(); + + for(int i = 0; i < 3; i++) + tanks[i].writeToNBT(data, "tank" + i); + + INBTPacketReceiver.networkPack(this, data, 50); } } @@ -89,6 +93,30 @@ public class TileEntityMachineFractionTower extends TileEntity implements IFluid tanks[i].readFromNBT(nbt, "tank" + i); } + private void updateConnections() { + + for(DirPos pos : getConPos()) { + this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + private void sendFluid() { + + for(DirPos pos : getConPos()) { + this.sendFluid(tanks[1].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.sendFluid(tanks[2].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + private DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord, Library.NEG_X), + new DirPos(xCoord, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord, yCoord, zCoord - 2, Library.NEG_Z) + }; + } + private void setupTanks() { Pair quart = RefineryRecipes.getFractions(tanks[0].getTankType()); @@ -234,4 +262,14 @@ public class TileEntityMachineFractionTower extends TileEntity implements IFluid public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { tanks[1], tanks[2] }; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] { tanks[0] }; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java index 22e5815df..366052a75 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineLiquefactor.java @@ -14,15 +14,17 @@ import com.hbm.inventory.recipes.LiquefactionRecipes; import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardSender; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyUser, IFluidSource { +public class TileEntityMachineLiquefactor extends TileEntityMachineBase implements IEnergyUser, IFluidSource, IFluidStandardSender { public long power; public static final long maxPower = 100000; @@ -50,13 +52,8 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen if(!worldObj.isRemote) { this.power = Library.chargeTEFromItems(slots, 1, power, maxPower); tank.updateTank(this); - - this.trySubscribe(worldObj, xCoord, yCoord + 4, zCoord, Library.POS_Y); - this.trySubscribe(worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); - this.trySubscribe(worldObj, xCoord + 2, yCoord + 1, zCoord, Library.POS_X); - this.trySubscribe(worldObj, xCoord - 2, yCoord + 1, zCoord, Library.NEG_X); - this.trySubscribe(worldObj, xCoord, yCoord + 1, zCoord + 2, Library.POS_Z); - this.trySubscribe(worldObj, xCoord, yCoord + 1, zCoord - 2, Library.NEG_Z); + + this.updateConnections(); UpgradeManager.eval(slots, 2, 3); int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); @@ -74,6 +71,8 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen this.fillFluidInit(tank.getTankType()); } + this.sendFluid(); + NBTTagCompound data = new NBTTagCompound(); data.setLong("power", this.power); data.setInteger("progress", this.progress); @@ -82,6 +81,29 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen this.networkPack(data, 50); } } + + private void updateConnections() { + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + private void sendFluid() { + for(DirPos pos : getConPos()) { + this.sendFluid(tank.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + private DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord, yCoord + 4, zCoord, Library.POS_Y), + new DirPos(xCoord, yCoord - 1, zCoord, Library.NEG_Y), + new DirPos(xCoord + 2, yCoord + 1, zCoord, Library.POS_X), + new DirPos(xCoord - 2, yCoord + 1, zCoord, Library.NEG_X), + new DirPos(xCoord, yCoord + 1, zCoord + 2, Library.POS_Z), + new DirPos(xCoord, yCoord + 1, zCoord - 2, Library.NEG_Z) + }; + } @Override public boolean isItemValidForSlot(int i, ItemStack itemStack) { @@ -246,4 +268,9 @@ public class TileEntityMachineLiquefactor extends TileEntityMachineBase implemen public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { tank }; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java index 5ee6b9559..56c436a5d 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineRefinery.java @@ -15,8 +15,10 @@ import com.hbm.inventory.recipes.RefineryRecipes; import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Tuple.Quintet; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardTransceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; @@ -26,7 +28,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.Vec3; -public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyUser, IFluidContainer, IFluidAcceptor, IFluidSource, IControlReceiver { +public class TileEntityMachineRefinery extends TileEntityMachineBase implements IEnergyUser, IFluidContainer, IFluidAcceptor, IFluidSource, IControlReceiver, IFluidStandardTransceiver { public long power = 0; public int sulfur = 0; @@ -192,14 +194,23 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements } private void updateConnections() { - this.trySubscribe(worldObj, xCoord + 2, yCoord, zCoord + 1, Library.POS_X); - this.trySubscribe(worldObj, xCoord + 2, yCoord, zCoord - 1, Library.POS_X); - this.trySubscribe(worldObj, xCoord - 2, yCoord, zCoord + 1, Library.NEG_X); - this.trySubscribe(worldObj, xCoord - 2, yCoord, zCoord - 1, Library.NEG_X); - this.trySubscribe(worldObj, xCoord + 1, yCoord, zCoord + 2, Library.POS_Z); - this.trySubscribe(worldObj, xCoord - 1, yCoord, zCoord + 2, Library.POS_Z); - this.trySubscribe(worldObj, xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z); - this.trySubscribe(worldObj, xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z); + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + public DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord + 2, yCoord, zCoord + 1, Library.POS_X), + new DirPos(xCoord + 2, yCoord, zCoord - 1, Library.POS_X), + new DirPos(xCoord - 2, yCoord, zCoord + 1, Library.NEG_X), + new DirPos(xCoord - 2, yCoord, zCoord - 1, Library.NEG_X), + new DirPos(xCoord + 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord - 1, yCoord, zCoord + 2, Library.POS_Z), + new DirPos(xCoord + 1, yCoord, zCoord - 2, Library.NEG_Z), + new DirPos(xCoord - 1, yCoord, zCoord - 2, Library.NEG_Z) + }; } public long getPowerScaled(long i) { @@ -326,6 +337,10 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements if(data.hasKey("toggle")) { + for(DirPos pos : getConPos()) { + this.tryUnsubscribe(tanks[0].getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ()); + } + if(tanks[0].getTankType() == Fluids.HOTOIL) { tanks[0].setTankType(Fluids.HOTCRACKOIL); } else { @@ -333,4 +348,14 @@ public class TileEntityMachineRefinery extends TileEntityMachineBase implements } } } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] { tanks[1], tanks[2], tanks[3], tanks[4] }; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] { tanks[0] }; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java index c899366c7..36fda0b9a 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineSolidifier.java @@ -1,8 +1,5 @@ package com.hbm.tileentity.machine.oil; -import java.util.ArrayList; -import java.util.List; - import com.hbm.interfaces.IFluidAcceptor; import com.hbm.inventory.FluidTank; import com.hbm.inventory.UpgradeManager; @@ -13,15 +10,17 @@ import com.hbm.items.machine.ItemMachineUpgrade.UpgradeType; import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.Tuple.Pair; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energy.IEnergyUser; +import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; -public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyUser, IFluidAcceptor { +public class TileEntityMachineSolidifier extends TileEntityMachineBase implements IEnergyUser, IFluidAcceptor, IFluidStandardReceiver { public long power; public static final long maxPower = 100000; @@ -51,12 +50,7 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement tank.setType(4, slots); tank.updateTank(this); - this.trySubscribe(worldObj, xCoord, yCoord + 4, zCoord, Library.POS_Y); - this.trySubscribe(worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); - this.trySubscribe(worldObj, xCoord + 2, yCoord + 1, zCoord, Library.POS_X); - this.trySubscribe(worldObj, xCoord - 2, yCoord + 1, zCoord, Library.NEG_X); - this.trySubscribe(worldObj, xCoord, yCoord + 1, zCoord + 2, Library.POS_Z); - this.trySubscribe(worldObj, xCoord, yCoord + 1, zCoord - 2, Library.NEG_Z); + this.updateConnections(); UpgradeManager.eval(slots, 2, 3); int speed = Math.min(UpgradeManager.getLevel(UpgradeType.SPEED), 3); @@ -78,6 +72,24 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement this.networkPack(data, 50); } } + + private void updateConnections() { + for(DirPos pos : getConPos()) { + this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + this.trySubscribe(tank.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + private DirPos[] getConPos() { + return new DirPos[] { + new DirPos(xCoord, yCoord + 4, zCoord, Library.POS_Y), + new DirPos(xCoord, yCoord - 1, zCoord, Library.NEG_Y), + new DirPos(xCoord + 2, yCoord + 1, zCoord, Library.POS_X), + new DirPos(xCoord - 2, yCoord + 1, zCoord, Library.NEG_X), + new DirPos(xCoord, yCoord + 1, zCoord + 2, Library.POS_Z), + new DirPos(xCoord, yCoord + 1, zCoord - 2, Library.NEG_Z) + }; + } @Override public boolean canExtractItem(int slot, ItemStack stack, int side) { @@ -230,4 +242,9 @@ public class TileEntityMachineSolidifier extends TileEntityMachineBase implement public double getMaxRenderDistanceSquared() { return 65536.0D; } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] { tank }; + } } diff --git a/src/main/resources/assets/hbm/textures/gui/generators/gui_flare_stack.png b/src/main/resources/assets/hbm/textures/gui/generators/gui_flare_stack.png index 3656afe84a479131a294b9180dae43d1056097b7..69e2c398b048bd466e77f1f67a8dd9885fa377ac 100644 GIT binary patch literal 4398 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 V+WZzWcK;RtsEg(o$_?D&{|?2FuSEa=