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