Search in sources :

Example 1 with ITilePartHolder

use of uk.co.qmunity.lib.part.ITilePartHolder in project BluePower by Qmunity.

the class ItemSilkyScrewdriver method onItemUseFirst.

@Override
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) {
    Block block = world.getBlock(x, y, z);
    TileEntity te = world.getTileEntity(x, y, z);
    ITilePartHolder h = MultipartCompatibility.getPartHolder(world, x, y, z);
    if (h != null) {
        QMovingObjectPosition mop = h.rayTrace(RayTracer.instance().getStartVector(player), RayTracer.instance().getEndVector(player));
        if (mop != null) {
            IPart p = mop.getPart();
            if (p instanceof ISilkyRemovable && !world.isRemote) {
                if (p instanceof IAdvancedSilkyRemovable && !((IAdvancedSilkyRemovable) p).preSilkyRemoval(world, x, y, z))
                    return false;
                NBTTagCompound tag = new NBTTagCompound();
                boolean hideTooltip = false;
                if (p instanceof IAdvancedSilkyRemovable) {
                    hideTooltip = ((IAdvancedSilkyRemovable) p).writeSilkyData(world, x, y, z, tag);
                } else {
                    p.writeToNBT(tag);
                }
                ItemStack droppedStack = p.getItem();
                NBTTagCompound stackTag = droppedStack.getTagCompound();
                if (stackTag == null) {
                    stackTag = new NBTTagCompound();
                    droppedStack.setTagCompound(stackTag);
                }
                stackTag.setTag("tileData", tag);
                stackTag.setBoolean("hideSilkyTooltip", hideTooltip);
                world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, droppedStack));
                h.removePart(p);
                if (p instanceof IAdvancedSilkyRemovable)
                    ((IAdvancedSilkyRemovable) p).postSilkyRemoval(world, x, y, z);
                stack.damageItem(1, player);
                return true;
            }
        }
        return false;
    }
    if (block instanceof ISilkyRemovable && !world.isRemote) {
        if (block instanceof IAdvancedSilkyRemovable && !((IAdvancedSilkyRemovable) block).preSilkyRemoval(world, x, y, z))
            return false;
        if (te == null)
            throw new IllegalStateException("Block doesn't have a TileEntity?! Implementers of ISilkyRemovable should have one. Offender: " + block.getUnlocalizedName());
        NBTTagCompound tag = new NBTTagCompound();
        te.writeToNBT(tag);
        int metadata = world.getBlockMetadata(x, y, z);
        Item item = block.getItemDropped(metadata, itemRand, 0);
        if (item == null)
            throw new NullPointerException("Block returns null for getItemDropped(meta, rand, fortune)! Offender: " + block.getUnlocalizedName());
        ItemStack droppedStack = new ItemStack(item, 1, block.damageDropped(metadata));
        NBTTagCompound stackTag = droppedStack.getTagCompound();
        if (stackTag == null) {
            stackTag = new NBTTagCompound();
            droppedStack.setTagCompound(stackTag);
        }
        stackTag.setTag("tileData", tag);
        world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, droppedStack));
        world.setBlockToAir(x, y, z);
        if (block instanceof IAdvancedSilkyRemovable)
            ((IAdvancedSilkyRemovable) block).postSilkyRemoval(world, x, y, z);
        stack.damageItem(1, player);
        return true;
    }
    return false;
}
Also used : IAdvancedSilkyRemovable(com.bluepowermod.api.block.IAdvancedSilkyRemovable) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) QMovingObjectPosition(uk.co.qmunity.lib.raytrace.QMovingObjectPosition) TileEntity(net.minecraft.tileentity.TileEntity) ITilePartHolder(uk.co.qmunity.lib.part.ITilePartHolder) EntityItem(net.minecraft.entity.item.EntityItem) Item(net.minecraft.item.Item) IPart(uk.co.qmunity.lib.part.IPart) ISilkyRemovable(com.bluepowermod.api.block.ISilkyRemovable) Block(net.minecraft.block.Block) ItemStack(net.minecraft.item.ItemStack) EntityItem(net.minecraft.entity.item.EntityItem)

Example 2 with ITilePartHolder

use of uk.co.qmunity.lib.part.ITilePartHolder in project BluePower by Qmunity.

the class MessageWirelessNewFreq method handleServerSide.

@Override
public void handleServerSide(EntityPlayer player) {
    Frequency freq = (Frequency) WirelessManager.COMMON_INSTANCE.registerFrequency(player, name, acc, bundled);
    ITilePartHolder h = MultipartCompatibility.getPartHolder(player.worldObj, x, y, z);
    if (h == null)
        return;
    IWirelessGate p = null;
    for (IPart pa : h.getParts()) if (pa instanceof IWirelessGate && ((IWirelessGate) pa).getFace() == face)
        p = (IWirelessGate) pa;
    if (p == null)
        return;
    p.setFrequency(freq);
    BPNetworkHandler.INSTANCE.sendTo(new MessageWirelessFrequencySync(player), (EntityPlayerMP) player);
}
Also used : ITilePartHolder(uk.co.qmunity.lib.part.ITilePartHolder) IPart(uk.co.qmunity.lib.part.IPart) IWirelessGate(com.bluepowermod.part.gate.wireless.IWirelessGate) Frequency(com.bluepowermod.part.gate.wireless.Frequency)

Aggregations

IPart (uk.co.qmunity.lib.part.IPart)2 ITilePartHolder (uk.co.qmunity.lib.part.ITilePartHolder)2 IAdvancedSilkyRemovable (com.bluepowermod.api.block.IAdvancedSilkyRemovable)1 ISilkyRemovable (com.bluepowermod.api.block.ISilkyRemovable)1 Frequency (com.bluepowermod.part.gate.wireless.Frequency)1 IWirelessGate (com.bluepowermod.part.gate.wireless.IWirelessGate)1 Block (net.minecraft.block.Block)1 EntityItem (net.minecraft.entity.item.EntityItem)1 Item (net.minecraft.item.Item)1 ItemStack (net.minecraft.item.ItemStack)1 NBTTagCompound (net.minecraft.nbt.NBTTagCompound)1 TileEntity (net.minecraft.tileentity.TileEntity)1 QMovingObjectPosition (uk.co.qmunity.lib.raytrace.QMovingObjectPosition)1