add RF API and add concept of energy usage to machines + controllers
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package storagecraft.block;
|
||||
|
||||
import net.minecraft.block.ITileEntityProvider;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ChatComponentText;
|
||||
import net.minecraft.world.World;
|
||||
import storagecraft.tile.TileController;
|
||||
|
||||
@@ -15,6 +17,18 @@ public class BlockController extends BlockSC implements ITileEntityProvider {
|
||||
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
|
||||
public void onBlockPreDestroy(World world, int x, int y, int z, int meta) {
|
||||
((TileController) world.getTileEntity(x, y, z)).onDestroyed();
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package storagecraft.tile;
|
||||
|
||||
public interface IMachine {
|
||||
public int getEnergyUsage();
|
||||
|
||||
public void onConnected(TileController controller);
|
||||
|
||||
public void onDisconnected();
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
package storagecraft.tile;
|
||||
|
||||
import cofh.api.energy.EnergyStorage;
|
||||
import cofh.api.energy.IEnergyHandler;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class TileController extends TileSC {
|
||||
private List<IMachine> connectedMachines = new ArrayList<IMachine>();
|
||||
public class TileController extends TileSC implements IEnergyHandler {
|
||||
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;
|
||||
|
||||
@Override
|
||||
@@ -18,38 +23,101 @@ public class TileController extends TileSC {
|
||||
ticks++;
|
||||
|
||||
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) {
|
||||
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
|
||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
|
||||
|
||||
if (tile instanceof TileCable) {
|
||||
machines.addAll(((TileCable) tile).findMachines());
|
||||
if (tile instanceof TileCable) {
|
||||
machines.addAll(((TileCable) tile).findMachines());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (IMachine machine : connectedMachines) {
|
||||
if (!machines.contains(machine)) {
|
||||
machine.onDisconnected();
|
||||
for (IMachine machine : connectedMachines) {
|
||||
if (!machines.contains(machine)) {
|
||||
machine.onDisconnected();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (IMachine machine : machines) {
|
||||
if (!connectedMachines.contains(machine)) {
|
||||
machine.onConnected(this);
|
||||
for (IMachine machine : machines) {
|
||||
if (!connectedMachines.contains(machine)) {
|
||||
machine.onConnected(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
connectedMachines = machines;
|
||||
connectedMachines = machines;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
storage.extractEnergy(getEnergyUsage(), false);
|
||||
}
|
||||
|
||||
public void onDestroyed() {
|
||||
disconnectAll();
|
||||
}
|
||||
|
||||
private void disconnectAll() {
|
||||
for (IMachine machine : connectedMachines) {
|
||||
machine.onDisconnected();
|
||||
}
|
||||
|
||||
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
|
||||
public void onDisconnected() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEnergyUsage() {
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user