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