001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import java.util.List;
006    import java.util.Random;
007    
008    public class BlockEndPortal extends BlockContainer
009    {
010        /**
011         * true if the enderdragon has been killed - allows end portal blocks to be created in the end
012         */
013        public static boolean bossDefeated = false;
014    
015        protected BlockEndPortal(int par1, Material par2Material)
016        {
017            super(par1, 0, par2Material);
018            this.setLightValue(1.0F);
019        }
020    
021        /**
022         * Returns a new instance of a block's tile entity class. Called on placing the block.
023         */
024        public TileEntity createNewTileEntity(World par1World)
025        {
026            return new TileEntityEndPortal();
027        }
028    
029        /**
030         * Updates the blocks bounds based on its current state. Args: world, x, y, z
031         */
032        public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
033        {
034            float var5 = 0.0625F;
035            this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var5, 1.0F);
036        }
037    
038        @SideOnly(Side.CLIENT)
039    
040        /**
041         * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given
042         * coordinates.  Args: blockAccess, x, y, z, side
043         */
044        public boolean shouldSideBeRendered(IBlockAccess par1IBlockAccess, int par2, int par3, int par4, int par5)
045        {
046            return par5 != 0 ? false : super.shouldSideBeRendered(par1IBlockAccess, par2, par3, par4, par5);
047        }
048    
049        /**
050         * if the specified block is in the given AABB, add its collision bounding box to the given list
051         */
052        public void addCollidingBlockToList(World par1World, int par2, int par3, int par4, AxisAlignedBB par5AxisAlignedBB, List par6List, Entity par7Entity) {}
053    
054        /**
055         * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
056         * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
057         */
058        public boolean isOpaqueCube()
059        {
060            return false;
061        }
062    
063        /**
064         * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
065         */
066        public boolean renderAsNormalBlock()
067        {
068            return false;
069        }
070    
071        /**
072         * Returns the quantity of items to drop on block destruction.
073         */
074        public int quantityDropped(Random par1Random)
075        {
076            return 0;
077        }
078    
079        /**
080         * Triggered whenever an entity collides with this block (enters into the block). Args: world, x, y, z, entity
081         */
082        public void onEntityCollidedWithBlock(World par1World, int par2, int par3, int par4, Entity par5Entity)
083        {
084            if (par5Entity.ridingEntity == null && par5Entity.riddenByEntity == null && !par1World.isRemote)
085            {
086                par5Entity.travelToTheEnd(1);
087            }
088        }
089    
090        @SideOnly(Side.CLIENT)
091    
092        /**
093         * A randomly called display update to be able to add particles or other items for display
094         */
095        public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
096        {
097            double var6 = (double)((float)par2 + par5Random.nextFloat());
098            double var8 = (double)((float)par3 + 0.8F);
099            double var10 = (double)((float)par4 + par5Random.nextFloat());
100            double var12 = 0.0D;
101            double var14 = 0.0D;
102            double var16 = 0.0D;
103            par1World.spawnParticle("smoke", var6, var8, var10, var12, var14, var16);
104        }
105    
106        /**
107         * The type of render function that is called for this block
108         */
109        public int getRenderType()
110        {
111            return -1;
112        }
113    
114        /**
115         * Called whenever the block is added into the world. Args: world, x, y, z
116         */
117        public void onBlockAdded(World par1World, int par2, int par3, int par4)
118        {
119            if (!bossDefeated)
120            {
121                if (par1World.provider.dimensionId != 0)
122                {
123                    par1World.setBlockWithNotify(par2, par3, par4, 0);
124                }
125            }
126        }
127    
128        @SideOnly(Side.CLIENT)
129    
130        /**
131         * only called by clickMiddleMouseButton , and passed to inventory.setCurrentItem (along with isCreative)
132         */
133        public int idPicked(World par1World, int par2, int par3, int par4)
134        {
135            return 0;
136        }
137    }