package xyz.etztech.qol.listeners; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.util.CachedServerIcon; import xyz.etztech.qol.QoL; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.util.logging.Level; public class ServerListPingListener implements Listener { private QoL plugin; public ServerListPingListener(QoL plugin) { this.plugin = plugin; } @EventHandler public void onPing(ServerListPingEvent event) { // MAX PLAYERS int max = plugin.getConfig().getInt("server-list.max"); if (event.getMaxPlayers() < max) { Bukkit.getConsoleSender().sendMessage(ChatColor.RED + "Your server max players is lower than QoL! This can cause unintended behaviour."); } if (max > 0) { event.setMaxPlayers(max); } // MOTD String motd = plugin.getConfig().getString("server-list.motd"); if (StringUtils.isNotBlank(motd)) { event.setMotd(motd); } // FAVICON String path = plugin.getConfig().getString("server-list.favicon"); if (StringUtils.isNotBlank(path)) { File file = new File(plugin.getDataFolder(), path); try { Image image = ImageIO.read(file); ImageIO.setCacheDirectory(plugin.getDataFolder()); image = image.getScaledInstance(64, 64, Image.SCALE_DEFAULT); CachedServerIcon favicon = Bukkit.loadServerIcon(toBufferedImage(image)); event.setServerIcon(favicon); } catch (Exception ex) { plugin.log("Could not load favicon from " + file.getAbsolutePath()); ex.printStackTrace(); } } } private static BufferedImage toBufferedImage(Image img) { if (img instanceof BufferedImage) { return (BufferedImage) img; } // Create a buffered image with transparency BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); // Draw the image on to the buffered image Graphics2D bGr = bimage.createGraphics(); bGr.drawImage(img, 0, 0, null); bGr.dispose(); // Return the buffered image return bimage; } }