This commit is contained in:
Timo Ley 2020-04-23 23:02:47 +02:00
commit 29d90d0e5b
8 changed files with 227 additions and 0 deletions

View File

@ -0,0 +1,58 @@
package ley.anvil.api.energy;
import ley.anvil.api.energy.common.IElectrical;
import ley.anvil.api.energy.common.IHeat;
import ley.anvil.api.energy.common.IRotational;
public enum CommonType implements IEnergyType {
FLUX {
@Override
public String getID() {
return "flux";
}
},
ELECTRIC {
@Override
public String getID() {
return "electric";
}
@Override
public Class<? extends IEnergy> getInterface() {
return IElectrical.class;
}
},
HEAT {
@Override
public String getID() {
return "heat";
}
@Override
public Class<? extends IEnergy> getInterface() {
return IHeat.class;
}
},
ROTATION {
@Override
public String getID() {
return "rotation";
}
@Override
public Class<? extends IEnergy> getInterface() {
return IRotational.class;
}
},
MANA {
@Override
public String getID() {
return "mana";
}
};
}

View File

@ -0,0 +1,9 @@
package ley.anvil.api.energy;
import net.minecraft.util.EnumFacing;
public interface IDirectionalEnergy<T extends IEnergy> {
T getEnergy(EnumFacing side);
}

View File

@ -0,0 +1,78 @@
package ley.anvil.api.energy;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.energy.IEnergyStorage;
import javax.annotation.Nullable;
public interface IEnergy /*Forge Specific*/extends IEnergyStorage {
IEnergyType getType();
default IEnergyType[] getTypes() {
return new IEnergyType[] {getType()};
}
long getCapacity();
long getStored();
void setStored(long energy);
long getOutputPower(IEnergyType type);
long getInputPower(IEnergyType type);
long insertEnergy(long energy, IEnergyType type, boolean simulate);
long extractEnergy(long energy, IEnergyType type, boolean simulate);
boolean canInput(IEnergyType type);
boolean canOutput(IEnergyType type);
@Deprecated
default long getOutputPower(IEnergyType type, @Nullable EnumFacing to) {return getOutputPower(type);}
@Deprecated
default long getInputPower(IEnergyType type, @Nullable EnumFacing to) {return getInputPower(type);}
@Deprecated
default long insertEnergy(long energy, IEnergyType type, @Nullable EnumFacing from, boolean simulate) {return insertEnergy(energy,type, simulate);}
@Deprecated
default long extractEnergy(long energy, IEnergyType type, @Nullable EnumFacing from, boolean simulate) {return extractEnergy(energy, type, simulate);}
@Deprecated
default boolean canInput(IEnergyType type, @Nullable EnumFacing from) {return canInput(type);}
@Deprecated
default boolean canOutput(IEnergyType type, @Nullable EnumFacing to) {return canOutput(type);}
//Forge Specific
@Override
default int receiveEnergy(int maxReceive, boolean simulate) {
return (int) insertEnergy(maxReceive, CommonType.FLUX, simulate);
}
@Override
default int extractEnergy(int maxExtract, boolean simulate) {
return (int) extractEnergy(maxExtract, CommonType.FLUX, simulate);
}
@Override
default int getEnergyStored() {
return (int) getStored();
}
@Override
default int getMaxEnergyStored() {
return (int) getCapacity();
}
@Override
default boolean canExtract() {
return canOutput(CommonType.FLUX);
}
@Override
default boolean canReceive() {
return canInput(CommonType.FLUX);
}
}

View File

@ -0,0 +1,15 @@
package ley.anvil.api.energy;
public interface IEnergyType {
String getID();
default boolean equals(IEnergyType o) {
return getID().equals(o.getID());
}
default Class<? extends IEnergy> getInterface() {
return IEnergy.class;
}
}

View File

@ -0,0 +1,6 @@
package ley.anvil.api.energy.common;
public enum EnumDirection {
CLOCKWISE,
COUNTERCLOCKWISE;
}

View File

@ -0,0 +1,19 @@
package ley.anvil.api.energy.common;
import ley.anvil.api.energy.CommonType;
import ley.anvil.api.energy.IEnergy;
import ley.anvil.api.energy.IEnergyType;
public interface IElectrical extends IEnergy {
int getVoltage();
long insertCharge(long charge, int voltage);
int getMaxVoltage();
@Override
default IEnergyType getType() {
return CommonType.ELECTRIC;
}
}

View File

@ -0,0 +1,19 @@
package ley.anvil.api.energy.common;
import ley.anvil.api.energy.CommonType;
import ley.anvil.api.energy.IEnergy;
import ley.anvil.api.energy.IEnergyType;
public interface IHeat extends IEnergy {
int getTemperature();
void addTemperature(int temp);
void removeTemperature(int temp);
@Override
default IEnergyType getType() {
return CommonType.HEAT;
}
}

View File

@ -0,0 +1,23 @@
package ley.anvil.api.energy.common;
import ley.anvil.api.energy.CommonType;
import ley.anvil.api.energy.IEnergy;
import ley.anvil.api.energy.IEnergyType;
public interface IRotational extends IEnergy {
int getTorque();
int getSpeed();
void applyTorque(int torque);
void applySpeed(int speed);
EnumDirection getDirection();
@Override
default IEnergyType getType() {
return CommonType.ROTATION;
}
}