Skip to content

Commit

Permalink
Bundle RF API, don't depend on CoFH Core being installed
Browse files Browse the repository at this point in the history
  • Loading branch information
planetguy32 committed Oct 4, 2015
1 parent 7a433b8 commit a52319f
Show file tree
Hide file tree
Showing 13 changed files with 618 additions and 1 deletion.
11 changes: 11 additions & 0 deletions src/main/java/cofh/api/CoFHAPIProps.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package cofh.api;

public class CoFHAPIProps {

private CoFHAPIProps() {

}

public static final String VERSION = "1.7.10R1.0.1";

}
158 changes: 158 additions & 0 deletions src/main/java/cofh/api/energy/EnergyStorage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
package cofh.api.energy;

import net.minecraft.nbt.NBTTagCompound;

/**
* Reference implementation of {@link IEnergyStorage}. Use/extend this or implement your own.
*
* @author King Lemming
*
*/
public class EnergyStorage implements IEnergyStorage {

protected int energy;
protected int capacity;
protected int maxReceive;
protected int maxExtract;

public EnergyStorage(int capacity) {

this(capacity, capacity, capacity);
}

public EnergyStorage(int capacity, int maxTransfer) {

this(capacity, maxTransfer, maxTransfer);
}

public EnergyStorage(int capacity, int maxReceive, int maxExtract) {

this.capacity = capacity;
this.maxReceive = maxReceive;
this.maxExtract = maxExtract;
}

public EnergyStorage readFromNBT(NBTTagCompound nbt) {

this.energy = nbt.getInteger("Energy");

if (energy > capacity) {
energy = capacity;
}
return this;
}

public NBTTagCompound writeToNBT(NBTTagCompound nbt) {

if (energy < 0) {
energy = 0;
}
nbt.setInteger("Energy", energy);
return nbt;
}

public void setCapacity(int capacity) {

this.capacity = capacity;

if (energy > capacity) {
energy = capacity;
}
}

public void setMaxTransfer(int maxTransfer) {

setMaxReceive(maxTransfer);
setMaxExtract(maxTransfer);
}

public void setMaxReceive(int maxReceive) {

this.maxReceive = maxReceive;
}

public void setMaxExtract(int maxExtract) {

this.maxExtract = maxExtract;
}

public int getMaxReceive() {

return maxReceive;
}

public int getMaxExtract() {

return maxExtract;
}

/**
* This function is included to allow for server -&gt; client sync. Do not call this externally to the containing Tile Entity, as not all IEnergyHandlers
* are guaranteed to have it.
*
* @param energy
*/
public void setEnergyStored(int energy) {

this.energy = energy;

if (this.energy > capacity) {
this.energy = capacity;
} else if (this.energy < 0) {
this.energy = 0;
}
}

/**
* This function is included to allow the containing tile to directly and efficiently modify the energy contained in the EnergyStorage. Do not rely on this
* externally, as not all IEnergyHandlers are guaranteed to have it.
*
* @param energy
*/
public void modifyEnergyStored(int energy) {

this.energy += energy;

if (this.energy > capacity) {
this.energy = capacity;
} else if (this.energy < 0) {
this.energy = 0;
}
}

/* IEnergyStorage */
@Override
public int receiveEnergy(int maxReceive, boolean simulate) {

int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));

if (!simulate) {
energy += energyReceived;
}
return energyReceived;
}

@Override
public int extractEnergy(int maxExtract, boolean simulate) {

int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract));

if (!simulate) {
energy -= energyExtracted;
}
return energyExtracted;
}

@Override
public int getEnergyStored() {

return energy;
}

@Override
public int getMaxEnergyStored() {

return capacity;
}

}
21 changes: 21 additions & 0 deletions src/main/java/cofh/api/energy/IEnergyConnection.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package cofh.api.energy;

import net.minecraftforge.common.util.ForgeDirection;

/**
* Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not
* accept it; otherwise just use IEnergyHandler.
* <p>
* Note that {@link IEnergyHandler} is an extension of this.
*
* @author King Lemming
*
*/
public interface IEnergyConnection {

/**
* Returns TRUE if the TileEntity can connect on a given side.
*/
boolean canConnectEnergy(ForgeDirection from);

}
52 changes: 52 additions & 0 deletions src/main/java/cofh/api/energy/IEnergyContainerItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package cofh.api.energy;

import net.minecraft.item.ItemStack;

/**
* Implement this interface on Item classes that support external manipulation of their internal energy storages.
* <p>
* A reference implementation is provided {@link ItemEnergyContainer}.
*
* @author King Lemming
*
*/
public interface IEnergyContainerItem {

/**
* Adds energy to a container item. Returns the quantity of energy that was accepted. This should always return 0 if the item cannot be externally charged.
*
* @param container
* ItemStack to be charged.
* @param maxReceive
* Maximum amount of energy to be sent into the item.
* @param simulate
* If TRUE, the charge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) received by the item.
*/
int receiveEnergy(ItemStack container, int maxReceive, boolean simulate);

/**
* Removes energy from a container item. Returns the quantity of energy that was removed. This should always return 0 if the item cannot be externally
* discharged.
*
* @param container
* ItemStack to be discharged.
* @param maxExtract
* Maximum amount of energy to be extracted from the item.
* @param simulate
* If TRUE, the discharge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted from the item.
*/
int extractEnergy(ItemStack container, int maxExtract, boolean simulate);

/**
* Get the amount of energy currently stored in the container item.
*/
int getEnergyStored(ItemStack container);

/**
* Get the max amount of energy that can be stored in the container item.
*/
int getMaxEnergyStored(ItemStack container);

}
58 changes: 58 additions & 0 deletions src/main/java/cofh/api/energy/IEnergyHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package cofh.api.energy;

import net.minecraftforge.common.util.ForgeDirection;

/**
* Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
* <p>
* A reference implementation is provided {@link TileEnergyHandler}.
*
* @author King Lemming
*
*/
public interface IEnergyHandler extends IEnergyProvider, IEnergyReceiver {

// merely a convenience interface (remove these methods in 1.8; provided here for back-compat via compiler doing things)

/**
* Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver.
*
* @param from
* Orientation the energy is received from.
* @param maxReceive
* Maximum amount of energy to receive.
* @param simulate
* If TRUE, the charge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) received.
*/
@Override
int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate);

/**
* Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider.
*
* @param from
* Orientation the energy is extracted from.
* @param maxExtract
* Maximum amount of energy to extract.
* @param simulate
* If TRUE, the extraction will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted.
*/
@Override
int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate);


/**
* Returns the amount of energy currently stored.
*/
@Override
int getEnergyStored(ForgeDirection from);

/**
* Returns the maximum amount of energy that can be stored.
*/
@Override
int getMaxEnergyStored(ForgeDirection from);

}
38 changes: 38 additions & 0 deletions src/main/java/cofh/api/energy/IEnergyProvider.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package cofh.api.energy;

import net.minecraftforge.common.util.ForgeDirection;

/**
* Implement this interface on Tile Entities which should provide energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
* <p>
* A reference implementation is provided {@link TileEnergyHandler}.
*
* @author King Lemming
*
*/
public interface IEnergyProvider extends IEnergyConnection {

/**
* Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider.
*
* @param from
* Orientation the energy is extracted from.
* @param maxExtract
* Maximum amount of energy to extract.
* @param simulate
* If TRUE, the extraction will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted.
*/
int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate);

/**
* Returns the amount of energy currently stored.
*/
int getEnergyStored(ForgeDirection from);

/**
* Returns the maximum amount of energy that can be stored.
*/
int getMaxEnergyStored(ForgeDirection from);

}
38 changes: 38 additions & 0 deletions src/main/java/cofh/api/energy/IEnergyReceiver.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package cofh.api.energy;

import net.minecraftforge.common.util.ForgeDirection;

/**
* Implement this interface on Tile Entities which should receive energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
* <p>
* A reference implementation is provided {@link TileEnergyHandler}.
*
* @author King Lemming
*
*/
public interface IEnergyReceiver extends IEnergyConnection {

/**
* Add energy to an IEnergyReceiver, internal distribution is left entirely to the IEnergyReceiver.
*
* @param from
* Orientation the energy is received from.
* @param maxReceive
* Maximum amount of energy to receive.
* @param simulate
* If TRUE, the charge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) received.
*/
int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate);

/**
* Returns the amount of energy currently stored.
*/
int getEnergyStored(ForgeDirection from);

/**
* Returns the maximum amount of energy that can be stored.
*/
int getMaxEnergyStored(ForgeDirection from);

}
Loading

0 comments on commit a52319f

Please sign in to comment.