package dev.alangomes.springspigot.util; import lombok.val; import org.apache.commons.lang.StringUtils; import org.bukkit.OfflinePlayer; import org.bukkit.Server; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.UUID; /** * Utilities to get sender id by the object and vice-versa, since storing the instance is not a good practice * (can cause memory issues if the sender quits and the object keep alive for too long) */ @Component public class ServerUtil { private static final String CONSOLE_SENDER_ID = "*console*"; @Autowired private Server server; /** * Get the most unique id available for the {@param sender}. * If the server is in online mode, it will return the {@param sender} UUID, otherwise will return the player username in lower case. * * @param sender the sender to get the id from * @return the sender id, null if null sender input */ public String getSenderId(CommandSender sender) { if (sender == null) { return null; } if (sender instanceof ConsoleCommandSender) { return CONSOLE_SENDER_ID; } if (!(sender instanceof OfflinePlayer)) { return null; } val player = (OfflinePlayer) sender; return server.getOnlineMode() ? player.getUniqueId().toString() : StringUtils.lowerCase(player.getName()); } /** * Return the {@link org.bukkit.command.CommandSender} associated to the {@param id}, normally used with {@link dev.alangomes.springspigot.util.ServerUtil#getSenderId} * * @param id the id of the sender * @return the sender associated with {@param id}, null if null id input */ public CommandSender getSenderFromId(String id) { if (id == null) { return null; } if (CONSOLE_SENDER_ID.equals(id)) { return server.getConsoleSender(); } if (id.length() <= 16) { return server.getPlayer(id); } return server.getPlayer(UUID.fromString(id)); } }