Search in sources :

Example 16 with IConduitBundle

use of crazypants.enderio.base.conduit.IConduitBundle in project EnderIO by SleepyTrousers.

the class AbstractItemConduit method onItemUse.

@Override
@Nonnull
public EnumActionResult onItemUse(@Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumHand hand, @Nonnull EnumFacing side, float hitX, float hitY, float hitZ) {
    ItemStack held = player.getHeldItem(hand);
    BlockPos placeAt = canPlaceItem(held, ConduitRegistry.getConduitModObjectNN().getBlockNN().getDefaultState(), player, world, pos, side);
    if (placeAt != null) {
        if (!world.isRemote) {
            if (world.setBlockState(placeAt, ConduitRegistry.getConduitModObjectNN().getBlockNN().getDefaultState(), 1)) {
                TileEntity te = world.getTileEntity(placeAt);
                if (te instanceof IConduitBundle) {
                    IConduitBundle bundle = (IConduitBundle) te;
                    bundle.addConduit(createConduit(held, player));
                    ConduitUtil.playBreakSound(SoundType.METAL, world, placeAt);
                }
            }
        }
        if (!player.capabilities.isCreativeMode) {
            held.shrink(1);
        }
        return EnumActionResult.SUCCESS;
    } else {
        BlockPos place = pos.offset(side);
        if (world.getBlockState(place).getBlock() == ConduitRegistry.getConduitModObjectNN().getBlock()) {
            IConduitBundle bundle = (IConduitBundle) world.getTileEntity(place);
            if (bundle == null) {
                return EnumActionResult.PASS;
            }
            if (!bundle.hasType(getBaseConduitType())) {
                if (!world.isRemote) {
                    IServerConduit con = createConduit(held, player);
                    if (con == null) {
                        return EnumActionResult.PASS;
                    }
                    bundle.addConduit(con);
                    ConduitUtil.playBreakSound(SoundType.METAL, world, place);
                    if (!player.capabilities.isCreativeMode) {
                        held.shrink(1);
                    }
                }
                return EnumActionResult.SUCCESS;
            }
        }
    }
    return EnumActionResult.PASS;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) IServerConduit(crazypants.enderio.base.conduit.IServerConduit) BlockPos(net.minecraft.util.math.BlockPos) IConduitBundle(crazypants.enderio.base.conduit.IConduitBundle) ItemStack(net.minecraft.item.ItemStack) Nonnull(javax.annotation.Nonnull)

Example 17 with IConduitBundle

use of crazypants.enderio.base.conduit.IConduitBundle in project EnderIO by SleepyTrousers.

the class AbstractItemConduit method onItemUseFirst.

@Override
@Nonnull
public EnumActionResult onItemUseFirst(@Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, float hitX, float hitY, float hitZ, @Nonnull EnumHand hand) {
    ItemStack held = player.getHeldItem(hand);
    // Conduit replacement
    if (player.isSneaking()) {
        return EnumActionResult.PASS;
    }
    TileEntity te = world.getTileEntity(pos);
    if (te == null || !(te instanceof IConduitBundle)) {
        return EnumActionResult.PASS;
    }
    IConduitBundle bundle = (IConduitBundle) te;
    IConduit existingConduit = bundle.getConduit(getBaseConduitType());
    if (existingConduit == null) {
        return EnumActionResult.PASS;
    }
    ItemStack existingConduitAsItemStack = existingConduit.createItem();
    if (!ItemUtil.areStacksEqual(existingConduitAsItemStack, held)) {
        if (!world.isRemote) {
            IServerConduit newConduit = createConduit(held, player);
            if (newConduit == null) {
                return EnumActionResult.PASS;
            }
            bundle.removeConduit((IServerConduit) existingConduit);
            bundle.addConduit(newConduit);
            if (!player.capabilities.isCreativeMode) {
                held.shrink(1);
                for (ItemStack drop : existingConduit.getDrops()) {
                    if (!player.inventory.addItemStackToInventory(drop)) {
                        ItemUtil.spawnItemInWorldWithRandomMotion(world, drop, pos, hitX, hitY, hitZ, 1.1f);
                    }
                }
                player.inventoryContainer.detectAndSendChanges();
            }
            return EnumActionResult.FAIL;
        } else {
            player.swingArm(hand);
        }
    }
    return EnumActionResult.PASS;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) IServerConduit(crazypants.enderio.base.conduit.IServerConduit) IConduitBundle(crazypants.enderio.base.conduit.IConduitBundle) IConduit(crazypants.enderio.base.conduit.IConduit) ItemStack(net.minecraft.item.ItemStack) Nonnull(javax.annotation.Nonnull)

Aggregations

IConduitBundle (crazypants.enderio.base.conduit.IConduitBundle)17 Nonnull (javax.annotation.Nonnull)8 TileEntity (net.minecraft.tileentity.TileEntity)7 ItemStack (net.minecraft.item.ItemStack)6 RaytraceResult (crazypants.enderio.base.conduit.RaytraceResult)4 CollidableComponent (crazypants.enderio.base.conduit.geom.CollidableComponent)4 BlockPos (net.minecraft.util.math.BlockPos)4 ArrayList (java.util.ArrayList)3 World (net.minecraft.world.World)3 NNList (com.enderio.core.common.util.NNList)2 IConduit (crazypants.enderio.base.conduit.IConduit)2 IServerConduit (crazypants.enderio.base.conduit.IServerConduit)2 BoundingBox (com.enderio.core.client.render.BoundingBox)1 ConduitDisplayMode (crazypants.enderio.base.conduit.ConduitDisplayMode)1 IClientConduit (crazypants.enderio.base.conduit.IClientConduit)1 IConduitRenderer (crazypants.enderio.base.conduit.IConduitRenderer)1 ConduitConnectorType (crazypants.enderio.base.conduit.geom.ConduitConnectorType)1 IoMode (crazypants.enderio.base.machine.modes.IoMode)1 IPowerInterface (crazypants.enderio.base.power.IPowerInterface)1 TileConduitBundle (crazypants.enderio.conduits.conduit.TileConduitBundle)1