@Override public double getProviderEnergyDemand( final double maxRequired ) { double required = 0; final Iterator<IAEPowerStorage> it = this.requesters.iterator(); while( required < maxRequired && it.hasNext() ) { final IAEPowerStorage node = it.next(); if( node.getPowerFlow() != AccessRestriction.READ ) { required += Math.max( 0.0, node.getAEMaxPower() - node.getAECurrentPower() ); } } return required; }
@Override public double injectProviderPower( double amt, final Actionable mode ) { final double originalAmount = amt; final Iterator<IAEPowerStorage> it = this.requesters.iterator(); while( amt > 0 && it.hasNext() ) { final IAEPowerStorage node = it.next(); amt = node.injectAEPower( amt, mode ); if( amt > 0 && mode == Actionable.MODULATE ) { it.remove(); } } final double overflow = Math.max( 0.0, amt ); if( mode == Actionable.MODULATE ) { this.tickInjectionPerTick += originalAmount - overflow; } return overflow; }
@MENetworkEventSubscribe public void storagePowerChangeHandler( final MENetworkPowerStorage ev ) { if( ev.storage.isAEPublicPowerStorage() ) { switch( ev.type ) { case PROVIDE_POWER: if( ev.storage.getPowerFlow() != AccessRestriction.WRITE ) { this.providers.add( ev.storage ); } break; case REQUEST_POWER: if( ev.storage.getPowerFlow() != AccessRestriction.READ ) { this.requesters.add( ev.storage ); } break; } } else { ( new RuntimeException( "Attempt to ask the IEnergyGrid to charge a non public energy store." ) ).printStackTrace(); } }
/** * Called on server to transfer information from server to client. * <p/> * If the {@link net.minecraft.tileentity.TileEntity} is a {@link appeng.api.networking.energy.IAEPowerStorage}, it * writes the power information to the {@code #tag} using the {@code #ID_CURRENT_POWER} key. * * @param player player looking at the power storage * @param te power storage * @param tag transferred tag which is send to the client * @param world world of the power storage * @param pos pos of the power storage * * @return tag send to the client */ @Override public NBTTagCompound getNBTData( EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world, BlockPos pos ) { if( te instanceof IAEPowerStorage ) { final IAEPowerStorage storage = (IAEPowerStorage) te; if( storage.getAEMaxPower() > 0 ) { final long internalCurrentPower = (long) ( 100 * storage.getAECurrentPower() ); tag.setLong( ID_CURRENT_POWER, internalCurrentPower ); } } return tag; }
if( ps.isAEPublicPowerStorage() ) if( ps.getPowerFlow() != AccessRestriction.WRITE ) this.globalMaxPower -= ps.getAEMaxPower(); this.globalAvailablePower -= ps.getAECurrentPower();
/** * refresh current stored power. */ private void refreshPower() { this.availableTicksSinceUpdate = 0; this.globalAvailablePower = 0; for( final IAEPowerStorage p : this.providers ) { this.globalAvailablePower += p.getAECurrentPower(); } }
@Override public double extractProviderPower( final double amt, final Actionable mode ) { double extractedPower = 0; final Iterator<IAEPowerStorage> it = this.providers.iterator(); while( extractedPower < amt && it.hasNext() ) { final IAEPowerStorage node = it.next(); final double req = amt - extractedPower; final double newPower = node.extractAEPower( req, mode, PowerMultiplier.ONE ); extractedPower += newPower; if( newPower < req && mode == Actionable.MODULATE ) { it.remove(); } } final double result = Math.min( extractedPower, amt ); if( mode == Actionable.MODULATE ) { if( extractedPower > amt ) { this.localStorage.addCurrentAEPower( extractedPower - amt ); } this.globalAvailablePower -= result; this.tickDrainPerTick += result; } return result; }
final double maxPower = storage.getAEMaxPower(); if( maxPower > 0 )
if( ps.isAEPublicPowerStorage() ) final double max = ps.getAEMaxPower(); final double current = ps.getAECurrentPower(); if( ps.getPowerFlow() != AccessRestriction.WRITE ) this.globalMaxPower += ps.getAEMaxPower(); if( current > 0 && ps.getPowerFlow() != AccessRestriction.WRITE ) if( current < max && ps.getPowerFlow() != AccessRestriction.READ )
@Override public void addProbeInfo( AEBaseTile tile, ProbeMode mode, IProbeInfo probeInfo, EntityPlayer player, World world, IBlockState blockState, IProbeHitData data ) { if( tile instanceof IAEPowerStorage ) { final IAEPowerStorage storage = (IAEPowerStorage) tile; final double maxPower = storage.getAEMaxPower(); if( maxPower > 0 ) { final long internalCurrentPower = (long) ( storage.getAECurrentPower() * 100 ); if( internalCurrentPower >= 0 ) { final long internalMaxPower = (long) ( 100 * maxPower ); final String formatCurrentPower = Platform.formatPowerLong( internalCurrentPower, false ); final String formatMaxPower = Platform.formatPowerLong( internalMaxPower, false ); final String formattedString = String.format( TheOneProbeText.STORED_ENERGY.getLocal(), formatCurrentPower, formatMaxPower ); probeInfo.text( formattedString ); } } } }
this.outputMsg( player, "Energy: " + ps.getAECurrentPower() + " / " + ps.getAEMaxPower() );