145 lines
4.3 KiB
Java

package com.hbm.tileentity.conductor;
import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyConnection;
import cofh.api.energy.IEnergyHandler;
import cofh.api.energy.IEnergyReceiver;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityRFDuct extends TileEntity implements IEnergyHandler {
public ForgeDirection[] connections = new ForgeDirection[6];
protected EnergyStorage storage;
public int output;
public TileEntityRFDuct(int output) {
this.output = output;
this.storage = new EnergyStorage(200);
storage.setMaxReceive(output);
storage.setMaxExtract(output);
storage.setMaxTransfer(output);
}
public void updateEntity() {
this.updateConnections();
if (storage.getEnergyStored() > 0) {
for (int i = 0; i < 6; i++) {
int targetX = xCoord + ForgeDirection.getOrientation(i).offsetX;
int targetY = yCoord + ForgeDirection.getOrientation(i).offsetY;
int targetZ = zCoord + ForgeDirection.getOrientation(i).offsetZ;
TileEntity tile = worldObj.getTileEntity(targetX, targetY, targetZ);
if (tile instanceof IEnergyReceiver) {
int maxExtract = storage.getMaxExtract();
int maxAvailable = storage.extractEnergy(maxExtract, true);
int energyTransferred = ((IEnergyReceiver) tile)
.receiveEnergy(ForgeDirection.getOrientation(i).getOpposite(), maxAvailable, false);
storage.extractEnergy(energyTransferred, false);
}
}
}
}
public void updateConnections() {
if (this.worldObj.getTileEntity(xCoord, yCoord + 1, zCoord) instanceof IEnergyConnection)
connections[0] = ForgeDirection.UP;
else
connections[0] = null;
if (this.worldObj.getTileEntity(xCoord, yCoord - 1, zCoord) instanceof IEnergyConnection)
connections[1] = ForgeDirection.DOWN;
else
connections[1] = null;
if (this.worldObj.getTileEntity(xCoord, yCoord, zCoord - 1) instanceof IEnergyConnection)
connections[2] = ForgeDirection.NORTH;
else
connections[2] = null;
if (this.worldObj.getTileEntity(xCoord, yCoord, zCoord + 1) instanceof IEnergyConnection)
connections[3] = ForgeDirection.SOUTH;
else
connections[3] = null;
if (this.worldObj.getTileEntity(xCoord + 1, yCoord, zCoord) instanceof IEnergyConnection)
connections[4] = ForgeDirection.EAST;
else
connections[4] = null;
if (this.worldObj.getTileEntity(xCoord - 1, yCoord, zCoord) instanceof IEnergyConnection)
connections[5] = ForgeDirection.WEST;
else
connections[5] = null;
}
public boolean onlyOneOpposite(ForgeDirection[] directions) {
ForgeDirection mainDirection = null;
boolean isOpposite = false;
for (int i = 0; i < directions.length; i++) {
if (mainDirection == null && directions[i] != null)
mainDirection = directions[i];
if (directions[i] != null && mainDirection != directions[i]) {
if (!isOpposite(mainDirection, directions[i]))
return false;
else
isOpposite = true;
}
}
return isOpposite;
}
public boolean isOpposite(ForgeDirection firstDirection, ForgeDirection secondDirection) {
if ((firstDirection.equals(ForgeDirection.NORTH) && secondDirection.equals(ForgeDirection.SOUTH))
|| firstDirection.equals(ForgeDirection.SOUTH) && secondDirection.equals(ForgeDirection.NORTH))
return true;
if ((firstDirection.equals(ForgeDirection.EAST) && secondDirection.equals(ForgeDirection.WEST))
|| firstDirection.equals(ForgeDirection.WEST) && secondDirection.equals(ForgeDirection.EAST))
return true;
if ((firstDirection.equals(ForgeDirection.UP) && secondDirection.equals(ForgeDirection.DOWN))
|| firstDirection.equals(ForgeDirection.DOWN) && secondDirection.equals(ForgeDirection.UP))
return true;
return false;
}
@Override
public boolean canConnectEnergy(ForgeDirection from) {
return true;
}
@Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
return this.storage.receiveEnergy(Math.min(output, maxReceive), simulate);
}
@Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
return storage.extractEnergy(storage.getMaxExtract(), simulate);
}
@Override
public int getEnergyStored(ForgeDirection from) {
return storage.getEnergyStored();
}
@Override
public int getMaxEnergyStored(ForgeDirection from) {
return storage.getMaxEnergyStored();
}
}