From 01aad6bc5649e17d7cc9b75f05b78b4195151b0c Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 5 Nov 2022 12:08:15 +0100 Subject: [PATCH] augh --- .../TileEntityMachineLargeTurbine.java | 8 +- .../machine/TileEntitySteamEngine.java | 142 +++++++++++++++++- .../hbm/textures/gui/weapon/n2schematic.png | Bin 13675 -> 0 bytes 3 files changed, 145 insertions(+), 5 deletions(-) delete mode 100644 src/main/resources/assets/hbm/textures/gui/weapon/n2schematic.png diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index 6e27ca1bf..51694e40f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -78,10 +78,10 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme double eff = trait.getEfficiency(CoolingType.TURBINE); //100% efficiency if(eff > 0) { tanks[1].setTankType(trait.coolsTo); - int inputOps = tanks[0].getFill() / trait.amountReq; - int outputOps = (tanks[1].getMaxFill() - tanks[1].getFill()) / trait.amountProduced; - int cap = 6_000 / trait.amountReq; - int ops = Math.min(inputOps, Math.min(outputOps, cap)); + int inputOps = (int) Math.floor(tanks[0].getFill() / trait.amountReq); //amount of cycles possible with the entire input buffer + int outputOps = (tanks[1].getMaxFill() - tanks[1].getFill()) / trait.amountProduced; //amount of cycles possible with the output buffer's remaining space + int cap = (int) Math.ceil(tanks[0].getFill() / trait.amountReq / 5F); //amount of cycles by the "at least 20%" rule + int ops = Math.min(inputOps, Math.min(outputOps, cap)); //defacto amount of cycles tanks[0].setFill(tanks[0].getFill() - ops * trait.amountReq); tanks[1].setFill(tanks[1].getFill() + ops * trait.amountProduced); this.power += (ops * trait.heatEnergy * eff); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java index b6c0eb08b..8abc5c03d 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySteamEngine.java @@ -1,7 +1,147 @@ package com.hbm.tileentity.machine; +import java.util.ArrayList; +import java.util.List; + +import com.hbm.interfaces.IFluidAcceptor; +import com.hbm.interfaces.IFluidSource; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityLoadedBase; -public class TileEntitySteamEngine extends TileEntityLoadedBase { +import api.hbm.energy.IEnergyGenerator; +import api.hbm.fluid.IFluidStandardTransceiver; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; +public class TileEntitySteamEngine extends TileEntityLoadedBase implements IFluidAcceptor, IFluidSource, IEnergyGenerator, IFluidStandardTransceiver { + + public long power; + public static final long maxPower = 1_000_000L; + + public float rotor; + public float lastRotor; + public List list2 = new ArrayList(); + public FluidTank[] tanks; + + public TileEntitySteamEngine() { + + tanks = new FluidTank[2]; + tanks[0] = new FluidTank(Fluids.STEAM, 8_000, 0); + tanks[1] = new FluidTank(Fluids.SPENTSTEAM, 80, 1); + } + + @Override + public void fillFluidInit(FluidType type) { + + } + + @Override + public void fillFluid(int x, int y, int z, boolean newTact, FluidType type) { + Library.transmitFluid(x, y, z, newTact, this, worldObj, type); + } + + @Override + public boolean getTact() { + return worldObj.getTotalWorldTime() % 2 == 0; + } + + @Override + public void setFluidFill(int i, FluidType type) { + if(type == tanks[0].getTankType()) + tanks[0].setFill(i); + else if(type == tanks[1].getTankType()) + tanks[1].setFill(i); + } + + @Override + public int getFluidFill(FluidType type) { + if(type == tanks[0].getTankType()) + return tanks[0].getFill(); + else if(type == tanks[1].getTankType()) + return tanks[1].getFill(); + + return 0; + } + + @Override + public int getMaxFluidFill(FluidType type) { + if(type == tanks[0].getTankType()) + return tanks[0].getMaxFill(); + + return 0; + } + + @Override + public void setFillForSync(int fill, int index) { + if(index < 2 && tanks[index] != null) + tanks[index].setFill(fill); + } + + @Override + public void setTypeForSync(FluidType type, int index) { + if(index < 2 && tanks[index] != null) + tanks[index].setTankType(type); + } + + @Override + public List getFluidList(FluidType type) { + return list2; + } + + @Override + public void clearFluidList(FluidType type) { + list2.clear(); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return TileEntity.INFINITE_EXTENT_AABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public boolean canConnect(ForgeDirection dir) { + return dir != ForgeDirection.UP && dir != ForgeDirection.DOWN && dir != ForgeDirection.UNKNOWN; + } + + @Override + public long getPower() { + return power; + } + + @Override + public long getMaxPower() { + return maxPower; + } + + @Override + public void setPower(long power) { + this.power = power; + } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[] {tanks[1]}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[] {tanks[0]}; + } + + @Override + public FluidTank[] getAllTanks() { + return tanks; + } } diff --git a/src/main/resources/assets/hbm/textures/gui/weapon/n2schematic.png b/src/main/resources/assets/hbm/textures/gui/weapon/n2schematic.png deleted file mode 100644 index 1e50ed8cdbe10795b70966b06919e3cdf5256ebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13675 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%0A~aOZ}Tefax~kbZ1vYu9&7&hT9e!@XX`)n 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 c