001    package net.minecraft.world.gen;
002    
003    import java.util.ArrayList;
004    import java.util.HashMap;
005    import java.util.Iterator;
006    import java.util.List;
007    import java.util.Map;
008    import java.util.Map.Entry;
009    import net.minecraft.block.Block;
010    import net.minecraft.util.MathHelper;
011    import net.minecraft.world.biome.BiomeGenBase;
012    
013    public class FlatGeneratorInfo
014    {
015        /** List of layers on this preset. */
016        private final List flatLayers = new ArrayList();
017    
018        /** List of world features enabled on this preset. */
019        private final Map worldFeatures = new HashMap();
020        private int field_82654_c = 0;
021    
022        /**
023         * Return the biome used on this preset.
024         */
025        public int getBiome()
026        {
027            return this.field_82654_c;
028        }
029    
030        /**
031         * Set the biome used on this preset.
032         */
033        public void setBiome(int par1)
034        {
035            this.field_82654_c = par1;
036        }
037    
038        /**
039         * Return the list of world features enabled on this preset.
040         */
041        public Map getWorldFeatures()
042        {
043            return this.worldFeatures;
044        }
045    
046        /**
047         * Return the list of layers on this preset.
048         */
049        public List getFlatLayers()
050        {
051            return this.flatLayers;
052        }
053    
054        public void func_82645_d()
055        {
056            int var1 = 0;
057            FlatLayerInfo var3;
058    
059            for (Iterator var2 = this.flatLayers.iterator(); var2.hasNext(); var1 += var3.getLayerCount())
060            {
061                var3 = (FlatLayerInfo)var2.next();
062                var3.setMinY(var1);
063            }
064        }
065    
066        public String toString()
067        {
068            StringBuilder var1 = new StringBuilder();
069            var1.append(2);
070            var1.append(";");
071            int var2;
072    
073            for (var2 = 0; var2 < this.flatLayers.size(); ++var2)
074            {
075                if (var2 > 0)
076                {
077                    var1.append(",");
078                }
079    
080                var1.append(((FlatLayerInfo)this.flatLayers.get(var2)).toString());
081            }
082    
083            var1.append(";");
084            var1.append(this.field_82654_c);
085    
086            if (!this.worldFeatures.isEmpty())
087            {
088                var1.append(";");
089                var2 = 0;
090                Iterator var3 = this.worldFeatures.entrySet().iterator();
091    
092                while (var3.hasNext())
093                {
094                    Entry var4 = (Entry)var3.next();
095    
096                    if (var2++ > 0)
097                    {
098                        var1.append(",");
099                    }
100    
101                    var1.append(((String)var4.getKey()).toLowerCase());
102                    Map var5 = (Map)var4.getValue();
103    
104                    if (!var5.isEmpty())
105                    {
106                        var1.append("(");
107                        int var6 = 0;
108                        Iterator var7 = var5.entrySet().iterator();
109    
110                        while (var7.hasNext())
111                        {
112                            Entry var8 = (Entry)var7.next();
113    
114                            if (var6++ > 0)
115                            {
116                                var1.append(" ");
117                            }
118    
119                            var1.append((String)var8.getKey());
120                            var1.append("=");
121                            var1.append((String)var8.getValue());
122                        }
123    
124                        var1.append(")");
125                    }
126                }
127            }
128    
129            return var1.toString();
130        }
131    
132        private static FlatLayerInfo func_82646_a(String par0Str, int par1)
133        {
134            String[] var2 = par0Str.split("x", 2);
135            int var3 = 1;
136            int var5 = 0;
137    
138            if (var2.length == 2)
139            {
140                try
141                {
142                    var3 = Integer.parseInt(var2[0]);
143    
144                    if (par1 + var3 >= 256)
145                    {
146                        var3 = 256 - par1;
147                    }
148    
149                    if (var3 < 0)
150                    {
151                        var3 = 0;
152                    }
153                }
154                catch (Throwable var7)
155                {
156                    return null;
157                }
158            }
159    
160            int var4;
161    
162            try
163            {
164                String var6 = var2[var2.length - 1];
165                var2 = var6.split(":", 2);
166                var4 = Integer.parseInt(var2[0]);
167    
168                if (var2.length > 1)
169                {
170                    var5 = Integer.parseInt(var2[1]);
171                }
172    
173                if (Block.blocksList[var4] == null)
174                {
175                    var4 = 0;
176                    var5 = 0;
177                }
178    
179                if (var5 < 0 || var5 > 15)
180                {
181                    var5 = 0;
182                }
183            }
184            catch (Throwable var8)
185            {
186                return null;
187            }
188    
189            FlatLayerInfo var9 = new FlatLayerInfo(var3, var4, var5);
190            var9.setMinY(par1);
191            return var9;
192        }
193    
194        private static List func_82652_b(String par0Str)
195        {
196            if (par0Str != null && par0Str.length() >= 1)
197            {
198                ArrayList var1 = new ArrayList();
199                String[] var2 = par0Str.split(",");
200                int var3 = 0;
201                String[] var4 = var2;
202                int var5 = var2.length;
203    
204                for (int var6 = 0; var6 < var5; ++var6)
205                {
206                    String var7 = var4[var6];
207                    FlatLayerInfo var8 = func_82646_a(var7, var3);
208    
209                    if (var8 == null)
210                    {
211                        return null;
212                    }
213    
214                    var1.add(var8);
215                    var3 += var8.getLayerCount();
216                }
217    
218                return var1;
219            }
220            else
221            {
222                return null;
223            }
224        }
225    
226        public static FlatGeneratorInfo createFlatGeneratorFromString(String par0Str)
227        {
228            if (par0Str == null)
229            {
230                return getDefaultFlatGenerator();
231            }
232            else
233            {
234                String[] var1 = par0Str.split(";", -1);
235                int var2 = var1.length == 1 ? 0 : MathHelper.parseIntWithDefault(var1[0], 0);
236    
237                if (var2 >= 0 && var2 <= 2)
238                {
239                    FlatGeneratorInfo var3 = new FlatGeneratorInfo();
240                    int var4 = var1.length == 1 ? 0 : 1;
241                    List var5 = func_82652_b(var1[var4++]);
242    
243                    if (var5 != null && !var5.isEmpty())
244                    {
245                        var3.getFlatLayers().addAll(var5);
246                        var3.func_82645_d();
247                        int var6 = BiomeGenBase.plains.biomeID;
248    
249                        if (var2 > 0 && var1.length > var4)
250                        {
251                            var6 = MathHelper.parseIntWithDefault(var1[var4++], var6);
252                        }
253    
254                        var3.setBiome(var6);
255    
256                        if (var2 > 0 && var1.length > var4)
257                        {
258                            String[] var7 = var1[var4++].toLowerCase().split(",");
259                            String[] var8 = var7;
260                            int var9 = var7.length;
261    
262                            for (int var10 = 0; var10 < var9; ++var10)
263                            {
264                                String var11 = var8[var10];
265                                String[] var12 = var11.split("\\(", 2);
266                                HashMap var13 = new HashMap();
267    
268                                if (var12[0].length() > 0)
269                                {
270                                    var3.getWorldFeatures().put(var12[0], var13);
271    
272                                    if (var12.length > 1 && var12[1].endsWith(")") && var12[1].length() > 1)
273                                    {
274                                        String[] var14 = var12[1].substring(0, var12[1].length() - 1).split(" ");
275    
276                                        for (int var15 = 0; var15 < var14.length; ++var15)
277                                        {
278                                            String[] var16 = var14[var15].split("=", 2);
279    
280                                            if (var16.length == 2)
281                                            {
282                                                var13.put(var16[0], var16[1]);
283                                            }
284                                        }
285                                    }
286                                }
287                            }
288                        }
289                        else
290                        {
291                            var3.getWorldFeatures().put("village", new HashMap());
292                        }
293    
294                        return var3;
295                    }
296                    else
297                    {
298                        return getDefaultFlatGenerator();
299                    }
300                }
301                else
302                {
303                    return getDefaultFlatGenerator();
304                }
305            }
306        }
307    
308        public static FlatGeneratorInfo getDefaultFlatGenerator()
309        {
310            FlatGeneratorInfo var0 = new FlatGeneratorInfo();
311            var0.setBiome(BiomeGenBase.plains.biomeID);
312            var0.getFlatLayers().add(new FlatLayerInfo(1, Block.bedrock.blockID));
313            var0.getFlatLayers().add(new FlatLayerInfo(2, Block.dirt.blockID));
314            var0.getFlatLayers().add(new FlatLayerInfo(1, Block.grass.blockID));
315            var0.func_82645_d();
316            var0.getWorldFeatures().put("village", new HashMap());
317            return var0;
318        }
319    }