Search in sources :

Example 11 with TilePipeHolder

use of buildcraft.transport.tile.TilePipeHolder in project BuildCraft by BuildCraft.

the class BlockPipeHolder method getPickBlock.

@Override
public ItemStack getPickBlock(IBlockState state, RayTraceResult target, World world, BlockPos pos, EntityPlayer player) {
    TilePipeHolder tile = getPipe(world, pos, false);
    if (tile == null || target == null) {
        return ItemStack.EMPTY;
    }
    if (target.subHit <= 6) {
        Pipe pipe = tile.getPipe();
        if (pipe != null) {
            PipeDefinition def = pipe.getDefinition();
            Item item = (Item) PipeApi.pipeRegistry.getItemForPipe(def);
            if (item != null) {
                int meta = pipe.getColour() == null ? 0 : pipe.getColour().getMetadata() + 1;
                return new ItemStack(item, 1, meta);
            }
        }
    } else if (target.subHit <= 12) {
        int pluggableHit = target.subHit - 7;
        EnumFacing face = EnumFacing.VALUES[pluggableHit];
        PipePluggable plug = tile.getPluggable(face);
        if (plug != null) {
            return plug.getPickStack();
        }
    } else {
        EnumWirePart part = null;
        EnumWireBetween between = null;
        if (target.subHit > 6) {
            part = getWirePartHit(target);
            between = getWireBetweenHit(target);
        }
        if (part != null && tile.wireManager.getColorOfPart(part) != null) {
            return new ItemStack(BCTransportItems.wire, 1, tile.wireManager.getColorOfPart(part).getMetadata());
        } else if (between != null && tile.wireManager.getColorOfPart(between.parts[0]) != null) {
            return new ItemStack(BCTransportItems.wire, 1, tile.wireManager.getColorOfPart(between.parts[0]).getMetadata());
        }
    }
    return ItemStack.EMPTY;
}
Also used : TilePipeHolder(buildcraft.transport.tile.TilePipeHolder) Item(net.minecraft.item.Item) EnumWirePart(buildcraft.api.transport.EnumWirePart) EnumFacing(net.minecraft.util.EnumFacing) PipePluggable(buildcraft.api.transport.pluggable.PipePluggable) Pipe(buildcraft.transport.pipe.Pipe) PipeDefinition(buildcraft.api.transport.pipe.PipeDefinition) ItemStack(net.minecraft.item.ItemStack) EnumWireBetween(buildcraft.transport.wire.EnumWireBetween)

Example 12 with TilePipeHolder

use of buildcraft.transport.tile.TilePipeHolder 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)

Example 13 with TilePipeHolder

use of buildcraft.transport.tile.TilePipeHolder in project BuildCraft by BuildCraft.

the class BlockPipeHolder method attemptPaint.

// paint
@Override
public EnumActionResult attemptPaint(World world, BlockPos pos, IBlockState state, Vec3d hitPos, EnumFacing hitSide, EnumDyeColor paintColour) {
    TilePipeHolder tile = getPipe(world, pos, true);
    if (tile == null) {
        return EnumActionResult.PASS;
    }
    Pipe pipe = tile.getPipe();
    if (pipe == null) {
        return EnumActionResult.FAIL;
    }
    if (pipe.getColour() == paintColour || !pipe.definition.canBeColoured) {
        return EnumActionResult.FAIL;
    } else {
        pipe.setColour(paintColour);
        return EnumActionResult.SUCCESS;
    }
}
Also used : TilePipeHolder(buildcraft.transport.tile.TilePipeHolder) Pipe(buildcraft.transport.pipe.Pipe)

Example 14 with TilePipeHolder

use of buildcraft.transport.tile.TilePipeHolder in project BuildCraft by BuildCraft.

the class BlockPipeHolder method onEntityCollidedWithBlock.

@Override
public void onEntityCollidedWithBlock(World world, BlockPos pos, IBlockState state, Entity entity) {
    TilePipeHolder tile = getPipe(world, pos, false);
    if (tile == null) {
        return;
    }
    Pipe pipe = tile.getPipe();
    if (pipe != null) {
        pipe.getBehaviour().onEntityCollide(entity);
    }
}
Also used : TilePipeHolder(buildcraft.transport.tile.TilePipeHolder) Pipe(buildcraft.transport.pipe.Pipe)

Aggregations

TilePipeHolder (buildcraft.transport.tile.TilePipeHolder)14 PipePluggable (buildcraft.api.transport.pluggable.PipePluggable)10 Pipe (buildcraft.transport.pipe.Pipe)8 EnumFacing (net.minecraft.util.EnumFacing)8 EnumWirePart (buildcraft.api.transport.EnumWirePart)6 EnumWireBetween (buildcraft.transport.wire.EnumWireBetween)5 ItemStack (net.minecraft.item.ItemStack)4 RayTraceResult (net.minecraft.util.math.RayTraceResult)4 Vec3d (net.minecraft.util.math.Vec3d)4 AxisAlignedBB (net.minecraft.util.math.AxisAlignedBB)3 Item (net.minecraft.item.Item)2 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)2 EnumPipePart (buildcraft.api.core.EnumPipePart)1 IItemPluggable (buildcraft.api.transport.IItemPluggable)1 WireNode (buildcraft.api.transport.WireNode)1 PipeDefinition (buildcraft.api.transport.pipe.PipeDefinition)1 ItemWire (buildcraft.transport.item.ItemWire)1 WeakReference (java.lang.ref.WeakReference)1 Nullable (javax.annotation.Nullable)1 EnumDyeColor (net.minecraft.item.EnumDyeColor)1