    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}