BukkitTelnet/src/main/java/me/totalfreedom/bukkittelnet/PlayerEventListener.java

167 lines
5 KiB
Java
Raw Normal View History

package me.totalfreedom.bukkittelnet;
2021-06-24 11:25:56 +00:00
import com.earth2me.essentials.Essentials;
import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
2020-03-30 06:05:25 +00:00
import me.totalfreedom.bukkittelnet.api.TelnetRequestUsageEvent;
2014-08-23 03:03:23 +00:00
import org.apache.commons.lang.StringUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
2020-03-30 06:05:25 +00:00
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
2021-06-24 11:25:56 +00:00
import org.json.JSONArray;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Map;
public class PlayerEventListener implements Listener
{
2020-03-30 06:05:25 +00:00
private static Essentials essentials = null;
private final BukkitTelnet plugin;
public PlayerEventListener(BukkitTelnet plugin)
{
this.plugin = plugin;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event)
{
triggerPlayerListUpdates();
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(PlayerQuitEvent event)
{
triggerPlayerListUpdates();
}
2020-03-30 06:05:25 +00:00
public static Essentials getEssentials()
{
Plugin ess = Bukkit.getPluginManager().getPlugin("Essentials");
if (ess instanceof Essentials)
{
2021-06-24 11:25:56 +00:00
essentials = (Essentials) ess;
2020-03-30 06:05:25 +00:00
return essentials;
}
return null;
}
private static BukkitTask updateTask = null;
public void triggerPlayerListUpdates()
{
if (updateTask != null)
{
updateTask.cancel();
}
updateTask = new BukkitRunnable()
{
@Override
public void run()
{
final SocketListener socketListener = plugin.telnet.getSocketListener();
if (socketListener != null)
{
2014-08-23 03:03:23 +00:00
final TelnetRequestDataTagsEvent event = new TelnetRequestDataTagsEvent();
Bukkit.getServer().getPluginManager().callEvent(event);
socketListener.triggerPlayerListUpdates(generatePlayerList(event.getDataTags()));
}
}
}.runTaskLater(plugin, 20L * 2L);
}
@SuppressWarnings("unchecked")
2014-08-23 03:03:23 +00:00
private static String generatePlayerList(final Map<Player, Map<String, Object>> dataTags)
{
final JSONArray players = new JSONArray();
2021-06-24 11:25:56 +00:00
for (Map.Entry<Player, Map<String, Object>> playerMapEntry : dataTags.entrySet())
{
final HashMap<String, String> info = new HashMap<>();
2021-06-24 11:25:56 +00:00
final Player player = playerMapEntry.getKey();
final Map<String, Object> playerTags = playerMapEntry.getValue();
2014-08-23 03:03:23 +00:00
info.put("name", player.getName());
info.put("ip", player.getAddress().getAddress().getHostAddress());
2014-08-23 03:03:23 +00:00
info.put("displayName", StringUtils.trimToEmpty(player.getDisplayName()));
info.put("uuid", player.getUniqueId().toString());
2021-06-24 11:25:56 +00:00
for (Map.Entry<String, Object> playerTagsEntry : playerTags.entrySet())
2014-08-23 03:03:23 +00:00
{
final Object value = playerTagsEntry.getValue();
info.put(playerTagsEntry.getKey(), value != null ? value.toString() : "null");
}
2021-06-24 11:25:56 +00:00
players.put(info);
}
final JSONObject response = new JSONObject();
response.put("players", players);
2021-06-24 11:25:56 +00:00
return response.toString();
}
2020-03-30 06:05:25 +00:00
private static BukkitTask usageUpdateTask = null;
// Just putting this stuff here
public void triggerUsageUpdates()
{
if (usageUpdateTask != null)
{
return;
}
2021-06-24 11:25:56 +00:00
usageUpdateTask = new BukkitRunnable()
2020-03-30 06:05:25 +00:00
{
@Override
public void run()
{
final SocketListener socketListener = plugin.telnet.getSocketListener();
if (socketListener != null)
{
final TelnetRequestUsageEvent event = new TelnetRequestUsageEvent();
Bukkit.getServer().getPluginManager().callEvent(event);
socketListener.triggerDataUsageUpdates(generateUsageStats());
}
}
}.runTaskTimer(plugin, 100L, 100L); // every 5 seconds
}
@SuppressWarnings("unchecked")
private static String generateUsageStats()
{
if (essentials == null)
{
essentials = getEssentials();
}
2021-06-24 11:25:56 +00:00
final JSONObject info = new JSONObject();
2020-03-30 06:05:25 +00:00
String cpuUsage = null;
String ramUsage = null;
String tps = null;
if (essentials != null)
{
2021-06-24 11:25:56 +00:00
tps = String.valueOf(String.valueOf(BigDecimal.valueOf(essentials.getTimer().getAverageTPS()).setScale(1, RoundingMode.CEILING)));
2020-03-30 06:05:25 +00:00
}
info.put("tps", tps);
2021-06-24 11:25:56 +00:00
return info.toString();
2020-03-30 06:05:25 +00:00
}
}