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 }