package net.minecraft.server;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ServerGUI extends JComponent {
private static final Font a = new Font("Monospaced", 0, 12);
private static final Logger b = LogManager.getLogger();
private DedicatedServer c;
public static void a(DedicatedServer dedicatedserver) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception exception) {
;
}
ServerGUI servergui = new ServerGUI(dedicatedserver);
JFrame jframe = new JFrame("Minecraft server");
jframe.add(servergui);
jframe.pack();
jframe.setLocationRelativeTo((Component) null);
jframe.setVisible(true);
jframe.addWindowListener(new ServerWindowAdapter(dedicatedserver));
}
public ServerGUI(DedicatedServer dedicatedserver) {
this.c = dedicatedserver;
this.setPreferredSize(new Dimension(854, 480));
this.setLayout(new BorderLayout());
try {
this.add(this.c(), "Center");
this.add(this.a(), "West");
} catch (Exception exception) {
b.error("Couldn\'t build server GUI", exception);
}
}
private JComponent a() {
JPanel jpanel = new JPanel(new BorderLayout());
jpanel.add(new GuiStatsComponent(this.c), "North");
jpanel.add(this.b(), "Center");
jpanel.setBorder(new TitledBorder(new EtchedBorder(), "Stats"));
return jpanel;
}
private JComponent b() {
PlayerListBox playerlistbox = new PlayerListBox(this.c);
JScrollPane jscrollpane = new JScrollPane(playerlistbox, 22, 30);
jscrollpane.setBorder(new TitledBorder(new EtchedBorder(), "Players"));
return jscrollpane;
}
private JComponent c() {
JPanel jpanel = new JPanel(new BorderLayout());
JTextArea jtextarea = new JTextArea();
JScrollPane jscrollpane = new JScrollPane(jtextarea, 22, 30);
jtextarea.setEditable(false);
jtextarea.setFont(a);
JTextField jtextfield = new JTextField();
jtextfield.addActionListener(new ServerGuiCommandListener(this, jtextfield));
jtextarea.addFocusListener(new ServerGuiFocusAdapter(this));
jpanel.add(jscrollpane, "Center");
jpanel.add(jtextfield, "South");
jpanel.setBorder(new TitledBorder(new EtchedBorder(), "Log and chat"));
Thread thread = new Thread(new ServerGuiThreadRunnable(this, jtextarea, jscrollpane));
thread.setDaemon(true);
thread.start();
return jpanel;
}
public void a(JTextArea jtextarea, JScrollPane jscrollpane, String s) {
if (!SwingUtilities.isEventDispatchThread()) {
SwingUtilities.invokeLater(new ServerGuiInvokeRunnable(this, jtextarea, jscrollpane, s));
} else {
Document document = jtextarea.getDocument();
JScrollBar jscrollbar = jscrollpane.getVerticalScrollBar();
boolean flag = false;
if (jscrollpane.getViewport().getView() == jtextarea) {
flag = (double) jscrollbar.getValue() + jscrollbar.getSize().getHeight() + (double) (a.getSize() * 4) > (double) jscrollbar.getMaximum();
}
try {
document.insertString(document.getLength(), s, (AttributeSet) null);
} catch (BadLocationException badlocationexception) {
;
}
if (flag) {
jscrollbar.setValue(Integer.MAX_VALUE);
}
}
}
static DedicatedServer a(ServerGUI servergui) {
return servergui.c;
}
}