Search in sources :

Example 6 with Pipe

use of buildcraft.transport.pipe.Pipe in project BuildCraft by BuildCraft.

the class BlockPipeHolder method onBlockActivated.

@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
    TilePipeHolder tile = getPipe(world, pos, false);
    if (tile == null) {
        return false;
    }
    RayTraceResult trace = rayTrace(world, pos, player);
    if (trace == null) {
        return false;
    }
    EnumFacing realSide = getPartSideHit(trace);
    if (realSide == null) {
        realSide = side;
    }
    if (trace.subHit > 6 && trace.subHit <= 12) {
        PipePluggable existing = tile.getPluggable(realSide);
        if (existing != null) {
            return existing.onPluggableActivate(player, trace, hitX, hitY, hitZ);
        }
    }
    EnumPipePart part = trace.subHit == 0 ? EnumPipePart.CENTER : EnumPipePart.fromFacing(realSide);
    ItemStack held = player.getHeldItem(hand);
    Item item = held.isEmpty() ? null : held.getItem();
    PipePluggable existing = tile.getPluggable(realSide);
    if (item instanceof IItemPluggable && existing == null) {
        IItemPluggable itemPlug = (IItemPluggable) item;
        PipePluggable plug = itemPlug.onPlace(held, tile, realSide, player, hand);
        if (plug == null) {
            return false;
        } else {
            tile.replacePluggable(realSide, plug);
            if (!player.capabilities.isCreativeMode) {
                held.shrink(1);
            }
            return true;
        }
    }
    if (item instanceof ItemWire) {
        EnumWirePart wirePartHit = getWirePartHit(trace);
        EnumWirePart wirePart;
        TilePipeHolder attachTile = tile;
        if (wirePartHit != null) {
            WireNode node = new WireNode(pos, wirePartHit);
            node = node.offset(trace.sideHit);
            wirePart = node.part;
            if (!node.pos.equals(pos)) {
                attachTile = getPipe(world, node.pos, false);
            }
        } else {
            wirePart = EnumWirePart.get((trace.hitVec.x % 1 + 1) % 1 > 0.5, (trace.hitVec.y % 1 + 1) % 1 > 0.5, (trace.hitVec.z % 1 + 1) % 1 > 0.5);
        }
        if (wirePart != null && attachTile != null) {
            boolean attached = attachTile.getWireManager().addPart(wirePart, EnumDyeColor.byMetadata(held.getMetadata()));
            attachTile.scheduleNetworkUpdate(IPipeHolder.PipeMessageReceiver.WIRES);
            if (attached && !player.capabilities.isCreativeMode) {
                held.shrink(1);
            }
            if (attached) {
                return true;
            }
        }
    }
    Pipe pipe = tile.getPipe();
    if (pipe == null) {
        return false;
    }
    if (pipe.behaviour.onPipeActivate(player, trace, hitX, hitY, hitZ, part)) {
        return true;
    }
    if (pipe.flow.onFlowActivate(player, trace, hitX, hitY, hitZ, part)) {
        return true;
    }
    return false;
}
Also used : EnumFacing(net.minecraft.util.EnumFacing) IItemPluggable(buildcraft.api.transport.IItemPluggable) RayTraceResult(net.minecraft.util.math.RayTraceResult) PipePluggable(buildcraft.api.transport.pluggable.PipePluggable) Pipe(buildcraft.transport.pipe.Pipe) TilePipeHolder(buildcraft.transport.tile.TilePipeHolder) Item(net.minecraft.item.Item) ItemWire(buildcraft.transport.item.ItemWire) EnumWirePart(buildcraft.api.transport.EnumWirePart) WireNode(buildcraft.api.transport.WireNode) EnumPipePart(buildcraft.api.core.EnumPipePart) ItemStack(net.minecraft.item.ItemStack)

Example 7 with Pipe

use of buildcraft.transport.pipe.Pipe 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 8 with Pipe

use of buildcraft.transport.pipe.Pipe 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 9 with Pipe

use of buildcraft.transport.pipe.Pipe 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 10 with Pipe

use of buildcraft.transport.pipe.Pipe 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

Pipe (buildcraft.transport.pipe.Pipe)11 TilePipeHolder (buildcraft.transport.tile.TilePipeHolder)8 EnumFacing (net.minecraft.util.EnumFacing)8 PipePluggable (buildcraft.api.transport.pluggable.PipePluggable)6 EnumWirePart (buildcraft.api.transport.EnumWirePart)5 EnumWireBetween (buildcraft.transport.wire.EnumWireBetween)4 IFlowItems (buildcraft.api.transport.pipe.IFlowItems)3 IItemPipe (buildcraft.api.transport.pipe.IItemPipe)3 IPipe (buildcraft.api.transport.pipe.IPipe)3 Item (net.minecraft.item.Item)3 ItemStack (net.minecraft.item.ItemStack)3 AxisAlignedBB (net.minecraft.util.math.AxisAlignedBB)3 RayTraceResult (net.minecraft.util.math.RayTraceResult)3 Vec3d (net.minecraft.util.math.Vec3d)3 PipeDefinition (buildcraft.api.transport.pipe.PipeDefinition)2 EnumPipePart (buildcraft.api.core.EnumPipePart)1 InvalidInputDataException (buildcraft.api.core.InvalidInputDataException)1 IItemPluggable (buildcraft.api.transport.IItemPluggable)1 WireNode (buildcraft.api.transport.WireNode)1 ItemWire (buildcraft.transport.item.ItemWire)1