Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.bukkit.command.defaults;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.util.Arrays;
- public class PingCommand extends BukkitCommand {
- public PingCommand(String name) {
- super(name);
- this.description = "Gets ping of player";
- this.usageMessage = "/ping [playername]";
- this.setPermission(null);
- this.setAliases(Arrays.asList("pings"));
- }
- @Override
- public boolean execute(CommandSender sender, String currentAlias, String[] args) {
- if (!testPermission(sender)) return true;
- if (sender instanceof Player) {
- Player player = (Player) sender;
- if (args.length < 1 || args[0].length() == 0) {
- sender.sendMessage("§a§l>> §7Your ping is " + colorPing(getPing(player)));
- }
- } else if (Bukkit.getPlayerExact(args[0]) != null) {
- Player player = Bukkit.getPlayerExact(args[0]);
- sender.sendMessage("§a§l>> §7" + player.getName() + "" + "'s ping is " + colorPing(getPing(player)));
- } else {
- sender.sendMessage(args[0] + " not found.");
- }
- return true;
- }
- private static final String CRAFT_BUKKIT_PACKAGE;
- private static final String NET_MINECRAFT_SERVER_PACKAGE;
- private static final Class CRAFT_PLAYER_CLASS;
- private static final Method CRAFT_PLAYER_GET_HANDLE_METHOD;
- private static final Class ENTITY_PLAYER_CLASS;
- private static final Field ENTITY_PLAYER_PING_FIELD;
- static {
- try {
- String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
- CRAFT_BUKKIT_PACKAGE = "org.bukkit.craftbukkit." + version + ".";
- NET_MINECRAFT_SERVER_PACKAGE = "net.minecraft.server." + version + ".";
- CRAFT_PLAYER_CLASS = Class.forName(CRAFT_BUKKIT_PACKAGE + "entity.CraftPlayer");
- CRAFT_PLAYER_GET_HANDLE_METHOD = CRAFT_PLAYER_CLASS.getDeclaredMethod("getHandle");
- CRAFT_PLAYER_GET_HANDLE_METHOD.setAccessible(true);
- ENTITY_PLAYER_CLASS = Class.forName(NET_MINECRAFT_SERVER_PACKAGE + "EntityPlayer");
- ENTITY_PLAYER_PING_FIELD = ENTITY_PLAYER_CLASS.getDeclaredField("ping");
- ENTITY_PLAYER_PING_FIELD.setAccessible(true);
- } catch (Exception e) {
- e.printStackTrace();
- throw new RuntimeException("Failed to initialize Bukkit/NMS Reflection");
- }
- }
- public static int getPing(Player player) {
- try {
- int ping = ENTITY_PLAYER_PING_FIELD.getInt(CRAFT_PLAYER_GET_HANDLE_METHOD.invoke(player));
- return ping > 0 ? ping : 0;
- } catch (Exception e) {
- return 1;
- }
- }
- public static String colorPing(int ping) {
- if (ping <= 40) {
- return ChatColor.GREEN + "" + ping;
- } else if (ping <= 70) {
- return ChatColor.YELLOW + "" + ping;
- } else if (ping <= 100) {
- return ChatColor.GOLD + "" + ping;
- } else {
- return ChatColor.RED + "" + ping;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement