#2438: Added Tesla support with same conversion ratio as RF.

This commit is contained in:
Sebastian Hartte
2016-10-20 00:13:45 +02:00
parent 5578aba8c8
commit ec4bc86266
4 changed files with 69 additions and 0 deletions
@@ -22,9 +22,11 @@ package appeng.tile.powersink;
import java.util.EnumSet;
import javax.annotation.Nullable;
import net.darkhax.tesla.api.ITeslaConsumer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityInject;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
@@ -41,6 +43,9 @@ import appeng.tile.events.TileEventType;
public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowerStorage, IExternalPowerSink
{
@CapabilityInject(ITeslaConsumer.class)
private static Capability<ITeslaConsumer> teslaConsumerCapability;
// values that determine general function, are set by inheriting classes if
// needed. These should generally remain static.
private double internalMaxPower = 10000;
@@ -50,10 +55,14 @@ public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowe
private double internalCurrentPower = 0;
private EnumSet<EnumFacing> internalPowerSides = EnumSet.allOf( EnumFacing.class );
private final IEnergyStorage forgeEnergyAdapter;
private Object teslaEnergyAdapter;
public AERootPoweredTile()
{
forgeEnergyAdapter = new ForgeEnergyAdapter( this );
if ( teslaConsumerCapability != null ) {
teslaEnergyAdapter = new TeslaEnergyAdapter( this );
}
}
protected EnumSet<EnumFacing> getPowerSides()
@@ -252,6 +261,13 @@ public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowe
return true;
}
}
else if( capability == teslaConsumerCapability )
{
if( this.getPowerSides().contains( facing ) )
{
return true;
}
}
return super.hasCapability( capability, facing );
}
@@ -267,6 +283,13 @@ public abstract class AERootPoweredTile extends AEBaseInvTile implements IAEPowe
return (T) forgeEnergyAdapter;
}
}
else if( capability == teslaConsumerCapability )
{
if( this.getPowerSides().contains( facing ) )
{
return (T) teslaEnergyAdapter;
}
}
return super.getCapability( capability, facing );
}
@@ -0,0 +1,39 @@
package appeng.tile.powersink;
import net.darkhax.tesla.api.ITeslaConsumer;
import appeng.api.config.PowerUnits;
/**
* Adapts an {@link IExternalPowerSink} to Forges {@link net.darkhax.tesla.api.ITeslaConsumer}.
*/
class TeslaEnergyAdapter implements ITeslaConsumer
{
private final IExternalPowerSink sink;
TeslaEnergyAdapter( IExternalPowerSink sink )
{
this.sink = sink;
}
@Override
public long givePower( long power, boolean simulated )
{
// Cut it down to what we can represent in a double
double powerDbl = (double) power;
double networkDemand = sink.getExternalPowerDemand( PowerUnits.RF, powerDbl );
long used = (long) Math.min( powerDbl, networkDemand );
if( !simulated )
{
sink.injectExternalPower( PowerUnits.RF, used );
}
return used;
}
}