mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
145 lines
4.3 KiB
Java
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();
|
|
}
|
|
|
|
}
|