Condensor improvements (#3636)

This commit is contained in:
fscan
2018-08-01 00:15:30 +02:00
committed by GitHub
parent 9e252df8d9
commit ad1eff2adb
2 changed files with 25 additions and 26 deletions
@@ -19,31 +19,30 @@
package appeng.tile.misc; package appeng.tile.misc;
import appeng.api.AEApi;
import appeng.api.config.AccessRestriction; import appeng.api.config.AccessRestriction;
import appeng.api.config.Actionable; import appeng.api.config.Actionable;
import appeng.api.networking.security.IActionSource; import appeng.api.networking.security.IActionSource;
import appeng.api.storage.IMEMonitor; import appeng.api.storage.IMEMonitor;
import appeng.api.storage.IMEMonitorHandlerReceiver; import appeng.api.storage.IMEMonitorHandlerReceiver;
import appeng.api.storage.IStorageChannel; import appeng.api.storage.IStorageChannel;
import appeng.api.storage.channels.IFluidStorageChannel; import appeng.api.storage.data.IAEStack;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IItemList; import appeng.api.storage.data.IItemList;
import appeng.fluids.util.FluidList;
class CondenserFluidInventory implements IMEMonitor<IAEFluidStack> class CondenserVoidInventory<T extends IAEStack<T>> implements IMEMonitor<T>
{ {
private final TileCondenser target; private final TileCondenser target;
private final IStorageChannel<T> channel;
CondenserFluidInventory( final TileCondenser te ) CondenserVoidInventory( final TileCondenser te, final IStorageChannel<T> channel )
{ {
this.target = te; this.target = te;
this.channel = channel;
} }
@Override @Override
public IAEFluidStack injectItems( final IAEFluidStack input, final Actionable mode, final IActionSource src ) public T injectItems( final T input, final Actionable mode, final IActionSource src )
{ {
if( mode == Actionable.SIMULATE ) if( mode == Actionable.SIMULATE )
{ {
@@ -52,33 +51,33 @@ class CondenserFluidInventory implements IMEMonitor<IAEFluidStack>
if( input != null ) if( input != null )
{ {
this.target.addPower( input.getStackSize() / 1000.0 ); this.target.addPower( input.getStackSize() / (double) this.channel.transferFactor() );
} }
return null; return null;
} }
@Override @Override
public IAEFluidStack extractItems( final IAEFluidStack request, final Actionable mode, final IActionSource src ) public T extractItems( final T request, final Actionable mode, final IActionSource src )
{ {
return null; return null;
} }
@Override @Override
public IItemList<IAEFluidStack> getAvailableItems( final IItemList out ) public IItemList<T> getAvailableItems( final IItemList<T> out )
{ {
return out; return out;
} }
@Override @Override
public IItemList<IAEFluidStack> getStorageList() public IItemList<T> getStorageList()
{ {
return new FluidList(); return this.channel.createList();
} }
@Override @Override
public IStorageChannel<IAEFluidStack> getChannel() public IStorageChannel<T> getChannel()
{ {
return AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class ); return this.channel;
} }
@Override @Override
@@ -88,13 +87,13 @@ class CondenserFluidInventory implements IMEMonitor<IAEFluidStack>
} }
@Override @Override
public boolean isPrioritized( final IAEFluidStack input ) public boolean isPrioritized( final T input )
{ {
return false; return false;
} }
@Override @Override
public boolean canAccept( final IAEFluidStack input ) public boolean canAccept( final T input )
{ {
return true; return true;
} }
@@ -118,13 +117,13 @@ class CondenserFluidInventory implements IMEMonitor<IAEFluidStack>
} }
@Override @Override
public void addListener( IMEMonitorHandlerReceiver<IAEFluidStack> l, Object verificationToken ) public void addListener( IMEMonitorHandlerReceiver<T> l, Object verificationToken )
{ {
// Not implemented since the Condenser automatically voids everything, and there are no updates // Not implemented since the Condenser automatically voids everything, and there are no updates
} }
@Override @Override
public void removeListener( IMEMonitorHandlerReceiver<IAEFluidStack> l ) public void removeListener( IMEMonitorHandlerReceiver<T> l )
{ {
// Not implemented since we don't remember registered listeners anyway // Not implemented since we don't remember registered listeners anyway
} }
@@ -25,6 +25,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.FluidTankProperties; import net.minecraftforge.fluids.capability.FluidTankProperties;
@@ -45,6 +46,7 @@ import appeng.api.storage.IStorageMonitorable;
import appeng.api.storage.IStorageMonitorableAccessor; import appeng.api.storage.IStorageMonitorableAccessor;
import appeng.api.storage.channels.IFluidStorageChannel; import appeng.api.storage.channels.IFluidStorageChannel;
import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.channels.IItemStorageChannel;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEStack; import appeng.api.storage.data.IAEStack;
import appeng.api.util.IConfigManager; import appeng.api.util.IConfigManager;
import appeng.api.util.IConfigurableObject; import appeng.api.util.IConfigurableObject;
@@ -294,10 +296,10 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
} }
} }
private static final IFluidTankProperties[] EMPTY = { new FluidTankProperties( null, 10, true, false ) }; private static final IFluidTankProperties[] EMPTY = { new FluidTankProperties( null, Fluid.BUCKET_VOLUME, true, false ) };
/** /**
* A fluid handler that exposes a 10 bucket tank that can only be filled, and - when filled - will add power * A fluid handler that exposes a 1 bucket tank that can only be filled, and - when filled - will add power
* to this condenser. * to this condenser.
*/ */
private class FluidHandler implements IFluidHandler private class FluidHandler implements IFluidHandler
@@ -314,7 +316,8 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
{ {
if( doFill ) if( doFill )
{ {
TileCondenser.this.addPower( ( resource == null ? 0.0 : (double) resource.amount ) / 500.0 ); final IStorageChannel<IAEFluidStack> chan = AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class );
TileCondenser.this.addPower( ( resource == null ? 0.0 : (double) resource.amount ) / chan.transferFactor() );
} }
return resource == null ? 0 : resource.amount; return resource == null ? 0 : resource.amount;
@@ -344,8 +347,6 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
*/ */
private class MEHandler implements IStorageMonitorableAccessor, IStorageMonitorable private class MEHandler implements IStorageMonitorableAccessor, IStorageMonitorable
{ {
private final CondenserFluidInventory fluidInventory = new CondenserFluidInventory( TileCondenser.this );
private final CondenserItemInventory itemInventory = new CondenserItemInventory( TileCondenser.this ); private final CondenserItemInventory itemInventory = new CondenserItemInventory( TileCondenser.this );
void outputChanged( ItemStack added, ItemStack removed ) void outputChanged( ItemStack added, ItemStack removed )
@@ -367,11 +368,10 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
{ {
return (IMEMonitor<T>) this.itemInventory; return (IMEMonitor<T>) this.itemInventory;
} }
else if( channel == AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class ) ) else
{ {
return (IMEMonitor<T>) this.fluidInventory; return new CondenserVoidInventory<>( TileCondenser.this, channel );
} }
return null;
} }
} }
} }