2015-07-01 13:55:10 +02:00
|
|
|
package techreborn.powerSystem;
|
|
|
|
|
2015-07-01 18:23:29 +02:00
|
|
|
import cofh.api.energy.IEnergyProvider;
|
2015-07-01 13:55:10 +02:00
|
|
|
import cofh.api.energy.IEnergyReceiver;
|
2015-07-01 18:23:29 +02:00
|
|
|
import cpw.mods.fml.common.FMLCommonHandler;
|
2015-07-01 13:55:10 +02:00
|
|
|
import cpw.mods.fml.common.Optional;
|
2015-07-01 18:23:29 +02:00
|
|
|
import ic2.api.energy.event.EnergyTileLoadEvent;
|
|
|
|
import ic2.api.energy.event.EnergyTileUnloadEvent;
|
2015-07-01 17:41:40 +02:00
|
|
|
import ic2.api.energy.tile.IEnergySink;
|
2015-07-01 18:23:29 +02:00
|
|
|
import ic2.api.energy.tile.IEnergySource;
|
2015-07-01 13:55:10 +02:00
|
|
|
import ic2.api.energy.tile.IEnergyTile;
|
2015-07-01 18:23:29 +02:00
|
|
|
import ic2.api.info.Info;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
2015-07-01 17:41:40 +02:00
|
|
|
import net.minecraft.tileentity.TileEntity;
|
2015-07-01 18:23:29 +02:00
|
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
2015-07-01 13:55:10 +02:00
|
|
|
import techreborn.api.power.IEnergyInterfaceTile;
|
2015-07-01 17:41:40 +02:00
|
|
|
import techreborn.asm.Strippable;
|
2015-07-26 15:46:56 +02:00
|
|
|
import techreborn.config.ConfigTechReborn;
|
2015-07-01 17:41:40 +02:00
|
|
|
|
2015-07-23 13:52:51 +02:00
|
|
|
import java.util.List;
|
|
|
|
|
2015-07-01 17:41:40 +02:00
|
|
|
|
2015-07-01 18:23:29 +02:00
|
|
|
@Optional.InterfaceList(value = {
|
2015-07-01 21:34:22 +02:00
|
|
|
@Optional.Interface(iface = "ic2.api.energy.tile.IEnergyTile", modid = "IC2"),
|
|
|
|
@Optional.Interface(iface = "ic2.api.energy.tile.IEnergySink", modid = "IC2"),
|
|
|
|
@Optional.Interface(iface = "ic2.api.energy.tile.IEnergySource", modid = "IC2")
|
2015-07-01 17:41:40 +02:00
|
|
|
})
|
2015-07-02 14:16:47 +02:00
|
|
|
public abstract class TilePowerAcceptor extends RFProviderTile implements
|
2015-07-01 18:23:29 +02:00
|
|
|
IEnergyReceiver, IEnergyProvider, //Cofh
|
|
|
|
IEnergyInterfaceTile,//TechReborn
|
|
|
|
IEnergyTile, IEnergySink, IEnergySource //Ic2
|
2015-07-01 17:41:40 +02:00
|
|
|
{
|
2015-07-01 18:23:29 +02:00
|
|
|
public int tier;
|
2015-07-01 18:53:03 +02:00
|
|
|
private double energy;
|
2015-07-01 17:41:40 +02:00
|
|
|
|
2015-07-01 21:34:22 +02:00
|
|
|
public TilePowerAcceptor(int tier) {
|
2015-07-01 18:23:29 +02:00
|
|
|
this.tier = tier;
|
|
|
|
}
|
|
|
|
|
|
|
|
//IC2
|
2015-07-01 17:41:40 +02:00
|
|
|
|
2015-07-01 18:23:29 +02:00
|
|
|
@Strippable("mod:IC2")
|
|
|
|
protected boolean addedToEnet;
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
2015-07-01 17:41:40 +02:00
|
|
|
@Override
|
2015-07-01 18:23:29 +02:00
|
|
|
public void updateEntity() {
|
2015-07-01 17:41:40 +02:00
|
|
|
super.updateEntity();
|
2015-07-01 18:23:29 +02:00
|
|
|
onLoaded();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
public void onLoaded() {
|
|
|
|
if (PowerSystem.EUPOWENET && !addedToEnet &&
|
|
|
|
!FMLCommonHandler.instance().getEffectiveSide().isClient() &&
|
|
|
|
Info.isIc2Available()) {
|
|
|
|
MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(this));
|
|
|
|
|
|
|
|
addedToEnet = true;
|
|
|
|
}
|
2015-07-01 17:41:40 +02:00
|
|
|
}
|
|
|
|
|
2015-07-01 18:23:29 +02:00
|
|
|
@Strippable("mod:IC2")
|
2015-07-01 17:41:40 +02:00
|
|
|
@Override
|
2015-07-01 18:23:29 +02:00
|
|
|
public void invalidate() {
|
2015-07-01 17:41:40 +02:00
|
|
|
super.invalidate();
|
2015-07-01 18:23:29 +02:00
|
|
|
onChunkUnload();
|
2015-07-01 17:41:40 +02:00
|
|
|
}
|
|
|
|
|
2015-07-01 18:23:29 +02:00
|
|
|
@Strippable("mod:IC2")
|
2015-07-01 17:41:40 +02:00
|
|
|
@Override
|
2015-07-01 18:23:29 +02:00
|
|
|
public void onChunkUnload() {
|
2015-07-01 17:41:40 +02:00
|
|
|
super.onChunkUnload();
|
2015-07-01 18:23:29 +02:00
|
|
|
if (PowerSystem.EUPOWENET) {
|
|
|
|
if (addedToEnet &&
|
|
|
|
Info.isIc2Available()) {
|
|
|
|
MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this));
|
|
|
|
|
|
|
|
addedToEnet = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public double getDemandedEnergy() {
|
|
|
|
if (!PowerSystem.EUPOWENET)
|
|
|
|
return 0;
|
2015-07-23 14:07:20 +02:00
|
|
|
return getMaxPower() - getEnergy();
|
2015-07-01 18:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public int getSinkTier() {
|
|
|
|
return tier;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public double injectEnergy(ForgeDirection directionFrom, double amount, double voltage) {
|
|
|
|
energy += amount;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction) {
|
|
|
|
if (!PowerSystem.EUPOWENET)
|
|
|
|
return false;
|
|
|
|
return canAcceptEnergy(direction);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) {
|
|
|
|
if (!PowerSystem.EUPOWENET)
|
|
|
|
return false;
|
|
|
|
return canProvideEnergy(direction);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public double getOfferedEnergy() {
|
|
|
|
if (!PowerSystem.EUPOWENET)
|
|
|
|
return 0;
|
|
|
|
return getEnergy();
|
2015-07-01 17:41:40 +02:00
|
|
|
}
|
2015-07-01 13:55:10 +02:00
|
|
|
|
2015-07-01 18:23:29 +02:00
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public void drawEnergy(double amount) {
|
|
|
|
useEnergy((int) amount);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Strippable("mod:IC2")
|
|
|
|
@Override
|
|
|
|
public int getSourceTier() {
|
|
|
|
return tier;
|
|
|
|
}
|
|
|
|
//END IC2
|
|
|
|
|
|
|
|
//COFH
|
|
|
|
@Override
|
|
|
|
public boolean canConnectEnergy(ForgeDirection from) {
|
|
|
|
if (!PowerSystem.RFPOWENET)
|
|
|
|
return false;
|
2015-07-25 18:55:03 +02:00
|
|
|
return canAcceptEnergy(from) || canProvideEnergy(from);
|
2015-07-01 18:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
|
|
|
|
if (!PowerSystem.RFPOWENET)
|
|
|
|
return 0;
|
|
|
|
if (!canAcceptEnergy(from)) {
|
|
|
|
return 0;
|
|
|
|
}
|
2015-07-26 15:46:56 +02:00
|
|
|
maxReceive *= ConfigTechReborn.euPerRF;
|
2015-07-25 18:55:03 +02:00
|
|
|
int energyReceived = Math.min(getMaxEnergyStored(ForgeDirection.UNKNOWN) - getEnergyStored(ForgeDirection.UNKNOWN), Math.min((int)this.getMaxInput(), maxReceive));
|
|
|
|
|
|
|
|
if (!simulate) {
|
|
|
|
energy += energyReceived;
|
|
|
|
}
|
2015-07-26 15:46:56 +02:00
|
|
|
return energyReceived / ConfigTechReborn.euPerRF;
|
2015-07-01 18:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getEnergyStored(ForgeDirection from) {
|
|
|
|
if (!PowerSystem.RFPOWENET)
|
|
|
|
return 0;
|
2015-07-26 15:46:56 +02:00
|
|
|
return ((int) getEnergy() / ConfigTechReborn.euPerRF);
|
2015-07-01 18:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getMaxEnergyStored(ForgeDirection from) {
|
|
|
|
if (!PowerSystem.RFPOWENET)
|
|
|
|
return 0;
|
2015-07-26 15:46:56 +02:00
|
|
|
return ((int) getMaxPower() / ConfigTechReborn.euPerRF);
|
2015-07-01 18:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
|
|
|
|
if (!PowerSystem.RFPOWENET)
|
|
|
|
return 0;
|
|
|
|
if (!canAcceptEnergy(from)) {
|
|
|
|
return 0;
|
|
|
|
}
|
2015-07-26 15:46:56 +02:00
|
|
|
maxExtract *= ConfigTechReborn.euPerRF;
|
|
|
|
int energyExtracted = Math.min(getEnergyStored(ForgeDirection.UNKNOWN), Math.min(maxExtract, maxExtract));
|
|
|
|
|
|
|
|
if (!simulate) {
|
|
|
|
energy -= energyExtracted;
|
|
|
|
}
|
|
|
|
return energyExtracted / ConfigTechReborn.euPerRF;
|
2015-07-01 18:23:29 +02:00
|
|
|
}
|
|
|
|
//END COFH
|
|
|
|
|
2015-07-01 18:53:03 +02:00
|
|
|
//TechReborn
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getEnergy() {
|
2015-07-26 15:46:56 +02:00
|
|
|
return energy;
|
2015-07-01 18:53:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setEnergy(double energy) {
|
|
|
|
this.energy = energy;
|
|
|
|
|
|
|
|
if (this.energy > getMaxPower()) {
|
|
|
|
this.energy = getMaxPower();
|
|
|
|
} else if (this.energy < 0) {
|
|
|
|
this.energy = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double addEnergy(double energy) {
|
|
|
|
return addEnergy(energy, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double addEnergy(double energy, boolean simulate) {
|
|
|
|
double energyReceived = Math.min(getMaxPower() - energy, Math.min(this.getMaxPower(), energy));
|
|
|
|
|
|
|
|
if (!simulate) {
|
|
|
|
this.energy += energyReceived;
|
|
|
|
}
|
|
|
|
return energyReceived;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canUseEnergy(double energy) {
|
|
|
|
return this.energy >= energy;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double useEnergy(double energy) {
|
|
|
|
return useEnergy(energy, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double useEnergy(double energy, boolean simulate) {
|
|
|
|
double energyExtracted = Math.min(energy, Math.min(this.getMaxOutput(), energy));
|
|
|
|
|
|
|
|
if (!simulate) {
|
|
|
|
this.energy -= energyExtracted;
|
|
|
|
}
|
|
|
|
return energyExtracted;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canAddEnergy(double energy) {
|
|
|
|
return this.energy + energy <= getMaxPower();
|
|
|
|
}
|
|
|
|
//TechReborn END
|
2015-07-01 21:34:22 +02:00
|
|
|
|
2015-07-01 18:23:29 +02:00
|
|
|
@Override
|
|
|
|
public void readFromNBT(NBTTagCompound tag) {
|
|
|
|
super.readFromNBT(tag);
|
|
|
|
NBTTagCompound data = tag.getCompoundTag("TilePowerAcceptor");
|
2015-07-01 18:53:03 +02:00
|
|
|
energy = data.getDouble("energy");
|
2015-07-01 18:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void writeToNBT(NBTTagCompound tag) {
|
|
|
|
super.writeToNBT(tag);
|
|
|
|
NBTTagCompound data = new NBTTagCompound();
|
2015-07-01 18:53:03 +02:00
|
|
|
data.setDouble("energy", energy);
|
2015-07-01 18:23:29 +02:00
|
|
|
tag.setTag("TilePowerAcceptor", data);
|
|
|
|
}
|
2015-07-23 13:52:51 +02:00
|
|
|
|
2015-07-23 14:42:20 +02:00
|
|
|
public void readFromNBTWithoutCoords(NBTTagCompound tag) {
|
|
|
|
NBTTagCompound data = tag.getCompoundTag("TilePowerAcceptor");
|
|
|
|
energy = data.getDouble("energy");
|
|
|
|
}
|
|
|
|
|
|
|
|
public void writeToNBTWithoutCoords(NBTTagCompound tag) {
|
|
|
|
NBTTagCompound data = new NBTTagCompound();
|
|
|
|
data.setDouble("energy", energy);
|
|
|
|
tag.setTag("TilePowerAcceptor", data);
|
|
|
|
}
|
|
|
|
|
2015-07-23 13:52:51 +02:00
|
|
|
public int getEnergyScaled(int scale) {
|
2015-07-26 15:46:56 +02:00
|
|
|
return (int) ((getEnergyStored(ForgeDirection.UNKNOWN) * scale / getMaxEnergyStored(ForgeDirection.UNKNOWN)) * ConfigTechReborn.euPerRF);
|
2015-07-23 13:52:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void addWailaInfo(List<String> info) {
|
|
|
|
super.addWailaInfo(info);
|
2015-07-23 14:07:20 +02:00
|
|
|
info.add("Energy buffer Size " + getEUString(getMaxPower()));
|
|
|
|
info.add("Max Input " + getEUString(getMaxInput()));
|
|
|
|
info.add("Max Output " + getEUString(getMaxOutput()));
|
|
|
|
}
|
|
|
|
|
|
|
|
private String getEUString(double euValue)
|
|
|
|
{
|
|
|
|
if (euValue >= 1000000) {
|
|
|
|
double tenX = Math.round(euValue / 100000);
|
|
|
|
return Double.toString(tenX / 10.0).concat(" m EU");
|
|
|
|
}
|
|
|
|
else if (euValue >= 1000) {
|
|
|
|
double tenX = Math.round(euValue / 100);
|
|
|
|
return Double.toString(tenX / 10.0).concat(" k EU");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return Double.toString(Math.floor(euValue)).concat(" EU");
|
|
|
|
}
|
2015-07-23 13:52:51 +02:00
|
|
|
}
|
2015-07-01 13:55:10 +02:00
|
|
|
}
|