aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkekzdealer <kekzdealer@gmail.com>2020-06-11 18:09:33 +0200
committerkekzdealer <kekzdealer@gmail.com>2020-06-11 18:09:33 +0200
commit0868ea42998ae6f8902b23f52110bcbc6f4bc3d5 (patch)
treebb7d3da935d3c43807afb350ce53018d42223ef1 /src
parent754090072e622b48f7d8d7a2c8c83c6c6de55b5a (diff)
downloadGT5-Unofficial-0868ea42998ae6f8902b23f52110bcbc6f4bc3d5.tar.gz
GT5-Unofficial-0868ea42998ae6f8902b23f52110bcbc6f4bc3d5.tar.bz2
GT5-Unofficial-0868ea42998ae6f8902b23f52110bcbc6f4bc3d5.zip
New multi hatch code cleanup; Added auto-output handler; Removed object exposing method from MultiFluidHandler
Diffstat (limited to 'src')
-rw-r--r--src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java82
-rw-r--r--src/main/java/common/tileentities/TE_TFFTMultiHatch.java21
-rw-r--r--src/main/java/kekztech/MultiFluidHandler.java5
3 files changed, 71 insertions, 37 deletions
diff --git a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java
index 529a948dbe..f34905ba14 100644
--- a/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java
+++ b/src/main/java/common/tileentities/GTMTE_TFFTMultiHatch.java
@@ -11,8 +11,10 @@ import kekztech.MultiFluidHandler;
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 net.minecraftforge.fluids.IFluidHandler;
import java.util.HashMap;
@@ -116,32 +118,72 @@ public class GTMTE_TFFTMultiHatch extends GT_MetaTileEntity_Hatch {
}
public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPreTick(aBaseMetaTileEntity, aTick);
if (aBaseMetaTileEntity.isServerSide() && mfh != null) {
- // Handle emptying containers
- final FluidStack fluidFromCell = GT_Utility.getFluidForFilledItem(super.mInventory[super.getInputSlot()], true);
- // Check if fluid is not null, could be inserted, and if there is space for the empty container
- if (fluidFromCell != null && mfh.couldPush(fluidFromCell)
- && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), GT_Utility.getContainerItem(super.mInventory[super.getInputSlot()], true), 1)) {
- // Consume one filled container if it was emptied successfully
- if(mfh.pushFluid(fluidFromCell, true) == fluidFromCell.amount) {
- aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1);
- }
+ emptyContainers(aBaseMetaTileEntity);
+ fillContainers(aBaseMetaTileEntity);
+ if(outputting && (aTick % 20 == 0)) {
+ doAutoOutputPerSecond(aBaseMetaTileEntity);
}
- // Handle filling containers. This will use the selected T.F.F.T fluid
- final ItemStack cellFromFluid = GT_Utility.fillFluidContainer(
- mfh.getFluid(mfh.getSelectedFluid()), super.mInventory[super.getInputSlot()], false, true);
- // Check if cell is not null and if there is space for the filled container
- if (cellFromFluid != null && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), cellFromFluid, 1)) {
- // Convert back to FluidStack to learn the container capacity...
- final FluidStack fluidCapacityStack = GT_Utility.getFluidForFilledItem(cellFromFluid, true);
- // Consume one empty container if it was filled successfully
- if(mfh.pullFluid(fluidCapacityStack, true) == fluidCapacityStack.amount) {
- aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1);
- }
+ }
+ }
+
+ /**
+ * Empty containers (cells, buckets, etc) from the GUI into the T.F.F.T
+ * @param aBaseMetaTileEntity
+ * this MetaTileEntity
+ */
+ private void emptyContainers(IGregTechTileEntity aBaseMetaTileEntity) {
+ final FluidStack fluidFromCell = GT_Utility.getFluidForFilledItem(super.mInventory[super.getInputSlot()], true);
+ // Check if fluid is not null, could be inserted, and if there is space for the empty container
+ if (fluidFromCell != null && mfh.couldPush(fluidFromCell)
+ && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), GT_Utility.getContainerItem(super.mInventory[super.getInputSlot()], true), 1)) {
+ // Consume one filled container if it was emptied successfully
+ if(mfh.pushFluid(fluidFromCell, true) == fluidFromCell.amount) {
+ aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1);
+ }
+ }
+ }
+
+ /**
+ * Fill containers (cells, buckets, etc) in the GUI. The fluid used to fill containers will be the one that is
+ * selected through an Integrated Circuit in the T.F.F.T's controller GUI.
+ * @param aBaseMetaTileEntity
+ * this MetaTileEntity
+ */
+ private void fillContainers(IGregTechTileEntity aBaseMetaTileEntity) {
+ final ItemStack cellFromFluid = GT_Utility.fillFluidContainer(
+ mfh.getFluid(mfh.getSelectedFluid()), super.mInventory[super.getInputSlot()], false, true);
+ // Check if cell is not null and if there is space for the filled container
+ if (cellFromFluid != null && aBaseMetaTileEntity.addStackToSlot(super.getOutputSlot(), cellFromFluid, 1)) {
+ // Convert back to FluidStack to learn the container capacity...
+ final FluidStack fluidCapacityStack = GT_Utility.getFluidForFilledItem(cellFromFluid, true);
+ // Consume one empty container if it was filled successfully
+ if(mfh.pullFluid(fluidCapacityStack, true) == fluidCapacityStack.amount) {
+ aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1);
}
}
}
+ /**
+ * Handle the Multi Hatch's auto-output feature. Should be called once per second only.
+ * @param aBaseMetaTileEntity
+ * this MetaTileEntity
+ */
+ private void doAutoOutputPerSecond(IGregTechTileEntity aBaseMetaTileEntity) {
+ final ForgeDirection side = ForgeDirection.getOrientation(aBaseMetaTileEntity.getFrontFacing());
+ final TileEntity adjacentTE = aBaseMetaTileEntity.getTileEntityOffset(side.offsetX, side.offsetY, side.offsetZ);
+ if(adjacentTE instanceof IFluidHandler) {
+ final IFluidHandler adj = (IFluidHandler) adjacentTE;
+ final int outputPerSec = vals.get(super.mTier);
+ // Cycle through fluids
+ for(int i = 0; i < mfh.getInfoData().size(); i++) {
+ final FluidStack storedFluid = mfh.getFluid(i);
+ }
+
+ }
+ }
+
@Override
public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
return (mfh != null) ? mfh.pushFluid(resource, doFill) : 0;
diff --git a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java
index 823d456b56..29370dc4f2 100644
--- a/src/main/java/common/tileentities/TE_TFFTMultiHatch.java
+++ b/src/main/java/common/tileentities/TE_TFFTMultiHatch.java
@@ -70,31 +70,28 @@ public class TE_TFFTMultiHatch extends TileEntity implements IFluidHandler {
final IFluidHandler fh = (IFluidHandler) t;
final int meta = t.getWorldObj().getBlockMetadata(t.xCoord, t.yCoord, t.zCoord);
// Cycle through fluids
- final Iterator<FluidStack> volumes = mfh.getFluids().iterator();
- while(volumes.hasNext()) {
- final FluidStack volume = volumes.next();
-
+ for (FluidStack volume : mfh.getFluids()) {
// Remember for later
final int oVolume = volume.amount;
-
+
// Use API methods
- if(fh.canFill(d.getOpposite(), volume.getFluid())) {
-
+ if (fh.canFill(d.getOpposite(), volume.getFluid())) {
+
// Test how much can be output
final FluidStack copy = volume.copy();
copy.amount = (int) Math.min(copy.amount, BASE_OUTPUT_PER_SECOND * Math.pow(10, meta));
-
+
// How much is drawn
copy.amount = mfh.pullFluid(copy, false);
-
+
// Test how much can be filled (and fill if possible)
copy.amount = fh.fill(d.getOpposite(), copy, true);
-
+
// Actually deplete storage
mfh.pullFluid(copy, true);
-
+
// Prevent ConcurrentModificationException
- if(copy.amount >= oVolume) {
+ if (copy.amount >= oVolume) {
break;
}
}
diff --git a/src/main/java/kekztech/MultiFluidHandler.java b/src/main/java/kekztech/MultiFluidHandler.java
index 1d8f4c2fea..b90d8a35bf 100644
--- a/src/main/java/kekztech/MultiFluidHandler.java
+++ b/src/main/java/kekztech/MultiFluidHandler.java
@@ -70,11 +70,6 @@ public class MultiFluidHandler {
public int getCapacity() {
return capacityPerFluid;
}
-
- // TODO return deep copy instead
- public List<FluidStack> getFluids(){
- return (!locked) ? fluids : new ArrayList<>();
- }
public FluidStack getFluid(int slot) {
return (!locked && fluids.size() > 0 && slot >= 0 && slot < MAX_DISTINCT_FLUIDS)