001    package net.minecraft.server.gui;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import java.awt.BorderLayout;
006    import java.awt.Component;
007    import java.awt.Dimension;
008    import java.util.logging.Logger;
009    import javax.swing.JComponent;
010    import javax.swing.JFrame;
011    import javax.swing.JPanel;
012    import javax.swing.JScrollPane;
013    import javax.swing.JTextArea;
014    import javax.swing.JTextField;
015    import javax.swing.UIManager;
016    import javax.swing.border.EtchedBorder;
017    import javax.swing.border.TitledBorder;
018    import net.minecraft.server.dedicated.DedicatedServer;
019    
020    @SideOnly(Side.SERVER)
021    public class ServerGUI extends JComponent
022    {
023        /** Reference to the logger. */
024        public static Logger logger = Logger.getLogger("Minecraft");
025    
026        /** This is set to true after server GUI window has been initialized. */
027        private static boolean serverGuiInitialized = false;
028        private DedicatedServer serverInstance;
029    
030        /**
031         * Sets up the server GUI
032         */
033        public static void initGUI(DedicatedServer par0DedicatedServer)
034        {
035            try
036            {
037                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
038            }
039            catch (Exception var3)
040            {
041                ;
042            }
043    
044            ServerGUI var1 = new ServerGUI(par0DedicatedServer);
045            serverGuiInitialized = true;
046            JFrame var2 = new JFrame("Minecraft server");
047            var2.add(var1);
048            var2.pack();
049            var2.setLocationRelativeTo((Component)null);
050            var2.setVisible(true);
051            var2.addWindowListener(new ServerWindowAdapter(par0DedicatedServer));
052        }
053    
054        public ServerGUI(DedicatedServer par1DedicatedServer)
055        {
056            this.serverInstance = par1DedicatedServer;
057            this.setPreferredSize(new Dimension(854, 480));
058            this.setLayout(new BorderLayout());
059    
060            try
061            {
062                this.add(this.getLogComponent(), "Center");
063                this.add(this.getStatsComponent(), "West");
064            }
065            catch (Exception var3)
066            {
067                var3.printStackTrace();
068            }
069        }
070    
071        /**
072         * Returns a new JPanel with a new GuiStatsComponent inside.
073         */
074        private JComponent getStatsComponent()
075        {
076            JPanel var1 = new JPanel(new BorderLayout());
077            var1.add(new GuiStatsComponent(this.serverInstance), "North");
078            var1.add(this.getPlayerListComponent(), "Center");
079            var1.setBorder(new TitledBorder(new EtchedBorder(), "Stats"));
080            return var1;
081        }
082    
083        /**
084         * Returns a new JScrollPane with a new PlayerListBox inside.
085         */
086        private JComponent getPlayerListComponent()
087        {
088            PlayerListBox var1 = new PlayerListBox(this.serverInstance);
089            JScrollPane var2 = new JScrollPane(var1, 22, 30);
090            var2.setBorder(new TitledBorder(new EtchedBorder(), "Players"));
091            return var2;
092        }
093    
094        /**
095         * Returns a new JPanel with a new GuiStatsComponent inside.
096         */
097        private JComponent getLogComponent()
098        {
099            JPanel var1 = new JPanel(new BorderLayout());
100            JTextArea var2 = new JTextArea();
101            logger.addHandler(new GuiLogOutputHandler(var2));
102            JScrollPane var3 = new JScrollPane(var2, 22, 30);
103            var2.setEditable(false);
104            JTextField var4 = new JTextField();
105            var4.addActionListener(new ServerGuiCommandListener(this, var4));
106            var2.addFocusListener(new ServerGuiFocusAdapter(this));
107            var1.add(var3, "Center");
108            var1.add(var4, "South");
109            var1.setBorder(new TitledBorder(new EtchedBorder(), "Log and chat"));
110            return var1;
111        }
112    
113        static DedicatedServer getDedicatedServer(ServerGUI par0ServerGUI)
114        {
115            return par0ServerGUI.serverInstance;
116        }
117    }