QoL/src/main/java/xyz/etztech/qol/listeners/ServerListPingListener.java

80 lines
2.5 KiB
Java

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;
}
}