package universalelectricity.prefab.tile; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.ForgeDirection; import universalelectricity.core.block.IConductor; import universalelectricity.core.block.IConnector; import universalelectricity.core.block.INetworkProvider; import universalelectricity.core.electricity.NetworkLoader; import universalelectricity.core.grid.IElectricityNetwork; import universalelectricity.core.vector.Vector3; import universalelectricity.core.vector.VectorHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** * This tile entity pre-fabricated for all conductors. * * @author Calclavia * */ public abstract class TileEntityConductor extends TileEntityAdvanced implements IConductor { private IElectricityNetwork network; public TileEntity[] adjacentConnections = null; @Override public void invalidate() { if (!this.worldObj.isRemote) { this.getNetwork().split(this); } super.invalidate(); } @Override public boolean canUpdate() { return false; } @Override public IElectricityNetwork getNetwork() { if (this.network == null) { this.setNetwork(NetworkLoader.getNewNetwork(this)); } return this.network; } @Override public void setNetwork(IElectricityNetwork network) { this.network = network; } @Override public void refresh() { if (!this.worldObj.isRemote) { this.adjacentConnections = null; for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { TileEntity tileEntity = VectorHelper.getConnectorFromSide(this.worldObj, new Vector3(this), side); if (tileEntity != null) { if (tileEntity.getClass() == this.getClass() && tileEntity instanceof INetworkProvider) { this.getNetwork().merge(((INetworkProvider) tileEntity).getNetwork()); } } } this.getNetwork().refresh(); } } @Override public TileEntity[] getAdjacentConnections() { /** * Cache the adjacentConnections. */ if (this.adjacentConnections == null) { this.adjacentConnections = new TileEntity[6]; for (byte i = 0; i < 6; i++) { ForgeDirection side = ForgeDirection.getOrientation(i); TileEntity tileEntity = VectorHelper.getConnectorFromSide(this.worldObj, new Vector3(this), side); if (tileEntity instanceof IConnector) { if (((IConnector) tileEntity).canConnect(side.getOpposite())) { this.adjacentConnections[i] = tileEntity; } } } } return this.adjacentConnections; } @Override public boolean canConnect(ForgeDirection direction) { return true; } @Override @SideOnly(Side.CLIENT) public AxisAlignedBB getRenderBoundingBox() { return AxisAlignedBB.getAABBPool().getAABB(this.xCoord, this.yCoord, this.zCoord, this.xCoord + 1, this.yCoord + 1, this.zCoord + 1); } }