--- a/net/minecraft/server/gui/MinecraftServerGui.java +++ b/net/minecraft/server/gui/MinecraftServerGui.java @@ -59,6 +59,15 @@ jframe.pack(); jframe.setLocationRelativeTo((Component) null); jframe.setVisible(true); + jframe.setName("Minecraft server"); // Paper - Improve ServerGUI + + // Paper start - Improve ServerGUI + try { + jframe.setIconImage(javax.imageio.ImageIO.read(Objects.requireNonNull(MinecraftServerGui.class.getClassLoader().getResourceAsStream("logo.png")))); + } catch (java.io.IOException ignore) { + } + // Paper end - Improve ServerGUI + jframe.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent windowevent) { if (!servergui.isClosing.getAndSet(true)) { @@ -81,6 +90,7 @@ this.setLayout(new BorderLayout()); try { + this.add(this.buildOnboardingPanel(), "North"); // Paper - Add onboarding message for initial server start this.add(this.buildChatPanel(), "Center"); this.add(this.buildInfoPanel(), "West"); } catch (Exception exception) { @@ -95,8 +105,8 @@ private JComponent buildInfoPanel() { JPanel jpanel = new JPanel(new BorderLayout()); - StatsComponent guistatscomponent = new StatsComponent(this.server); - Collection collection = this.finalizers; + com.destroystokyo.paper.gui.GuiStatsComponent guistatscomponent = new com.destroystokyo.paper.gui.GuiStatsComponent(this.server); // Paper - Make GUI graph fancier + Collection collection = this.finalizers; // CraftBukkit - decompile error Objects.requireNonNull(guistatscomponent); collection.add(guistatscomponent::close); @@ -106,6 +116,39 @@ return jpanel; } + // Paper start - Add onboarding message for initial server start + private JComponent buildOnboardingPanel() { + String onboardingLink = "https://docs.papermc.io/paper/next-steps"; + JPanel jPanel = new JPanel(); + + javax.swing.JLabel jLabel = new javax.swing.JLabel("If you need help setting up your server you can visit:"); + jLabel.setFont(MinecraftServerGui.MONOSPACED); + + javax.swing.JLabel link = new javax.swing.JLabel(" " + onboardingLink + ""); + link.setFont(MinecraftServerGui.MONOSPACED); + link.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); + link.addMouseListener(new java.awt.event.MouseAdapter() { + @Override + public void mouseClicked(final java.awt.event.MouseEvent e) { + try { + java.awt.Desktop.getDesktop().browse(java.net.URI.create(onboardingLink)); + } catch (java.io.IOException exception) { + LOGGER.error("Unable to find a default browser. Please manually visit the website: " + onboardingLink, exception); + } catch (UnsupportedOperationException exception) { + LOGGER.error("This platform does not support the BROWSE action. Please manually visit the website: " + onboardingLink, exception); + } catch (SecurityException exception) { + LOGGER.error("This action has been denied by the security manager. Please manually visit the website: " + onboardingLink, exception); + } + } + }); + + jPanel.add(jLabel); + jPanel.add(link); + + return jPanel; + } + // Paper end - Add onboarding message for initial server start + private JComponent buildPlayerPanel() { JList jlist = new PlayerListComponent(this.server); JScrollPane jscrollpane = new JScrollPane(jlist, 22, 30); @@ -132,7 +175,7 @@ jtextfield.setText(""); }); - jtextarea.addFocusListener(new FocusAdapter(this) { + jtextarea.addFocusListener(new FocusAdapter() { // CraftBukkit - decompile error public void focusGained(FocusEvent focusevent) {} }); jpanel.add(jscrollpane, "Center"); @@ -166,6 +209,7 @@ this.finalizers.forEach(Runnable::run); } + private static final java.util.regex.Pattern ANSI = java.util.regex.Pattern.compile("\\e\\[[\\d;]*[^\\d;]"); // CraftBukkit // Paper public void print(JTextArea textArea, JScrollPane scrollPane, String message) { if (!SwingUtilities.isEventDispatchThread()) { SwingUtilities.invokeLater(() -> { @@ -181,7 +225,7 @@ } try { - document.insertString(document.getLength(), message, (AttributeSet) null); + document.insertString(document.getLength(), MinecraftServerGui.ANSI.matcher(message).replaceAll(""), (AttributeSet) null); // CraftBukkit } catch (BadLocationException badlocationexception) { ; }