add RF API and add concept of energy usage to machines + controllers
This commit is contained in:
11
src/main/java/cofh/api/CoFHAPIProps.java
Normal file
11
src/main/java/cofh/api/CoFHAPIProps.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package cofh.api;
|
||||||
|
|
||||||
|
public class CoFHAPIProps {
|
||||||
|
|
||||||
|
private CoFHAPIProps() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String VERSION = "1.7.10R1.0.2";
|
||||||
|
|
||||||
|
}
|
158
src/main/java/cofh/api/energy/EnergyStorage.java
Normal file
158
src/main/java/cofh/api/energy/EnergyStorage.java
Normal file
@@ -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 -> 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
src/main/java/cofh/api/energy/IEnergyConnection.java
Normal file
21
src/main/java/cofh/api/energy/IEnergyConnection.java
Normal file
@@ -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
src/main/java/cofh/api/energy/IEnergyContainerItem.java
Normal file
52
src/main/java/cofh/api/energy/IEnergyContainerItem.java
Normal file
@@ -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
src/main/java/cofh/api/energy/IEnergyHandler.java
Normal file
58
src/main/java/cofh/api/energy/IEnergyHandler.java
Normal file
@@ -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
src/main/java/cofh/api/energy/IEnergyProvider.java
Normal file
38
src/main/java/cofh/api/energy/IEnergyProvider.java
Normal file
@@ -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
src/main/java/cofh/api/energy/IEnergyReceiver.java
Normal file
38
src/main/java/cofh/api/energy/IEnergyReceiver.java
Normal file
@@ -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);
|
||||||
|
|
||||||
|
}
|
46
src/main/java/cofh/api/energy/IEnergyStorage.java
Normal file
46
src/main/java/cofh/api/energy/IEnergyStorage.java
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package cofh.api.energy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An energy storage is the unit of interaction with Energy inventories.<br>
|
||||||
|
* This is not to be implemented on TileEntities. This is for internal use only.
|
||||||
|
* <p>
|
||||||
|
* A reference implementation can be found at {@link EnergyStorage}.
|
||||||
|
*
|
||||||
|
* @author King Lemming
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IEnergyStorage {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds energy to the storage. Returns quantity of energy that was accepted.
|
||||||
|
*
|
||||||
|
* @param maxReceive
|
||||||
|
* Maximum amount of energy to be inserted.
|
||||||
|
* @param simulate
|
||||||
|
* If TRUE, the insertion will only be simulated.
|
||||||
|
* @return Amount of energy that was (or would have been, if simulated) accepted by the storage.
|
||||||
|
*/
|
||||||
|
int receiveEnergy(int maxReceive, boolean simulate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes energy from the storage. Returns quantity of energy that was removed.
|
||||||
|
*
|
||||||
|
* @param maxExtract
|
||||||
|
* Maximum amount of energy to be extracted.
|
||||||
|
* @param simulate
|
||||||
|
* If TRUE, the extraction will only be simulated.
|
||||||
|
* @return Amount of energy that was (or would have been, if simulated) extracted from the storage.
|
||||||
|
*/
|
||||||
|
int extractEnergy(int maxExtract, boolean simulate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the amount of energy currently stored.
|
||||||
|
*/
|
||||||
|
int getEnergyStored();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the maximum amount of energy that can be stored.
|
||||||
|
*/
|
||||||
|
int getMaxEnergyStored();
|
||||||
|
|
||||||
|
}
|
110
src/main/java/cofh/api/energy/ItemEnergyContainer.java
Normal file
110
src/main/java/cofh/api/energy/ItemEnergyContainer.java
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
package cofh.api.energy;
|
||||||
|
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference implementation of {@link IEnergyContainerItem}. Use/extend this or implement your own.
|
||||||
|
*
|
||||||
|
* @author King Lemming
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class ItemEnergyContainer extends Item implements IEnergyContainerItem {
|
||||||
|
|
||||||
|
protected int capacity;
|
||||||
|
protected int maxReceive;
|
||||||
|
protected int maxExtract;
|
||||||
|
|
||||||
|
public ItemEnergyContainer() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemEnergyContainer(int capacity) {
|
||||||
|
|
||||||
|
this(capacity, capacity, capacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemEnergyContainer(int capacity, int maxTransfer) {
|
||||||
|
|
||||||
|
this(capacity, maxTransfer, maxTransfer);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemEnergyContainer(int capacity, int maxReceive, int maxExtract) {
|
||||||
|
|
||||||
|
this.capacity = capacity;
|
||||||
|
this.maxReceive = maxReceive;
|
||||||
|
this.maxExtract = maxExtract;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemEnergyContainer setCapacity(int capacity) {
|
||||||
|
|
||||||
|
this.capacity = capacity;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IEnergyContainerItem */
|
||||||
|
@Override
|
||||||
|
public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) {
|
||||||
|
|
||||||
|
if (container.stackTagCompound == null) {
|
||||||
|
container.stackTagCompound = new NBTTagCompound();
|
||||||
|
}
|
||||||
|
int energy = container.stackTagCompound.getInteger("Energy");
|
||||||
|
int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));
|
||||||
|
|
||||||
|
if (!simulate) {
|
||||||
|
energy += energyReceived;
|
||||||
|
container.stackTagCompound.setInteger("Energy", energy);
|
||||||
|
}
|
||||||
|
return energyReceived;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) {
|
||||||
|
|
||||||
|
if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int energy = container.stackTagCompound.getInteger("Energy");
|
||||||
|
int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract));
|
||||||
|
|
||||||
|
if (!simulate) {
|
||||||
|
energy -= energyExtracted;
|
||||||
|
container.stackTagCompound.setInteger("Energy", energy);
|
||||||
|
}
|
||||||
|
return energyExtracted;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEnergyStored(ItemStack container) {
|
||||||
|
|
||||||
|
if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return container.stackTagCompound.getInteger("Energy");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxEnergyStored(ItemStack container) {
|
||||||
|
|
||||||
|
return capacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
65
src/main/java/cofh/api/energy/TileEnergyHandler.java
Normal file
65
src/main/java/cofh/api/energy/TileEnergyHandler.java
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package cofh.api.energy;
|
||||||
|
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own.
|
||||||
|
*
|
||||||
|
* @author King Lemming
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class TileEnergyHandler extends TileEntity implements IEnergyHandler {
|
||||||
|
|
||||||
|
protected EnergyStorage storage = new EnergyStorage(32000);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromNBT(NBTTagCompound nbt) {
|
||||||
|
|
||||||
|
super.readFromNBT(nbt);
|
||||||
|
storage.readFromNBT(nbt);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToNBT(NBTTagCompound nbt) {
|
||||||
|
|
||||||
|
super.writeToNBT(nbt);
|
||||||
|
storage.writeToNBT(nbt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IEnergyConnection */
|
||||||
|
@Override
|
||||||
|
public boolean canConnectEnergy(ForgeDirection from) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IEnergyReceiver */
|
||||||
|
@Override
|
||||||
|
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
|
||||||
|
|
||||||
|
return storage.receiveEnergy(maxReceive, simulate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IEnergyProvider */
|
||||||
|
@Override
|
||||||
|
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
|
||||||
|
|
||||||
|
return storage.extractEnergy(maxExtract, simulate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* IEnergyReceiver and IEnergyProvider */
|
||||||
|
@Override
|
||||||
|
public int getEnergyStored(ForgeDirection from) {
|
||||||
|
|
||||||
|
return storage.getEnergyStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxEnergyStored(ForgeDirection from) {
|
||||||
|
|
||||||
|
return storage.getMaxEnergyStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
10
src/main/java/cofh/api/energy/package-info.java
Normal file
10
src/main/java/cofh/api/energy/package-info.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* (C) 2014 Team CoFH / CoFH / Cult of the Full Hub
|
||||||
|
* http://www.teamcofh.com
|
||||||
|
*/
|
||||||
|
@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHAPI", provides = "CoFHAPI|energy")
|
||||||
|
package cofh.api.energy;
|
||||||
|
|
||||||
|
import cofh.api.CoFHAPIProps;
|
||||||
|
import cpw.mods.fml.common.API;
|
||||||
|
|
9
src/main/java/cofh/api/package-info.java
Normal file
9
src/main/java/cofh/api/package-info.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
/**
|
||||||
|
* (C) 2014 Team CoFH / CoFH / Cult of the Full Hub
|
||||||
|
* http://www.teamcofh.com
|
||||||
|
*/
|
||||||
|
@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHLib", provides = "CoFHAPI")
|
||||||
|
package cofh.api;
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.API;
|
||||||
|
|
@@ -1,7 +1,9 @@
|
|||||||
package storagecraft.block;
|
package storagecraft.block;
|
||||||
|
|
||||||
import net.minecraft.block.ITileEntityProvider;
|
import net.minecraft.block.ITileEntityProvider;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.ChatComponentText;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import storagecraft.tile.TileController;
|
import storagecraft.tile.TileController;
|
||||||
|
|
||||||
@@ -15,6 +17,18 @@ public class BlockController extends BlockSC implements ITileEntityProvider {
|
|||||||
return new TileController();
|
return new TileController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
|
||||||
|
if (!world.isRemote) {
|
||||||
|
TileController controller = (TileController) world.getTileEntity(x, y, z);
|
||||||
|
|
||||||
|
player.addChatComponentMessage(new ChatComponentText("RF stored: " + controller.getEnergyStored(null)));
|
||||||
|
player.addChatComponentMessage(new ChatComponentText("RF/t usage: " + controller.getEnergyUsage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBlockPreDestroy(World world, int x, int y, int z, int meta) {
|
public void onBlockPreDestroy(World world, int x, int y, int z, int meta) {
|
||||||
((TileController) world.getTileEntity(x, y, z)).onDestroyed();
|
((TileController) world.getTileEntity(x, y, z)).onDestroyed();
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
package storagecraft.tile;
|
package storagecraft.tile;
|
||||||
|
|
||||||
public interface IMachine {
|
public interface IMachine {
|
||||||
|
public int getEnergyUsage();
|
||||||
|
|
||||||
public void onConnected(TileController controller);
|
public void onConnected(TileController controller);
|
||||||
|
|
||||||
public void onDisconnected();
|
public void onDisconnected();
|
||||||
|
@@ -1,13 +1,18 @@
|
|||||||
package storagecraft.tile;
|
package storagecraft.tile;
|
||||||
|
|
||||||
|
import cofh.api.energy.EnergyStorage;
|
||||||
|
import cofh.api.energy.IEnergyHandler;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
|
||||||
public class TileController extends TileSC {
|
public class TileController extends TileSC implements IEnergyHandler {
|
||||||
private List<IMachine> connectedMachines = new ArrayList<IMachine>();
|
public static final int BASE_ENERGY_USAGE = 100;
|
||||||
|
|
||||||
|
private EnergyStorage storage = new EnergyStorage(32000);
|
||||||
|
private List<IMachine> connectedMachines = new ArrayList<IMachine>();
|
||||||
private int ticks = 0;
|
private int ticks = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -18,38 +23,101 @@ public class TileController extends TileSC {
|
|||||||
ticks++;
|
ticks++;
|
||||||
|
|
||||||
if (ticks % 40 == 0) {
|
if (ticks % 40 == 0) {
|
||||||
List<IMachine> machines = new ArrayList<IMachine>();
|
if (!isActive()) {
|
||||||
|
disconnectAll();
|
||||||
|
} else {
|
||||||
|
List<IMachine> machines = new ArrayList<IMachine>();
|
||||||
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
|
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
|
||||||
|
|
||||||
if (tile instanceof TileCable) {
|
if (tile instanceof TileCable) {
|
||||||
machines.addAll(((TileCable) tile).findMachines());
|
machines.addAll(((TileCable) tile).findMachines());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (IMachine machine : connectedMachines) {
|
for (IMachine machine : connectedMachines) {
|
||||||
if (!machines.contains(machine)) {
|
if (!machines.contains(machine)) {
|
||||||
machine.onDisconnected();
|
machine.onDisconnected();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (IMachine machine : machines) {
|
for (IMachine machine : machines) {
|
||||||
if (!connectedMachines.contains(machine)) {
|
if (!connectedMachines.contains(machine)) {
|
||||||
machine.onConnected(this);
|
machine.onConnected(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
connectedMachines = machines;
|
connectedMachines = machines;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
storage.extractEnergy(getEnergyUsage(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDestroyed() {
|
public void onDestroyed() {
|
||||||
|
disconnectAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void disconnectAll() {
|
||||||
for (IMachine machine : connectedMachines) {
|
for (IMachine machine : connectedMachines) {
|
||||||
machine.onDisconnected();
|
machine.onDisconnected();
|
||||||
}
|
}
|
||||||
|
|
||||||
connectedMachines.clear();
|
connectedMachines.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromNBT(NBTTagCompound nbt) {
|
||||||
|
super.readFromNBT(nbt);
|
||||||
|
|
||||||
|
storage.readFromNBT(nbt);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToNBT(NBTTagCompound nbt) {
|
||||||
|
super.writeToNBT(nbt);
|
||||||
|
|
||||||
|
storage.writeToNBT(nbt);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
|
||||||
|
return storage.receiveEnergy(maxReceive, simulate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
|
||||||
|
return storage.extractEnergy(maxExtract, simulate);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEnergyStored(ForgeDirection from) {
|
||||||
|
return storage.getEnergyStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxEnergyStored(ForgeDirection from) {
|
||||||
|
return storage.getMaxEnergyStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getEnergyUsage() {
|
||||||
|
int energyUsage = BASE_ENERGY_USAGE;
|
||||||
|
|
||||||
|
for (IMachine machine : connectedMachines) {
|
||||||
|
energyUsage += machine.getEnergyUsage();
|
||||||
|
}
|
||||||
|
|
||||||
|
return energyUsage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canConnectEnergy(ForgeDirection from) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isActive() {
|
||||||
|
return storage.getEnergyStored() >= getEnergyUsage();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,4 +8,9 @@ public class TileGrid extends TileSC implements IMachine {
|
|||||||
@Override
|
@Override
|
||||||
public void onDisconnected() {
|
public void onDisconnected() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getEnergyUsage() {
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
itemGroup.storagecraft=StorageCraft
|
itemGroup.storagecraft=StorageCraft
|
||||||
|
|
||||||
block.storagecraft:controller.name=Controller
|
block.storagecraft:controller.name=Controller
|
||||||
block.storagecraft:cable.name=Cable
|
block.storagecraft:cable.name=Cable
|
||||||
|
block.storagecraft:grid.name=Grid
|
Reference in New Issue
Block a user