    001    package net.minecraft.client.gui;
    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 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.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)});
    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.shiftedIndex, BiomeGenBase.desert, new FlatLayerInfo[] {new FlatLayerInfo(52, Block.sandStone.blockID), new FlatLayerInfo(3, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)});
    210        }
    211    }