mirror of
https://github.com/TotalFreedomMC/OpenInv.git
synced 2025-08-04 19:46:07 +00:00
For improved compatibility, our own Levenshtein implementation
This commit is contained in:
parent
9a53e46dd3
commit
1c104b775f
1 changed files with 46 additions and 4 deletions
|
@ -85,8 +85,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
|
||||||
&& OpenInv.this.enderChests.get(key).isInUse()
|
&& OpenInv.this.enderChests.get(key).isInUse()
|
||||||
|| OpenInv.this.pluginUsage.containsKey(key);
|
|| OpenInv.this.pluginUsage.containsKey(key);
|
||||||
}
|
}
|
||||||
},
|
}, new Function<Player>() {
|
||||||
new Function<Player>() {
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(final Player value) {
|
public boolean run(final Player value) {
|
||||||
String key = OpenInv.this.playerLoader.getPlayerDataID(value);
|
String key = OpenInv.this.playerLoader.getPlayerDataID(value);
|
||||||
|
@ -233,6 +232,50 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
|
||||||
return this.inventoryAccess;
|
return this.inventoryAccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getLevenshteinDistance(final String string1, final String string2) {
|
||||||
|
if (string1 == null || string2 == null) {
|
||||||
|
throw new IllegalArgumentException("Strings must not be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string1.isEmpty()) {
|
||||||
|
return string2.length();
|
||||||
|
}
|
||||||
|
if (string2.isEmpty()) {
|
||||||
|
return string2.length();
|
||||||
|
}
|
||||||
|
if (string1.equals(string2)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int len1 = string1.length();
|
||||||
|
int len2 = string2.length();
|
||||||
|
|
||||||
|
int[] prevDistances = new int[len1 + 1];
|
||||||
|
int[] distances = new int[len1 + 1];
|
||||||
|
|
||||||
|
for (int i = 0; i <= len1; ++i) {
|
||||||
|
prevDistances[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i <= len2; ++i) {
|
||||||
|
// TODO: include tweaks available in Simmetrics?
|
||||||
|
char string2char = string2.charAt(i - 1);
|
||||||
|
distances[0] = i;
|
||||||
|
|
||||||
|
for (int j = 1; j <= len1; ++j) {
|
||||||
|
int cost = string1.charAt(j - 1) == string2char ? 0 : 1;
|
||||||
|
|
||||||
|
distances[j] = Math.min(Math.min(distances[j - 1] + 1, prevDistances[j] + 1), prevDistances[j - 1] + cost);
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] swap = prevDistances;
|
||||||
|
prevDistances = distances;
|
||||||
|
distances = swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
return prevDistances[len1];
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Collection<? extends Player> getOnlinePlayers() {
|
public Collection<? extends Player> getOnlinePlayers() {
|
||||||
|
|
||||||
|
@ -444,8 +487,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compatibility: Lang3 is only bundled with 1.8+
|
int currentMatch = this.getLevenshteinDistance(name, offline.getName());
|
||||||
int currentMatch = org.apache.commons.lang.StringUtils.getLevenshteinDistance(name, offline.getName());
|
|
||||||
|
|
||||||
if (currentMatch == 0) {
|
if (currentMatch == 0) {
|
||||||
return offline;
|
return offline;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue