Package micdoodle8.mods.galacticraft.core.blocks

Source Code of micdoodle8.mods.galacticraft.core.blocks.BlockAirLockFrame

package micdoodle8.mods.galacticraft.core.blocks;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import micdoodle8.mods.galacticraft.api.vector.Vector3;
import micdoodle8.mods.galacticraft.core.GalacticraftCore;
import micdoodle8.mods.galacticraft.core.items.ItemBlockDesc;
import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLock;
import micdoodle8.mods.galacticraft.core.tile.TileEntityAirLockController;
import micdoodle8.mods.galacticraft.core.util.GCCoreUtil;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

import java.util.List;

public class BlockAirLockFrame extends BlockAdvancedTile implements ItemBlockDesc.IBlockShiftDesc
{
    @SideOnly(Side.CLIENT)
    private IIcon[] airLockIcons;

    public static int METADATA_AIR_LOCK_FRAME = 0;
    public static int METADATA_AIR_LOCK_CONTROLLER = 1;

    public BlockAirLockFrame(String assetName)
    {
        super(Material.rock);
        this.setHardness(1.0F);
        this.setStepSound(Block.soundTypeMetal);
        this.setBlockTextureName(GalacticraftCore.TEXTURE_PREFIX + assetName);
        this.setBlockName(assetName);
    }

    @SuppressWarnings({ "unchecked", "rawtypes" })
    @SideOnly(Side.CLIENT)
    @Override
    public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List)
    {
        par3List.add(new ItemStack(par1, 1, BlockAirLockFrame.METADATA_AIR_LOCK_FRAME));
        par3List.add(new ItemStack(par1, 1, BlockAirLockFrame.METADATA_AIR_LOCK_CONTROLLER));
    }

    @Override
    public CreativeTabs getCreativeTabToDisplayOn()
    {
        return GalacticraftCore.galacticraftBlocksTab;
    }

    @Override
    public boolean canPlaceBlockAt(World par1World, int par2, int par3, int par4)
    {
        return true;
    }

    @Override
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLiving, ItemStack itemStack)
    {
        super.onBlockPlacedBy(world, x, y, z, entityLiving, itemStack);

        TileEntity tile = world.getTileEntity(x, y, z);

        if (tile instanceof TileEntityAirLockController && entityLiving instanceof EntityPlayer)
        {
            ((TileEntityAirLockController) tile).ownerName = ((EntityPlayer) entityLiving).getGameProfile().getName();
        }
    }

    @Override
    @SideOnly(Side.CLIENT)
    public void registerBlockIcons(IIconRegister par1IconRegister)
    {
        this.airLockIcons = new IIcon[8];
        this.airLockIcons[0] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_off");
        this.airLockIcons[1] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_on_1");
        this.airLockIcons[2] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_on_2");
        this.airLockIcons[3] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_on_3");
        this.airLockIcons[4] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_on_4");
        this.airLockIcons[5] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_on_5");
        this.airLockIcons[6] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_control_on");
        this.airLockIcons[7] = par1IconRegister.registerIcon(GalacticraftCore.TEXTURE_PREFIX + "airlock_control_off");
    }

    @Override
    @SideOnly(Side.CLIENT)
    public IIcon getIcon(int par1, int par2)
    {
        if (par2 >= BlockAirLockFrame.METADATA_AIR_LOCK_CONTROLLER)
        {
            if (par1 == ForgeDirection.UP.ordinal() || par1 == ForgeDirection.DOWN.ordinal())
            {
                return this.airLockIcons[0];
            }

            return this.airLockIcons[7];
        }
        else
        {
            return this.airLockIcons[0];
        }
    }

    @Override
    public IIcon getIcon(IBlockAccess world, int par2, int par3, int par4, int side)
    {
        if (world.getBlockMetadata(par2, par3, par4) >= BlockAirLockFrame.METADATA_AIR_LOCK_CONTROLLER)
        {
            if (side == ForgeDirection.UP.ordinal() || side == ForgeDirection.DOWN.ordinal())
            {
                return this.airLockIcons[0];
            }

            TileEntity tile = world.getTileEntity(par2, par3, par4);

            if (tile instanceof TileEntityAirLockController)
            {
                TileEntityAirLockController controller = (TileEntityAirLockController) tile;

                if (controller.active)
                {
                    return this.airLockIcons[6];
                }
                else
                {
                    return this.airLockIcons[7];
                }
            }
            else
            {
                return this.airLockIcons[6];
            }
        }
        else
        {
            for (final ForgeDirection orientation : ForgeDirection.values())
            {
                if (orientation != ForgeDirection.UNKNOWN)
                {
                    final Vector3 vector = new Vector3(par2, par3, par4);
                    Vector3 blockVec = this.modifyPositionFromSide(vector.clone(), orientation, 1);
                    Block connection = blockVec.getBlock(world);

                    if (connection != null && connection.equals(GCBlocks.airLockSeal))
                    {
                        if (orientation.offsetY == -1)
                        {
                            if (side == 0)
                            {
                                return this.airLockIcons[1];
                            }
                            else if (side == 1)
                            {
                                return this.airLockIcons[0];
                            }
                            else
                            {
                                return this.airLockIcons[2];
                            }
                        }
                        else if (orientation.offsetY == 1)
                        {
                            if (side == 0)
                            {
                                return this.airLockIcons[0];
                            }
                            else if (side == 1)
                            {
                                return this.airLockIcons[1];
                            }
                            else
                            {
                                return this.airLockIcons[3];
                            }
                        }
                        else if (orientation.ordinal() == side)
                        {
                            if (side == 0)
                            {
                                return this.airLockIcons[0];
                            }
                            else if (side == 1)
                            {
                                return this.airLockIcons[1];
                            }
                            else
                            {
                                return this.airLockIcons[3];
                            }
                        }
                        else if (orientation.getOpposite().ordinal() == side)
                        {
                            return this.airLockIcons[0];
                        }

                        blockVec = vector.clone().translate(new Vector3(orientation.offsetX, orientation.offsetY, orientation.offsetZ));
                        connection = blockVec.getBlock(world);

                        if (connection != null && connection.equals(GCBlocks.airLockSeal))
                        {
                            if (orientation.offsetX == 1)
                            {
                                if (side == 0)
                                {
                                    return this.airLockIcons[4];
                                }
                                else if (side == 1)
                                {
                                    return this.airLockIcons[4];
                                }
                                else if (side == 3)
                                {
                                    return this.airLockIcons[4];
                                }
                                else if (side == 2)
                                {
                                    return this.airLockIcons[5];
                                }
                            }
                            else if (orientation.offsetX == -1)
                            {
                                if (side == 0)
                                {
                                    return this.airLockIcons[5];
                                }
                                else if (side == 1)
                                {
                                    return this.airLockIcons[5];
                                }
                                else if (side == 3)
                                {
                                    return this.airLockIcons[5];
                                }
                                else if (side == 2)
                                {
                                    return this.airLockIcons[4];
                                }
                            }
                            else if (orientation.offsetZ == 1)
                            {
                                if (side == 0)
                                {
                                    return this.airLockIcons[2];
                                }
                                else if (side == 1)
                                {
                                    return this.airLockIcons[2];
                                }
                                else if (side == 4)
                                {
                                    return this.airLockIcons[4];
                                }
                                else if (side == 5)
                                {
                                    return this.airLockIcons[5];
                                }
                            }
                            else if (orientation.offsetZ == -1)
                            {
                                if (side == 0)
                                {
                                    return this.airLockIcons[3];
                                }
                                else if (side == 1)
                                {
                                    return this.airLockIcons[3];
                                }
                                else if (side == 4)
                                {
                                    return this.airLockIcons[5];
                                }
                                else if (side == 5)
                                {
                                    return this.airLockIcons[4];
                                }
                            }
                        }
                    }
                }
            }
        }

        return this.airLockIcons[0];
    }

    public Vector3 modifyPositionFromSide(Vector3 vec, ForgeDirection side, double amount)
    {
        switch (side.ordinal())
        {
        case 0:
            vec.y -= amount;
            break;
        case 1:
            vec.y += amount;
            break;
        case 2:
            vec.z -= amount;
            break;
        case 3:
            vec.z += amount;
            break;
        case 4:
            vec.x -= amount;
            break;
        case 5:
            vec.x += amount;
            break;
        }
        return vec;
    }

    @Override
    public TileEntity createTileEntity(World world, int metadata)
    {
        if (metadata < BlockAirLockFrame.METADATA_AIR_LOCK_CONTROLLER)
        {
            return new TileEntityAirLock();
        }
        else
        {
            return new TileEntityAirLockController();
        }
    }

    @Override
    public boolean canConnectRedstone(IBlockAccess world, int x, int y, int z, int side)
    {
        return true;
    }

    @Override
    public boolean onMachineActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float hitX, float hitY, float hitZ)
    {
        int metadata = world.getBlockMetadata(x, y, z);
        TileEntity tile = world.getTileEntity(x, y, z);

        if (metadata >= BlockAirLockFrame.METADATA_AIR_LOCK_CONTROLLER && tile instanceof TileEntityAirLockController)
        {
            entityPlayer.openGui(GalacticraftCore.instance, -1, world, x, y, z);
            return true;
        }

        return false;
    }

    @Override
    public void breakBlock(World world, int x, int y, int z, Block block, int par6)
    {
        TileEntity tile = world.getTileEntity(x, y, z);

        if (tile instanceof TileEntityAirLockController)
        {
            ((TileEntityAirLockController) tile).unsealAirLock();
        }

        super.breakBlock(world, x, y, z, block, par6);
    }

    @Override
    public int damageDropped(int metadata)
    {
        if (metadata >= BlockAirLockFrame.METADATA_AIR_LOCK_CONTROLLER)
        {
            return BlockAirLockFrame.METADATA_AIR_LOCK_CONTROLLER;
        }
        else if (metadata >= BlockAirLockFrame.METADATA_AIR_LOCK_FRAME)
        {
            return BlockAirLockFrame.METADATA_AIR_LOCK_FRAME;
        }

        return 0;
    }

    @Override
    public String getShiftDescription(int meta)
    {
        return GCCoreUtil.translate(this.getUnlocalizedName() + ".description");
    }

    @Override
    public boolean showDescription(int meta)
    {
        return true;
    }
}
TOP

Related Classes of micdoodle8.mods.galacticraft.core.blocks.BlockAirLockFrame

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.