diff --git a/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java index 731c61c2..226fcd91 100644 --- a/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java +++ b/src/main/java/appeng/items/tools/powered/powersink/AEBasePoweredItem.java @@ -19,7 +19,7 @@ package appeng.items.tools.powered.powersink; -public abstract class AEBasePoweredItem extends AERootPoweredItem +public abstract class AEBasePoweredItem extends RedstoneFlux { public AEBasePoweredItem( final double powerCapacity ) { diff --git a/src/main/java/appeng/items/tools/powered/powersink/AERootPoweredItem.java b/src/main/java/appeng/items/tools/powered/powersink/AERootPoweredItem.java index dba790af..eaa4e6d7 100644 --- a/src/main/java/appeng/items/tools/powered/powersink/AERootPoweredItem.java +++ b/src/main/java/appeng/items/tools/powered/powersink/AERootPoweredItem.java @@ -146,6 +146,27 @@ public abstract class AERootPoweredItem extends AEBaseItem implements IAEItemPow return currentStorage; } + /** + * Inject power into this item using an external unit. + */ + double injectExternalPower( PowerUnits inputUnit, final ItemStack is, final double amount, final boolean simulate ) + { + if( simulate ) + { + final int requiredExt = (int) PowerUnits.AE.convertTo( inputUnit, this.getAEMaxPower( is ) - this.getAECurrentPower( is ) ); + if( amount < requiredExt ) + { + return 0; + } + return amount - requiredExt; + } + else + { + final double powerRemainder = this.injectAEPower( is, inputUnit.convertTo( PowerUnits.AE, amount ) ); + return PowerUnits.AE.convertTo( inputUnit, powerRemainder ); + } + } + @Override public double injectAEPower( final ItemStack is, final double amt ) { diff --git a/src/main/java/appeng/items/tools/powered/powersink/RedstoneFlux.java b/src/main/java/appeng/items/tools/powered/powersink/RedstoneFlux.java new file mode 100644 index 00000000..82a8eb34 --- /dev/null +++ b/src/main/java/appeng/items/tools/powered/powersink/RedstoneFlux.java @@ -0,0 +1,62 @@ +/* + * This file is part of Applied Energistics 2. + * Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved. + * + * Applied Energistics 2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Applied Energistics 2 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Applied Energistics 2. If not, see . + */ + +package appeng.items.tools.powered.powersink; + + +import net.minecraft.item.ItemStack; + +import cofh.api.energy.IEnergyContainerItem; + +import appeng.api.config.PowerUnits; +import appeng.integration.IntegrationType; +import appeng.transformer.annotations.Integration.Interface; + + +@Interface( iface = "cofh.api.energy.IEnergyContainerItem", iname = IntegrationType.RFItem ) +public abstract class RedstoneFlux extends AERootPoweredItem implements IEnergyContainerItem +{ + public RedstoneFlux( final double powerCapacity ) + { + super( powerCapacity ); + } + + @Override + public int receiveEnergy( final ItemStack is, final int maxReceive, final boolean simulate ) + { + return maxReceive - (int) this.injectExternalPower( PowerUnits.RF, is, maxReceive, simulate ); + } + + @Override + public int extractEnergy( final ItemStack container, final int maxExtract, final boolean simulate ) + { + return 0; + } + + @Override + public int getEnergyStored( final ItemStack is ) + { + return (int) PowerUnits.AE.convertTo( PowerUnits.RF, this.getAECurrentPower( is ) ); + } + + @Override + public int getMaxEnergyStored( final ItemStack is ) + { + return (int) PowerUnits.AE.convertTo( PowerUnits.RF, this.getAEMaxPower( is ) ); + } +}