Search in sources :

Example 6 with EnumWireBetween

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);
    }
}
Also used : AxisAlignedBB(net.minecraft.util.math.AxisAlignedBB) TilePipeHolder(buildcraft.transport.tile.TilePipeHolder) EnumWirePart(buildcraft.api.transport.EnumWirePart) EnumFacing(net.minecraft.util.EnumFacing) RayTraceResult(net.minecraft.util.math.RayTraceResult) PipePluggable(buildcraft.api.transport.pluggable.PipePluggable) Pipe(buildcraft.transport.pipe.Pipe) Vec3d(net.minecraft.util.math.Vec3d) EnumWireBetween(buildcraft.transport.wire.EnumWireBetween) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Aggregations

EnumWirePart (buildcraft.api.transport.EnumWirePart)6 EnumWireBetween (buildcraft.transport.wire.EnumWireBetween)6 TilePipeHolder (buildcraft.transport.tile.TilePipeHolder)5 EnumFacing (net.minecraft.util.EnumFacing)5 PipePluggable (buildcraft.api.transport.pluggable.PipePluggable)4 Pipe (buildcraft.transport.pipe.Pipe)4 AxisAlignedBB (net.minecraft.util.math.AxisAlignedBB)3 RayTraceResult (net.minecraft.util.math.RayTraceResult)3 Vec3d (net.minecraft.util.math.Vec3d)3 ItemStack (net.minecraft.item.ItemStack)2 PipeDefinition (buildcraft.api.transport.pipe.PipeDefinition)1 EnumMap (java.util.EnumMap)1 Map (java.util.Map)1 Nullable (javax.annotation.Nullable)1 EnumDyeColor (net.minecraft.item.EnumDyeColor)1 Item (net.minecraft.item.Item)1 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)1