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.func_82275_e());
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.func_82273_a(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 }