001 package net.minecraft.src; 002 003 import java.util.Arrays; 004 import java.util.Random; 005 import java.util.Set; 006 007 import com.google.common.collect.ObjectArrays; 008 import com.google.common.collect.Sets; 009 010 import cpw.mods.fml.common.Side; 011 import cpw.mods.fml.common.asm.SideOnly; 012 013 public class WorldType 014 { 015 public static final BiomeGenBase[] base11Biomes = new BiomeGenBase[] {BiomeGenBase.desert, BiomeGenBase.forest, BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.plains, BiomeGenBase.taiga}; 016 public static final BiomeGenBase[] base12Biomes = ObjectArrays.concat(base11Biomes, BiomeGenBase.jungle); 017 018 /** List of world types. */ 019 public static final WorldType[] worldTypes = new WorldType[16]; 020 021 /** Default world type. */ 022 public static final WorldType DEFAULT = (new WorldType(0, "default", 1)).setVersioned(); 023 024 /** Flat world type. */ 025 public static final WorldType FLAT = new WorldType(1, "flat"); 026 027 /** Large Biome world Type. */ 028 public static final WorldType LARGE_BIOMES = new WorldType(2, "largeBiomes"); 029 030 /** Default (1.1) world type. */ 031 public static final WorldType DEFAULT_1_1 = (new WorldType(8, "default_1_1", 0)).setCanBeCreated(false); 032 033 /** 'default' or 'flat' */ 034 private final String worldType; 035 036 /** The int version of the ChunkProvider that generated this world. */ 037 private final int generatorVersion; 038 039 /** 040 * Whether this world type can be generated. Normally true; set to false for out-of-date generator versions. 041 */ 042 private boolean canBeCreated; 043 044 /** Whether this WorldType has a version or not. */ 045 private boolean isWorldTypeVersioned; 046 047 protected BiomeGenBase[] biomesForWorldType; 048 049 public WorldType(int par1, String par2Str) 050 { 051 this(par1, par2Str, 0); 052 } 053 054 public WorldType(int par1, String par2Str, int par3) 055 { 056 this.worldType = par2Str; 057 this.generatorVersion = par3; 058 this.canBeCreated = true; 059 worldTypes[par1] = this; 060 switch (par1) 061 { 062 case 8: 063 biomesForWorldType = base11Biomes; 064 break; 065 default: 066 biomesForWorldType = base12Biomes; 067 } 068 } 069 070 public String getWorldTypeName() 071 { 072 return this.worldType; 073 } 074 075 @SideOnly(Side.CLIENT) 076 077 /** 078 * Gets the translation key for the name of this world type. 079 */ 080 public String getTranslateName() 081 { 082 return "generator." + this.worldType; 083 } 084 085 /** 086 * Returns generatorVersion. 087 */ 088 public int getGeneratorVersion() 089 { 090 return this.generatorVersion; 091 } 092 093 public WorldType getWorldTypeForGeneratorVersion(int par1) 094 { 095 return this == DEFAULT && par1 == 0 ? DEFAULT_1_1 : this; 096 } 097 098 /** 099 * Sets canBeCreated to the provided value, and returns this. 100 */ 101 private WorldType setCanBeCreated(boolean par1) 102 { 103 this.canBeCreated = par1; 104 return this; 105 } 106 107 @SideOnly(Side.CLIENT) 108 109 /** 110 * Gets whether this WorldType can be used to generate a new world. 111 */ 112 public boolean getCanBeCreated() 113 { 114 return this.canBeCreated; 115 } 116 117 /** 118 * Flags this world type as having an associated version. 119 */ 120 private WorldType setVersioned() 121 { 122 this.isWorldTypeVersioned = true; 123 return this; 124 } 125 126 /** 127 * Returns true if this world Type has a version associated with it. 128 */ 129 public boolean isVersioned() 130 { 131 return this.isWorldTypeVersioned; 132 } 133 134 public static WorldType parseWorldType(String par0Str) 135 { 136 WorldType[] var1 = worldTypes; 137 int var2 = var1.length; 138 139 for (int var3 = 0; var3 < var2; ++var3) 140 { 141 WorldType var4 = var1[var3]; 142 143 if (var4 != null && var4.worldType.equalsIgnoreCase(par0Str)) 144 { 145 return var4; 146 } 147 } 148 149 return null; 150 } 151 152 public WorldChunkManager getChunkManager(World world) 153 { 154 return this == FLAT ? new WorldChunkManagerHell(BiomeGenBase.plains, 0.5F, 0.5F) : new WorldChunkManager(world); 155 } 156 157 public IChunkProvider getChunkGenerator(World world) 158 { 159 return (this == FLAT ? new ChunkProviderFlat(world, world.getSeed(), world.getWorldInfo().isMapFeaturesEnabled()) : new ChunkProviderGenerate(world, world.getSeed(), world.getWorldInfo().isMapFeaturesEnabled())); 160 } 161 162 public int getMinimumSpawnHeight(World world) 163 { 164 return this == FLAT ? 4 : 64; 165 } 166 167 public double getHorizon(World world) 168 { 169 return this == FLAT ? 0.0D : 63.0D; 170 } 171 172 public boolean hasVoidParticles(boolean var1) 173 { 174 return this != FLAT && !var1; 175 } 176 177 public double voidFadeMagnitude() 178 { 179 return this == FLAT ? 1.0D : 0.03125D; 180 } 181 182 public BiomeGenBase[] getBiomesForWorldType() { 183 return biomesForWorldType; 184 } 185 186 public void addNewBiome(BiomeGenBase biome) 187 { 188 Set<BiomeGenBase> newBiomesForWorld = Sets.newIdentityHashSet(); 189 newBiomesForWorld.addAll(Arrays.asList(biomesForWorldType)); 190 newBiomesForWorld.add(biome); 191 biomesForWorldType = newBiomesForWorld.toArray(new BiomeGenBase[0]); 192 } 193 194 public void removeBiome(BiomeGenBase biome) 195 { 196 Set<BiomeGenBase> newBiomesForWorld = Sets.newIdentityHashSet(); 197 newBiomesForWorld.addAll(Arrays.asList(biomesForWorldType)); 198 newBiomesForWorld.remove(biome); 199 biomesForWorldType = newBiomesForWorld.toArray(new BiomeGenBase[0]); 200 } 201 202 public boolean handleSlimeSpawnReduction(Random random, World world) 203 { 204 return this == FLAT ? random.nextInt(4) != 1 : false; 205 } 206 /** 207 * Called when 'Create New World' button is pressed before starting game 208 */ 209 public void onGUICreateWorldPress() { } 210 }