001    package net.minecraft.src;
002    
003    import cpw.mods.fml.common.Side;
004    import cpw.mods.fml.common.asm.SideOnly;
005    import java.util.ArrayList;
006    import java.util.Arrays;
007    import java.util.HashMap;
008    import java.util.Iterator;
009    import java.util.List;
010    import org.lwjgl.input.Keyboard;
011    
012    @SideOnly(Side.CLIENT)
013    public class GuiFlatPresets extends GuiScreen
014    {
015        /** RenderItem instance used to render preset icons. */
016        private static RenderItem presetIconRenderer = new RenderItem();
017    
018        /** List of defined flat world presets. */
019        private static final List presets = new ArrayList();
020        private final GuiCreateFlatWorld createFlatWorldGui;
021        private String field_82300_d;
022        private String field_82308_m;
023        private String field_82306_n;
024        private GuiFlatPresetsListSlot theFlatPresetsListSlot;
025        private GuiButton theButton;
026        private GuiTextField theTextField;
027    
028        public GuiFlatPresets(GuiCreateFlatWorld par1)
029        {
030            this.createFlatWorldGui = par1;
031        }
032    
033        /**
034         * Adds the buttons (and other controls) to the screen in question.
035         */
036        public void initGui()
037        {
038            this.controlList.clear();
039            Keyboard.enableRepeatEvents(true);
040            this.field_82300_d = StatCollector.translateToLocal("createWorld.customize.presets.title");
041            this.field_82308_m = StatCollector.translateToLocal("createWorld.customize.presets.share");
042            this.field_82306_n = StatCollector.translateToLocal("createWorld.customize.presets.list");
043            this.theTextField = new GuiTextField(this.fontRenderer, 50, 40, this.width - 100, 20);
044            this.theFlatPresetsListSlot = new GuiFlatPresetsListSlot(this);
045            this.theTextField.setMaxStringLength(1230);
046            this.theTextField.setText(this.createFlatWorldGui.getFlatGeneratorInfo());
047            this.controlList.add(this.theButton = new GuiButton(0, this.width / 2 - 155, this.height - 28, 150, 20, StatCollector.translateToLocal("createWorld.customize.presets.select")));
048            this.controlList.add(new GuiButton(1, this.width / 2 + 5, this.height - 28, 150, 20, StatCollector.translateToLocal("gui.cancel")));
049            this.func_82296_g();
050        }
051    
052        /**
053         * Called when the screen is unloaded. Used to disable keyboard repeat events
054         */
055        public void onGuiClosed()
056        {
057            Keyboard.enableRepeatEvents(false);
058        }
059    
060        /**
061         * Called when the mouse is clicked.
062         */
063        protected void mouseClicked(int par1, int par2, int par3)
064        {
065            this.theTextField.mouseClicked(par1, par2, par3);
066            super.mouseClicked(par1, par2, par3);
067        }
068    
069        /**
070         * Fired when a key is typed. This is the equivalent of KeyListener.keyTyped(KeyEvent e).
071         */
072        protected void keyTyped(char par1, int par2)
073        {
074            if (!this.theTextField.textboxKeyTyped(par1, par2))
075            {
076                super.keyTyped(par1, par2);
077            }
078        }
079    
080        /**
081         * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
082         */
083        protected void actionPerformed(GuiButton par1GuiButton)
084        {
085            if (par1GuiButton.id == 0 && this.func_82293_j())
086            {
087                this.createFlatWorldGui.setFlatGeneratorInfo(this.theTextField.getText());
088                this.mc.displayGuiScreen(this.createFlatWorldGui);
089            }
090            else if (par1GuiButton.id == 1)
091            {
092                this.mc.displayGuiScreen(this.createFlatWorldGui);
093            }
094        }
095    
096        /**
097         * Draws the screen and all the components in it.
098         */
099        public void drawScreen(int par1, int par2, float par3)
100        {
101            this.drawDefaultBackground();
102            this.theFlatPresetsListSlot.drawScreen(par1, par2, par3);
103            this.drawCenteredString(this.fontRenderer, this.field_82300_d, this.width / 2, 8, 16777215);
104            this.drawString(this.fontRenderer, this.field_82308_m, 50, 30, 10526880);
105            this.drawString(this.fontRenderer, this.field_82306_n, 50, 70, 10526880);
106            this.theTextField.drawTextBox();
107            super.drawScreen(par1, par2, par3);
108        }
109    
110        /**
111         * Called from the main game loop to update the screen.
112         */
113        public void updateScreen()
114        {
115            this.theTextField.updateCursorCounter();
116            super.updateScreen();
117        }
118    
119        public void func_82296_g()
120        {
121            boolean var1 = this.func_82293_j();
122            this.theButton.enabled = var1;
123        }
124    
125        private boolean func_82293_j()
126        {
127            return this.theFlatPresetsListSlot.field_82459_a > -1 && this.theFlatPresetsListSlot.field_82459_a < presets.size() || this.theTextField.getText().length() > 1;
128        }
129    
130        /**
131         * Add a flat world preset with no world features.
132         */
133        public static void addPresetNoFeatures(String par0Str, int par1, BiomeGenBase par2BiomeGenBase, FlatLayerInfo ... par3ArrayOfFlatLayerInfo)
134        {
135            addPreset(par0Str, par1, par2BiomeGenBase, (List)null, par3ArrayOfFlatLayerInfo);
136        }
137    
138        /**
139         * Add a flat world preset.
140         */
141        public static void addPreset(String par0Str, int par1, BiomeGenBase par2BiomeGenBase, List par3List, FlatLayerInfo ... par4ArrayOfFlatLayerInfo)
142        {
143            FlatGeneratorInfo var5 = new FlatGeneratorInfo();
144    
145            for (int var6 = par4ArrayOfFlatLayerInfo.length - 1; var6 >= 0; --var6)
146            {
147                var5.getFlatLayers().add(par4ArrayOfFlatLayerInfo[var6]);
148            }
149    
150            var5.setBiome(par2BiomeGenBase.biomeID);
151            var5.func_82645_d();
152    
153            if (par3List != null)
154            {
155                Iterator var8 = par3List.iterator();
156    
157                while (var8.hasNext())
158                {
159                    String var7 = (String)var8.next();
160                    var5.getWorldFeatures().put(var7, new HashMap());
161                }
162            }
163    
164            presets.add(new GuiFlatPresetsItem(par1, par0Str, var5.toString()));
165        }
166    
167        /**
168         * Return the RenderItem instance used to render preset icons.
169         */
170        static RenderItem getPresetIconRenderer()
171        {
172            return presetIconRenderer;
173        }
174    
175        /**
176         * Return the list of defined flat world presets.
177         */
178        static List getPresets()
179        {
180            return presets;
181        }
182    
183        static GuiFlatPresetsListSlot func_82292_a(GuiFlatPresets par0GuiFlatPresets)
184        {
185            return par0GuiFlatPresets.theFlatPresetsListSlot;
186        }
187    
188        static GuiTextField func_82298_b(GuiFlatPresets par0GuiFlatPresets)
189        {
190            return par0GuiFlatPresets.theTextField;
191        }
192    
193        static
194        {
195            addPreset("Classic Flat", Block.grass.blockID, BiomeGenBase.plains, Arrays.asList(new String[] {"village"}), new FlatLayerInfo[] {new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(2, Block.dirt.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
196            addPreset("Tunnelers\' Dream", Block.stone.blockID, BiomeGenBase.extremeHills, Arrays.asList(new String[] {"biome_1", "dungeon", "decoration", "stronghold", "mineshaft"}), new FlatLayerInfo[] {new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(5, Block.dirt.blockID), new FlatLayerInfo(230, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
197            addPreset("Water World", Block.waterMoving.blockID, BiomeGenBase.plains, Arrays.asList(new String[] {"village", "biome_1"}), new FlatLayerInfo[] {new FlatLayerInfo(90, Block.waterStill.blockID), new FlatLayerInfo(5, Block.sand.blockID), new FlatLayerInfo(5, Block.dirt.blockID), new FlatLayerInfo(5, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
198            addPreset("Overworld", Block.tallGrass.blockID, BiomeGenBase.plains, Arrays.asList(new String[] {"village", "biome_1", "decoration", "stronghold", "mineshaft", "dungeon", "lake", "lava_lake"}), new FlatLayerInfo[] {new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(3, Block.dirt.blockID), new FlatLayerInfo(59, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
199            addPreset("Snowy Kingdom", Block.snow.blockID, BiomeGenBase.icePlains, Arrays.asList(new String[] {"village", "biome_1"}), new FlatLayerInfo[] {new FlatLayerInfo(1, Block.snow.blockID), new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(3, Block.dirt.blockID), new FlatLayerInfo(59, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
200            addPreset("Bottomless Pit", Item.feather.shiftedIndex, BiomeGenBase.plains, Arrays.asList(new String[] {"village", "biome_1"}), new FlatLayerInfo[] {new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(3, Block.dirt.blockID), new FlatLayerInfo(2, Block.cobblestone.blockID)});
201            addPreset("Desert", Block.sand.blockID, BiomeGenBase.desert, Arrays.asList(new String[] {"village", "biome_1", "decoration", "stronghold", "mineshaft", "dungeon"}), new FlatLayerInfo[] {new FlatLayerInfo(8, Block.sand.blockID), new FlatLayerInfo(52, Block.sandStone.blockID), new FlatLayerInfo(3, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
202            addPresetNoFeatures("Redstone Ready", Item.redstone.shiftedIndex, BiomeGenBase.desert, new FlatLayerInfo[] {new FlatLayerInfo(52, Block.sandStone.blockID), new FlatLayerInfo(3, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
203        }
204    }