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 }