--- a/net/minecraft/server/gui/MinecraftServerGui.java +++ b/net/minecraft/server/gui/MinecraftServerGui.java @@ -39,6 +_,11 @@ private Thread logAppenderThread; private final Collection finalizers = Lists.newArrayList(); final AtomicBoolean isClosing = new AtomicBoolean(); + // Purpur start - GUI Improvements + private final CommandHistory history = new CommandHistory(); + private String currentCommand = ""; + private int historyIndex = 0; + // Purpur end - GUI Improvements public static MinecraftServerGui showFrameFor(final DedicatedServer server) { try { @@ -46,7 +_,7 @@ } catch (Exception var3) { } - final JFrame jFrame = new JFrame("Minecraft server"); + final JFrame jFrame = new JFrame("Purpur Minecraft server"); // Purpur - Improve GUI final MinecraftServerGui minecraftServerGui = new MinecraftServerGui(server); jFrame.setDefaultCloseOperation(2); jFrame.add(minecraftServerGui); @@ -54,7 +_,7 @@ jFrame.setLocationRelativeTo(null); jFrame.setVisible(true); - jFrame.setName("Minecraft server"); + jFrame.setName("Purpur Minecraft server"); // Purpur - Improve GUI try { jFrame.setIconImage(javax.imageio.ImageIO.read(java.util.Objects.requireNonNull(MinecraftServerGui.class.getClassLoader().getResourceAsStream("logo.png")))); } catch (java.io.IOException ignore) { @@ -64,7 +_,7 @@ @Override public void windowClosing(WindowEvent event) { if (!minecraftServerGui.isClosing.getAndSet(true)) { - jFrame.setTitle("Minecraft server - shutting down!"); + jFrame.setTitle("Purpur Minecraft server - shutting down!"); // Purpur - Improve GUI server.halt(true); minecraftServerGui.runFinalizers(); } @@ -112,7 +_,7 @@ private JComponent buildChatPanel() { JPanel jPanel = new JPanel(new BorderLayout()); - JTextArea jTextArea = new JTextArea(); + org.purpurmc.purpur.gui.JColorTextPane jTextArea = new org.purpurmc.purpur.gui.JColorTextPane(); // Purpur - GUI Improvements JScrollPane jScrollPane = new JScrollPane(jTextArea, 22, 30); jTextArea.setEditable(false); jTextArea.setFont(MONOSPACED); @@ -121,10 +_,43 @@ String trimmed = jTextField.getText().trim(); if (!trimmed.isEmpty()) { this.server.handleConsoleInput(trimmed, this.server.createCommandSourceStack()); + // Purpur start - GUI Improvements + history.add(trimmed); + historyIndex = -1; + // Purpur end - GUI Improvements } jTextField.setText(""); }); + // Purpur start - GUI Improvements + jTextField.getInputMap().put(javax.swing.KeyStroke.getKeyStroke("UP"), "up"); + jTextField.getInputMap().put(javax.swing.KeyStroke.getKeyStroke("DOWN"), "down"); + jTextField.getActionMap().put("up", new javax.swing.AbstractAction() { + @Override + public void actionPerformed(java.awt.event.ActionEvent actionEvent) { + if (historyIndex < 0) { + currentCommand = jTextField.getText(); + } + if (historyIndex < history.size() - 1) { + jTextField.setText(history.get(++historyIndex)); + } + } + }); + jTextField.getActionMap().put("down", new javax.swing.AbstractAction() { + @Override + public void actionPerformed(java.awt.event.ActionEvent actionEvent) { + if (historyIndex >= 0) { + if (historyIndex == 0) { + --historyIndex; + jTextField.setText(currentCommand); + } else { + --historyIndex; + jTextField.setText(history.get(historyIndex)); + } + } + } + }); + // Purpur end - GUI Improvements jTextArea.addFocusListener(new FocusAdapter() { @Override public void focusGained(FocusEvent event) { @@ -159,7 +_,7 @@ } - public void print(JTextArea textArea, JScrollPane scrollPane, String line) { + public void print(org.purpurmc.purpur.gui.JColorTextPane textArea, JScrollPane scrollPane, String line) { // Purpur - GUI Improvements if (!SwingUtilities.isEventDispatchThread()) { SwingUtilities.invokeLater(() -> this.print(textArea, scrollPane, line)); } else { @@ -170,16 +_,29 @@ flag = verticalScrollBar.getValue() + verticalScrollBar.getSize().getHeight() + MONOSPACED.getSize() * 4 > verticalScrollBar.getMaximum(); } - try { + /*try { // Purpur - GUI Improvements document.insertString(document.getLength(), MinecraftServerGui.ANSI.matcher(line).replaceAll(""), null); // CraftBukkit } catch (BadLocationException var8) { - } + }*/ // Purpur - GUI Improvements + textArea.append(line); // Purpur - GUI Improvements if (flag) { verticalScrollBar.setValue(Integer.MAX_VALUE); } } } + + // Purpur start - GUI Improvements + public static class CommandHistory extends java.util.LinkedList { + @Override + public boolean add(String command) { + if (size() > 1000) { + remove(); + } + return super.offerFirst(command); + } + } + // Purpur end - GUI Improvements private JComponent buildOnboardingPanel() {