diff --git a/helpers/DualityInterface.java b/helpers/DualityInterface.java index 1413faea2..fb72b043b 100644 --- a/helpers/DualityInterface.java +++ b/helpers/DualityInterface.java @@ -367,6 +367,13 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt if ( itemStack.getStackSize() > 0 ) { + // make sure strange things didn't happen... + if ( adaptor.simulateAdd( itemStack.getItemStack() ) != null ) + { + changed = true; + throw new GridAccessException(); + } + IAEItemStack aquired = Platform.poweredExtraction( src, destination, itemStack, mySrc ); if ( aquired != null ) { @@ -383,6 +390,14 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt long diff = toStore.getStackSize(); + // make sure strange things didn't happen... + ItemStack canExtract = adaptor.simulateRemove( (int) diff, toStore.getItemStack(), null ); + if ( canExtract == null || canExtract.stackSize != diff ) + { + changed = true; + throw new GridAccessException(); + } + toStore = Platform.poweredInsert( src, destination, toStore, mySrc ); if ( toStore != null ) @@ -394,9 +409,9 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt changed = true; ItemStack removed = adaptor.removeItems( (int) diff, null, null ); if ( removed == null ) - throw new RuntimeException( "bad attempt at managing inventory. ( addItems )" ); + throw new RuntimeException( "bad attempt at managing inventory. ( removeItems )" ); else if ( removed.stackSize != diff ) - throw new RuntimeException( "bad attempt at managing inventory. ( addItems )" ); + throw new RuntimeException( "bad attempt at managing inventory. ( removeItems )" ); } } // else wtf? diff --git a/tile/powersink/RedstoneFlux.java b/tile/powersink/RedstoneFlux.java index 50f4ff2ee..765cda86c 100644 --- a/tile/powersink/RedstoneFlux.java +++ b/tile/powersink/RedstoneFlux.java @@ -21,10 +21,21 @@ public abstract class RedstoneFlux extends RotaryCraft implements IEnergyHandler } else { - double overFlow = injectExternalPower( PowerUnits.RF, maxReceive ); + int demand = (int) Math.floor( getExternalPowerDemand( PowerUnits.RF ) ); + + int ignored = 0; + int insertAmt = maxReceive; + + if ( insertAmt > demand ) + { + ignored = insertAmt - demand; + insertAmt = demand; + } + + double overFlow = injectExternalPower( PowerUnits.RF, insertAmt ); double ox = Math.floor( overFlow ); internalCurrentPower += PowerUnits.RF.convertTo( PowerUnits.AE, overFlow - ox ); - return maxReceive - (int) ox; + return maxReceive - ((int) ox + ignored); } }