use of buildcraft.transport.wire.EnumWireBetween in project BuildCraft by BuildCraft.
the class BlockPipeHolder method getSelectedBoundingBox.
@Override
@SideOnly(Side.CLIENT)
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World world, BlockPos pos) {
TilePipeHolder tile = getPipe(world, pos, false);
if (tile == null) {
return FULL_BLOCK_AABB;
}
RayTraceResult trace = Minecraft.getMinecraft().objectMouseOver;
if (trace == null || trace.subHit < 0 || !pos.equals(trace.getBlockPos())) {
// Perhaps we aren't the object the mouse is over
return FULL_BLOCK_AABB;
}
int part = trace.subHit;
AxisAlignedBB aabb = FULL_BLOCK_AABB;
if (part == 0) {
aabb = BOX_CENTER;
} else if (part < 1 + 6) {
aabb = BOX_FACES[part - 1];
Pipe pipe = tile.getPipe();
if (pipe != null) {
EnumFacing face = EnumFacing.VALUES[part - 1];
float conSize = pipe.getConnectedDist(face);
if (conSize > 0 && conSize != 0.25f) {
Vec3d center = VecUtil.offset(new Vec3d(0.5, 0.5, 0.5), face, 0.25 + (conSize / 2));
Vec3d radius = new Vec3d(0.25, 0.25, 0.25);
radius = VecUtil.replaceValue(radius, face.getAxis(), conSize / 2);
Vec3d min = center.subtract(radius);
Vec3d max = center.add(radius);
aabb = BoundingBoxUtil.makeFrom(min, max);
}
}
} else if (part < 1 + 6 + 6) {
EnumFacing side = EnumFacing.VALUES[part - 1 - 6];
PipePluggable pluggable = tile.getPluggable(side);
if (pluggable != null) {
aabb = pluggable.getBoundingBox();
}
} else if (part < 1 + 6 + 6 + 8) {
EnumWirePart wirePart = EnumWirePart.VALUES[part - 1 - 6 - 6];
aabb = wirePart.boundingBox;
} else if (part < 1 + 6 + 6 + 6 + 8 + 36) {
EnumWireBetween wireBetween = EnumWireBetween.VALUES[part - 1 - 6 - 6 - 8];
aabb = wireBetween.boundingBox;
}
if (part >= 1 + 6 + 6) {
return aabb.offset(pos);
} else {
return (aabb == FULL_BLOCK_AABB ? aabb : aabb.grow(1 / 32.0)).offset(pos);
}
}
Aggregations