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