fix fluid buffer bug

This commit is contained in:
asdflj committed 2022-12-18 15:04:59 +08:00
1 parent 77ccfb5606
commit c9ba859d34
4 files changed
+20 -28

No files matched your search

@@ -37,6 +37,7 @@ public class BlockFluidBuffer extends FCBaseBlock {
if (Platform.isServer()) {
TileFluidBuffer tile = getTileEntity(world, x, y, z);
if (tile == null) return false;
if(player.isSneaking() && itemStack == null) return !tile.setFluid(null);
IAEFluidStack ias = tile.getAEStoreFluidStack();
if (fs == null && ias != null) {
player.addChatMessage(new ChatComponentText(
@@ -47,7 +48,7 @@ public class BlockFluidBuffer extends FCBaseBlock {
return true;
}
}
return fs != null;
return fs != null || (player.isSneaking() && itemStack == null);
}
public BlockFluidBuffer register() {
@@ -31,7 +31,7 @@ import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;
public class TileFluidBuffer extends AENetworkTile
implements IAEFluidInventory, IFluidHandler, IPowerChannelState, IGridTickable {
implements IAEFluidInventory, IFluidHandler, IPowerChannelState {
private final AEFluidInventory invFluids = new AEFluidInventory(this, 1, Integer.MAX_VALUE);
private final BaseActionSource source;
@@ -44,10 +44,6 @@ public class TileFluidBuffer extends AENetworkTile
}
public boolean setFluid(FluidStack fs) {
return this.setFluid(fs, Actionable.MODULATE);
}
public boolean setFluid(FluidStack fs, Actionable actionable) {
if (fs == null) {
this.invFluids.setFluidInSlot(0, null);
return false;
@@ -58,7 +54,7 @@ public class TileFluidBuffer extends AENetworkTile
.getFluidInventory()
.getStorageList()
.findPrecise(AEFluidStack.create(fs));
if (actionable == Actionable.MODULATE) this.invFluids.setFluidInSlot(0, ias);
this.invFluids.setFluidInSlot(0, ias);
if (ias != null) return true;
} catch (final GridAccessException e) {
// :P
@@ -89,7 +85,12 @@ public class TileFluidBuffer extends AENetworkTile
@Override
public FluidStack drain(ForgeDirection forgeDirection, FluidStack fluidStack, boolean b) {
return this.drainFluid(fluidStack, b ? Actionable.MODULATE : Actionable.SIMULATE);
FluidStack fs = this.getFluidStack();
if(fs != null && fs.getFluid() == fluidStack.getFluid()){
return this.drainFluid(fluidStack, b ? Actionable.MODULATE : Actionable.SIMULATE);
}else {
return null;
}
}
public FluidStack drainFluid(FluidStack fs, Actionable actionable) {
@@ -227,24 +228,10 @@ public class TileFluidBuffer extends AENetworkTile
public AEFluidInventory getInternalFluid() {
return this.invFluids;
}
@Override
public TickingRequest getTickingRequest(IGridNode node) {
return new TickingRequest(40, 120, false, true);
}
@Override
public TickRateModulation tickingRequest(IGridNode node, int TicksSinceLastCall) {
return this.canDoBusWork() ? this.doWork() : TickRateModulation.IDLE;
}
private TickRateModulation doWork() {
return this.setFluid(this.getFluidStack(), Actionable.SIMULATE)
? TickRateModulation.SLOWER
: TickRateModulation.FASTER;
}
private boolean canDoBusWork() {
return this.getProxy().isActive();
public void updateFluidStore(){
IAEFluidStack iaf = this.getAEStoreFluidStack();
if(iaf != null){
this.invFluids.setFluidInSlot(0,iaf);
}
}
}
@@ -2,6 +2,7 @@ package com.glodblock.github.crossmod.waila.tile;
import appeng.integration.modules.waila.BaseWailaDataProvider;
import com.glodblock.github.common.item.ItemFluidPacket;
import com.glodblock.github.common.tile.TileFluidBuffer;
import com.glodblock.github.common.tile.TileFluidInterface;
import com.glodblock.github.common.tile.TileFluidPacketDecoder;
import com.glodblock.github.crossmod.waila.Tooltip;
@@ -73,6 +74,9 @@ public class FluidInvWailaDataProvider extends BaseWailaDataProvider {
final int x,
final int y,
final int z) {
if(te instanceof TileFluidBuffer){
((TileFluidBuffer) te).updateFluidStore();
}
if (te instanceof IAEFluidInventory) {
((IAEFluidInventory) te).getInternalFluid().writeToNBT(tag, "fluidInv");
} else if (te instanceof TileFluidPacketDecoder) {