Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
1bbdde683c |
@@ -201,6 +201,72 @@ public class OpenInv extends JavaPlugin {
|
||||
saveConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an OfflinePlayer by name.
|
||||
*
|
||||
* @param name the name of the Player
|
||||
* @return the OfflinePlayer, or null if no players have ever logged in
|
||||
*/
|
||||
public OfflinePlayer matchPlayer(String name) {
|
||||
|
||||
// Warn if called on the main thread - if we resort to searching offline players, this may take several seconds.
|
||||
if (getServer().isPrimaryThread()) {
|
||||
getLogger().warning("Call to OpenInv#matchPlayer made on the main thread!");
|
||||
getLogger().warning("This can cause the server to hang, potentially severely.");
|
||||
getLogger().warning("Trace:");
|
||||
for (StackTraceElement element : new Throwable().fillInStackTrace().getStackTrace()) {
|
||||
getLogger().warning(element.toString());
|
||||
}
|
||||
}
|
||||
|
||||
OfflinePlayer player = getServer().getPlayerExact(name);
|
||||
|
||||
if (player != null) {
|
||||
return player;
|
||||
}
|
||||
|
||||
player = getServer().getOfflinePlayer(name);
|
||||
|
||||
/*
|
||||
* Compatibility: Pre-UUID, getOfflinePlayer always returns an OfflinePlayer. Post-UUID,
|
||||
* getOfflinePlayer will return null if no matching player is found. To preserve
|
||||
* compatibility, only return the player if they have played before. Ignoring current online
|
||||
* status is fine, they'd have been found by getPlayerExact otherwise.
|
||||
*/
|
||||
if (player != null && player.hasPlayedBefore()) {
|
||||
return player;
|
||||
}
|
||||
|
||||
player = getServer().getPlayer(name);
|
||||
|
||||
if (player != null) {
|
||||
return player;
|
||||
}
|
||||
|
||||
int bestMatch = Integer.MAX_VALUE;
|
||||
for (OfflinePlayer offline : getServer().getOfflinePlayers()) {
|
||||
if (offline.getName() == null) {
|
||||
// Loaded by UUID only, name has never been looked up.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Compatibility: Lang3 is only bundled with 1.8+
|
||||
int currentMatch = org.apache.commons.lang.StringUtils.getLevenshteinDistance(name, offline.getName());
|
||||
|
||||
if (currentMatch == 0) {
|
||||
return offline;
|
||||
}
|
||||
|
||||
if (currentMatch < bestMatch) {
|
||||
bestMatch = currentMatch;
|
||||
player = offline;
|
||||
}
|
||||
}
|
||||
|
||||
// Only null if no players have played ever, otherwise even the worst match will do.
|
||||
return player;
|
||||
}
|
||||
|
||||
public static void ShowHelp(Player player) {
|
||||
player.sendMessage(ChatColor.GREEN + "/openinv <Player> - Open a player's inventory");
|
||||
player.sendMessage(ChatColor.GREEN + " (aliases: oi, inv, open)");
|
||||
|
@@ -17,9 +17,7 @@
|
||||
package com.lishid.openinv.commands;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.Command;
|
||||
@@ -75,20 +73,13 @@ public class OpenEnderPluginCommand implements CommandExecutor {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<Player> matches = Bukkit.matchPlayer(name);
|
||||
final OfflinePlayer offlinePlayer;
|
||||
if (!matches.isEmpty()) {
|
||||
offlinePlayer = matches.get(0);
|
||||
} else {
|
||||
offlinePlayer = Bukkit.getOfflinePlayer(name);
|
||||
}
|
||||
if (!player.isOnline()) {
|
||||
return;
|
||||
}
|
||||
final OfflinePlayer offlinePlayer = plugin.matchPlayer(name);
|
||||
|
||||
if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) {
|
||||
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||
return;
|
||||
}
|
||||
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -98,6 +89,7 @@ public class OpenEnderPluginCommand implements CommandExecutor {
|
||||
openInventory(player, offlinePlayer);
|
||||
}
|
||||
}.runTask(plugin);
|
||||
|
||||
}
|
||||
}.runTaskAsynchronously(plugin);
|
||||
|
||||
|
@@ -17,9 +17,7 @@
|
||||
package com.lishid.openinv.commands;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.Command;
|
||||
@@ -75,20 +73,13 @@ public class OpenInvPluginCommand implements CommandExecutor {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
List<Player> matches = Bukkit.matchPlayer(name);
|
||||
final OfflinePlayer offlinePlayer;
|
||||
if (!matches.isEmpty()) {
|
||||
offlinePlayer = matches.get(0);
|
||||
} else {
|
||||
offlinePlayer = Bukkit.getOfflinePlayer(name);
|
||||
}
|
||||
if (!player.isOnline()) {
|
||||
return;
|
||||
}
|
||||
final OfflinePlayer offlinePlayer = plugin.matchPlayer(name);
|
||||
|
||||
if (offlinePlayer == null || !offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline()) {
|
||||
player.sendMessage(ChatColor.RED + "Player not found!");
|
||||
return;
|
||||
}
|
||||
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -98,6 +89,7 @@ public class OpenInvPluginCommand implements CommandExecutor {
|
||||
openInventory(player, offlinePlayer);
|
||||
}
|
||||
}.runTask(plugin);
|
||||
|
||||
}
|
||||
}.runTaskAsynchronously(plugin);
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
name: OpenInv
|
||||
main: com.lishid.openinv.OpenInv
|
||||
version: 2.4.8
|
||||
version: 2.4.9
|
||||
author: lishid
|
||||
authors: [Jikoo]
|
||||
description: >
|
||||
|
Reference in New Issue
Block a user