From e65a98421fbfb3ddcb456c9345ba0e5d35170403 Mon Sep 17 00:00:00 2001 From: George Paton Date: Mon, 27 Jan 2025 10:13:11 +1100 Subject: [PATCH] handle shovels and prevent any unforeseen issues (like if a channel gets separated by breaking/explosion) --- .../hbm/blocks/machine/FoundryChannel.java | 1 + .../machine/TileEntityFoundryChannel.java | 21 ++++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/hbm/blocks/machine/FoundryChannel.java b/src/main/java/com/hbm/blocks/machine/FoundryChannel.java index 8866bfd0f..84faf6dee 100644 --- a/src/main/java/com/hbm/blocks/machine/FoundryChannel.java +++ b/src/main/java/com/hbm/blocks/machine/FoundryChannel.java @@ -176,6 +176,7 @@ public class FoundryChannel extends BlockContainer implements ICrucibleAcceptor } cast.amount = 0; cast.type = null; + cast.propagateMaterial(null); cast.markDirty(); world.markBlockForUpdate(x, y, z); } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java index a3d50cc76..d20e8acb0 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryChannel.java @@ -24,6 +24,7 @@ public class TileEntityFoundryChannel extends TileEntityFoundryBase { protected NTMMaterial neighborType; protected boolean hasCheckedNeighbors; + protected int unpropagateTime; @Override public void updateEntity() { @@ -115,10 +116,19 @@ public class TileEntityFoundryChannel extends TileEntityFoundryBase { } } } + + if(neighborType != null && amount == 0) unpropagateTime++; + + // every 5 seconds do a unprop test, will only occur once per contiguous channel per 5 seconds due to the timer getting updated in all channels from the prop + if(unpropagateTime > 100) { + propagateMaterial(null); + } if(this.amount == 0) { this.lastFlow = 0; this.nextUpdate = 5; + } else { + unpropagateTime = 0; } } @@ -164,7 +174,7 @@ public class TileEntityFoundryChannel extends TileEntityFoundryBase { return super.pour(world, x, y, z, dX, dY, dZ, side, stack); } - protected void propagateMaterial(NTMMaterial propType) { + public void propagateMaterial(NTMMaterial propType) { if(propType != null && neighborType != null) return; // optimise away any pours that change nothing List visited = new ArrayList(); @@ -181,8 +191,13 @@ public class TileEntityFoundryChannel extends TileEntityFoundryBase { } protected boolean propagateMaterial(NTMMaterial propType, List visited, boolean hasMaterial) { - // if emptying, don't allow the channel to be marked as ready for a new material until it is entirely clear - if(propType != null) neighborType = propType; + // if emptying, don't mark the channel as ready for a new material until it is entirely clear + if(propType != null) { + neighborType = propType; + } else { + // and when empty testing, update the last unpropagate time + unpropagateTime = 0; + } for(ForgeDirection dir : new ForgeDirection[] { ForgeDirection.NORTH, ForgeDirection.SOUTH, ForgeDirection.WEST, ForgeDirection.EAST }) { TileEntity b = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord, zCoord + dir.offsetZ);