59 lines
2.0 KiB
Java
59 lines
2.0 KiB
Java
package storagecraft.tile;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
import net.minecraft.util.Vec3;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
import storagecraft.block.BlockCable;
|
|
|
|
public class TileCable extends TileSC {
|
|
public static boolean isCable(World world, int x, int y, int z, ForgeDirection dir) {
|
|
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ);
|
|
|
|
return block instanceof BlockCable;
|
|
}
|
|
|
|
public boolean hasConnection(ForgeDirection dir) {
|
|
if (!isCable(worldObj, xCoord, yCoord, zCoord, dir)) {
|
|
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
|
|
|
|
return tile instanceof IMachine || tile instanceof TileController;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public List<IMachine> findMachines(TileController controller) {
|
|
return findMachines(new ArrayList(), controller);
|
|
}
|
|
|
|
private List<IMachine> findMachines(List<Vec3> visited, TileController controller) {
|
|
List<IMachine> machines = new ArrayList<IMachine>();
|
|
|
|
for (Vec3 visitedCable : visited) {
|
|
if (visitedCable.xCoord == xCoord && visitedCable.yCoord == yCoord && visitedCable.zCoord == zCoord) {
|
|
return machines;
|
|
}
|
|
}
|
|
|
|
visited.add(Vec3.createVectorHelper(xCoord, yCoord, zCoord));
|
|
|
|
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
|
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ);
|
|
|
|
if (tile instanceof IMachine) {
|
|
machines.add((IMachine) tile);
|
|
} else if (tile instanceof TileCable) {
|
|
machines.addAll(((TileCable) tile).findMachines(visited, controller));
|
|
} else if (tile instanceof TileController && (tile.xCoord != controller.xCoord || tile.yCoord != controller.yCoord || tile.zCoord != controller.zCoord)) {
|
|
worldObj.createExplosion(null, tile.xCoord, tile.yCoord, tile.zCoord, 4.5f, true);
|
|
}
|
|
}
|
|
|
|
return machines;
|
|
}
|
|
}
|