Package micdoodle8.mods.galacticraft.core.items

Source Code of micdoodle8.mods.galacticraft.core.items.ItemBlockEnclosed

package micdoodle8.mods.galacticraft.core.items;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed;
import micdoodle8.mods.galacticraft.core.blocks.BlockEnclosed.EnumEnclosedBlock;
import micdoodle8.mods.galacticraft.core.proxy.ClientProxyCore;
import micdoodle8.mods.galacticraft.core.util.CompatibilityManager;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;

import java.lang.reflect.Method;

public class ItemBlockEnclosed extends ItemBlockDesc
{
    public ItemBlockEnclosed(Block block)
    {
        super(block);
        this.setMaxDamage(0);
        this.setHasSubtypes(true);
    }

    @Override
    public String getUnlocalizedName(ItemStack par1ItemStack)
    {
        String name;

        switch (par1ItemStack.getItemDamage())
        {
        case 0:
            name = "null";
            break;
        case 1:
            name = "oxygenPipe";
            break;
        case 2:
            name = "copperCable";
            break;
        case 3:
            name = "goldCable";
            break;
        case 4:
            name = "hvCable";
            break;
        case 5:
            name = "glassFibreCable";
            break;
        case 6:
            name = "lvCable";
            break;
        case 13:
            name = "meCable";
            break;
        case 14:
            name = "aluminumWire";
            break;
        case 15:
            name = "aluminumWireHeavy";
            break;
        default:
            try
            {
                name = BlockEnclosed.getTypeFromMeta(par1ItemStack.getItemDamage()).getPipeClass();
            }
            catch (Exception e)
            {
                name = "null";
            }
            break;
        }

        return this.field_150939_a.getUnlocalizedName() + "." + name;
    }

    @Override
    public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, int i, int j, int k, int side, float par8, float par9, float par10)
    {
        int metadata = this.getMetadata(itemstack.getItemDamage());
        EnumEnclosedBlock type = BlockEnclosed.getTypeFromMeta(metadata);

        if (type != null && type.getPipeClass() != null)
        {
            Block block = world.getBlock(i, j, k);

            if (block == Blocks.snow)
            {
                side = 1;
            }
            else if (block != Blocks.vine && block != Blocks.tallgrass && block != Blocks.deadbush && !block.isReplaceable(world, i, j, k))
            {
                if (side == 0)
                {
                    j--;
                }
                if (side == 1)
                {
                    j++;
                }
                if (side == 2)
                {
                    k--;
                }
                if (side == 3)
                {
                    k++;
                }
                if (side == 4)
                {
                    i--;
                }
                if (side == 5)
                {
                    i++;
                }
            }

            if (itemstack.stackSize == 0)
            {
                return false;
            }

            if (!entityplayer.canPlayerEdit(i, j, k, side, itemstack))
            {
                return false;
            }
            else if (j == 255 && this.field_150939_a.getMaterial().isSolid())
            {
                return false;
            }
            else if (world.canPlaceEntityOnSide(block, i, j, k, false, side, entityplayer, itemstack))
            {
                int j1 = this.field_150939_a.onBlockPlaced(world, i, j, k, side, par8, par9, par10, metadata);
                block.onBlockPlacedBy(world, i, j, k, entityplayer, itemstack);

                if (placeBlockAt(itemstack, entityplayer, world, i, j, k, side, par8, par9, par10, j1))
                {
                    world.playSoundEffect(i + 0.5F, j + 0.5F, k + 0.5F, this.field_150939_a.stepSound.func_150496_b(), (this.field_150939_a.stepSound.getVolume() + 1.0F) / 2.0F, this.field_150939_a.stepSound.getPitch() * 0.8F);
                    --itemstack.stackSize;

                    if (metadata >= EnumEnclosedBlock.BC_ITEM_STONEPIPE.getMetadata() && metadata <= EnumEnclosedBlock.BC_POWER_GOLDPIPE.getMetadata())
                    {
                        if (CompatibilityManager.isBCraftLoaded())
                        {
                            try
                            {
                                //------
                                //This section makes these three calls to initialise the TileEntity:
                                //  Pipe pipe = BlockGenericPipe.createPipe(Item);
                                //  tilePipe.initialize(pipe);
                                //  tilePipe.sendUpdateToClient();

                                Class<?> clazzBC = Class.forName("buildcraft.BuildCraftTransport");
                                Class<?> clazzBlockPipe = Class.forName("buildcraft.transport.BlockGenericPipe");
                                Class<?> clazzTilePipe = Class.forName("buildcraft.transport.TileGenericPipe");
                                TileEntity tilePipe = world.getTileEntity(i, j, k);

                                String pipeName = EnumEnclosedBlock.values()[metadata].getPipeClass();
                                pipeName = pipeName.substring(0, 1).toLowerCase() + pipeName.substring(1);

                                Item pipeItem = (Item) clazzBC.getField(pipeName).get(null);
                                Method createPipe = null;
                                for (Method m : clazzBlockPipe.getDeclaredMethods())
                                {
                                    if (m.getName().equals("createPipe") && m.getParameterTypes().length == 1)
                                    {
                                        createPipe = m;
                                        break;
                                    }
                                }
                                Object pipe = createPipe.invoke(null, pipeItem);
                                Method initializePipe = null;
                                for (Method m : clazzTilePipe.getDeclaredMethods())
                                {
                                    if (m.getName().equals("initialize") && m.getParameterTypes().length == 1)
                                    {
                                        initializePipe = m;
                                        break;
                                    }
                                }
                                initializePipe.invoke(tilePipe, pipe);
                                clazzTilePipe.getMethod("sendUpdateToClient").invoke(tilePipe);
                                //------
                            }
                            catch (Exception e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                }

                return true;

            }
            else
            {
                return false;
            }
        }
        else
        {
            return super.onItemUse(itemstack, entityplayer, world, i, j, k, side, par8, par9, par10);
        }
    }

    @Override
    @SideOnly(Side.CLIENT)
    public EnumRarity getRarity(ItemStack par1ItemStack)
    {
        return ClientProxyCore.galacticraftItem;
    }

    @Override
    public int getMetadata(int damage)
    {
        return damage;
    }
}
TOP

Related Classes of micdoodle8.mods.galacticraft.core.items.ItemBlockEnclosed

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.