package net.minecraft.server.gui;
import com.mojang.util.QueueLogAppender;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
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 net.minecraft.server.MinecraftServer;
import net.minecraft.server.dedicated.DedicatedServer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class MinecraftServerGui extends JComponent
{
private static final Font serverGuiFont = new Font("Monospaced", 0, 12);
private static final Logger LOGGER = LogManager.getLogger();
private DedicatedServer server;
private static final String __OBFID = "CL_00001789";
/**
* Creates the server GUI and sets it visible for the user.
*/
public static void createServerGui(final DedicatedServer serverIn)
{
try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception var3)
{
;
}
MinecraftServerGui var1 = new MinecraftServerGui(serverIn);
JFrame var2 = new JFrame("Minecraft server");
var2.add(var1);
var2.pack();
var2.setLocationRelativeTo((Component)null);
var2.setVisible(true);
var2.addWindowListener(new WindowAdapter()
{
private static final String __OBFID = "CL_00001791";
public void windowClosing(WindowEvent p_windowClosing_1_)
{
serverIn.initiateShutdown();
while (!serverIn.isServerStopped())
{
try
{
Thread.sleep(100L);
}
catch (InterruptedException var3)
{
var3.printStackTrace();
}
}
System.exit(0);
}
});
}
public MinecraftServerGui(DedicatedServer serverIn)
{
this.server = serverIn;
this.setPreferredSize(new Dimension(854, 480));
this.setLayout(new BorderLayout());
try
{
this.add(this.getLogComponent(), "Center");
this.add(this.getStatsComponent(), "West");
}
catch (Exception var3)
{
LOGGER.error("Couldn\'t build server GUI", var3);
}
}
/**
* Generates new StatsComponent and returns it.
*/
private JComponent getStatsComponent()
{
JPanel var1 = new JPanel(new BorderLayout());
var1.add(new StatsComponent(this.server), "North");
var1.add(this.getPlayerListComponent(), "Center");
var1.setBorder(new TitledBorder(new EtchedBorder(), "Stats"));
return var1;
}
/**
* Generates new PlayerListComponent and returns it.
*/
private JComponent getPlayerListComponent()
{
PlayerListComponent var1 = new PlayerListComponent(this.server);
JScrollPane var2 = new JScrollPane(var1, 22, 30);
var2.setBorder(new TitledBorder(new EtchedBorder(), "Players"));
return var2;
}
private JComponent getLogComponent()
{
JPanel var1 = new JPanel(new BorderLayout());
final JTextArea var2 = new JTextArea();
final JScrollPane var3 = new JScrollPane(var2, 22, 30);
var2.setEditable(false);
var2.setFont(serverGuiFont);
final JTextField var4 = new JTextField();
var4.addActionListener(new ActionListener()
{
private static final String __OBFID = "CL_00001790";
public void actionPerformed(ActionEvent p_actionPerformed_1_)
{
String var2 = var4.getText().trim();
if (var2.length() > 0)
{
MinecraftServerGui.this.server.addPendingCommand(var2, MinecraftServer.getServer());
}
var4.setText("");
}
});
var2.addFocusListener(new FocusAdapter()
{
private static final String __OBFID = "CL_00001794";
public void focusGained(FocusEvent p_focusGained_1_) {}
});
var1.add(var3, "Center");
var1.add(var4, "South");
var1.setBorder(new TitledBorder(new EtchedBorder(), "Log and chat"));
Thread var5 = new Thread(new Runnable()
{
private static final String __OBFID = "CL_00001793";
public void run()
{
String var1;
while ((var1 = QueueLogAppender.getNextLogEvent("ServerGuiConsole")) != null)
{
MinecraftServerGui.this.func_164247_a(var2, var3, var1);
}
}
});
var5.setDaemon(true);
var5.start();
return var1;
}
public void func_164247_a(final JTextArea p_164247_1_, final JScrollPane p_164247_2_, final String p_164247_3_)
{
if (!SwingUtilities.isEventDispatchThread())
{
SwingUtilities.invokeLater(new Runnable()
{
private static final String __OBFID = "CL_00001792";
public void run()
{
MinecraftServerGui.this.func_164247_a(p_164247_1_, p_164247_2_, p_164247_3_);
}
});
}
else
{
Document var4 = p_164247_1_.getDocument();
JScrollBar var5 = p_164247_2_.getVerticalScrollBar();
boolean var6 = false;
if (p_164247_2_.getViewport().getView() == p_164247_1_)
{
var6 = (double)var5.getValue() + var5.getSize().getHeight() + (double)(serverGuiFont.getSize() * 4) > (double)var5.getMaximum();
}
try
{
var4.insertString(var4.getLength(), p_164247_3_, (AttributeSet)null);
}
catch (BadLocationException var8)
{
;
}
if (var6)
{
var5.setValue(Integer.MAX_VALUE);
}
}
}
}