001    package net.minecraft.world;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import net.minecraft.block.Block;
006    import net.minecraft.util.ChunkCoordinates;
007    import net.minecraft.util.MathHelper;
008    import net.minecraft.util.Vec3;
009    import net.minecraft.world.biome.BiomeGenBase;
010    import net.minecraft.world.biome.WorldChunkManagerHell;
011    import net.minecraft.world.chunk.IChunkProvider;
012    import net.minecraft.world.gen.ChunkProviderEnd;
013    
014    public class WorldProviderEnd extends WorldProvider
015    {
016        /**
017         * creates a new world chunk manager for WorldProvider
018         */
019        public void registerWorldChunkManager()
020        {
021            this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.sky, 0.5F, 0.0F);
022            this.dimensionId = 1;
023            this.hasNoSky = true;
024        }
025    
026        /**
027         * Returns a new chunk provider which generates chunks for this world
028         */
029        public IChunkProvider createChunkGenerator()
030        {
031            return new ChunkProviderEnd(this.worldObj, this.worldObj.getSeed());
032        }
033    
034        /**
035         * Calculates the angle of sun and moon in the sky relative to a specified time (usually worldTime)
036         */
037        public float calculateCelestialAngle(long par1, float par3)
038        {
039            return 0.0F;
040        }
041    
042        @SideOnly(Side.CLIENT)
043    
044        /**
045         * Returns array with sunrise/sunset colors
046         */
047        public float[] calcSunriseSunsetColors(float par1, float par2)
048        {
049            return null;
050        }
051    
052        @SideOnly(Side.CLIENT)
053    
054        /**
055         * Return Vec3D with biome specific fog color
056         */
057        public Vec3 getFogColor(float par1, float par2)
058        {
059            int var3 = 10518688;
060            float var4 = MathHelper.cos(par1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F;
061    
062            if (var4 < 0.0F)
063            {
064                var4 = 0.0F;
065            }
066    
067            if (var4 > 1.0F)
068            {
069                var4 = 1.0F;
070            }
071    
072            float var5 = (float)(var3 >> 16 & 255) / 255.0F;
073            float var6 = (float)(var3 >> 8 & 255) / 255.0F;
074            float var7 = (float)(var3 & 255) / 255.0F;
075            var5 *= var4 * 0.0F + 0.15F;
076            var6 *= var4 * 0.0F + 0.15F;
077            var7 *= var4 * 0.0F + 0.15F;
078            return this.worldObj.getWorldVec3Pool().getVecFromPool((double)var5, (double)var6, (double)var7);
079        }
080    
081        @SideOnly(Side.CLIENT)
082        public boolean isSkyColored()
083        {
084            return false;
085        }
086    
087        /**
088         * True if the player can respawn in this dimension (true = overworld, false = nether).
089         */
090        public boolean canRespawnHere()
091        {
092            return false;
093        }
094    
095        /**
096         * Returns 'true' if in the "main surface world", but 'false' if in the Nether or End dimensions.
097         */
098        public boolean isSurfaceWorld()
099        {
100            return false;
101        }
102    
103        @SideOnly(Side.CLIENT)
104    
105        /**
106         * the y level at which clouds are rendered.
107         */
108        public float getCloudHeight()
109        {
110            return 8.0F;
111        }
112    
113        /**
114         * Will check if the x, z position specified is alright to be set as the map spawn point
115         */
116        public boolean canCoordinateBeSpawn(int par1, int par2)
117        {
118            int var3 = this.worldObj.getFirstUncoveredBlock(par1, par2);
119            return var3 == 0 ? false : Block.blocksList[var3].blockMaterial.blocksMovement();
120        }
121    
122        /**
123         * Gets the hard-coded portal location to use when entering this dimension.
124         */
125        public ChunkCoordinates getEntrancePortalLocation()
126        {
127            return new ChunkCoordinates(100, 50, 0);
128        }
129    
130        public int getAverageGroundLevel()
131        {
132            return 50;
133        }
134    
135        @SideOnly(Side.CLIENT)
136    
137        /**
138         * Returns true if the given X,Z coordinate should show environmental fog.
139         */
140        public boolean doesXZShowFog(int par1, int par2)
141        {
142            return true;
143        }
144    
145        /**
146         * Returns the dimension's name, e.g. "The End", "Nether", or "Overworld".
147         */
148        public String getDimensionName()
149        {
150            return "The End";
151        }
152    }