mirror of
https://github.com/EssentialsX/Essentials.git
synced 2024-09-28 15:47:26 +02:00
Convert ignore list storage to UUID-based (#3209)
As the title describes, this PR converts the ignore list storage from username-based to UUID-based. Fixes #239.
This commit is contained in:
parent
8ad55cb634
commit
1bc1f646fd
@ -42,6 +42,47 @@ public class EssentialsUpgrade {
|
||||
doneFile.load();
|
||||
}
|
||||
|
||||
public void convertIgnoreList() {
|
||||
if (doneFile.getBoolean("updateUsersIgnoreListUUID", false)) {
|
||||
return;
|
||||
}
|
||||
final File userdataFolder = new File(ess.getDataFolder(), "userdata");
|
||||
if (!userdataFolder.exists() || !userdataFolder.isDirectory()) {
|
||||
return;
|
||||
}
|
||||
final File[] userFiles = userdataFolder.listFiles();
|
||||
|
||||
for (File file : userFiles) {
|
||||
if (!file.isFile() || !file.getName().endsWith(".yml")) {
|
||||
continue;
|
||||
}
|
||||
final EssentialsConf config = new EssentialsConf(file);
|
||||
try {
|
||||
config.load();
|
||||
if (config.hasProperty("ignore")) {
|
||||
List<String> migratedIgnores = new ArrayList<>();
|
||||
for (String name : Collections.synchronizedList(config.getStringList("ignore"))) {
|
||||
if (name == null) {
|
||||
continue;
|
||||
}
|
||||
OfflinePlayer user = ((OfflinePlayer) ess.getOfflineUser(name).getBase());
|
||||
if (user != null) {
|
||||
migratedIgnores.add(user.getUniqueId().toString());
|
||||
}
|
||||
}
|
||||
config.removeProperty("ignore");
|
||||
config.setProperty("ignore", migratedIgnores);
|
||||
config.forceSave();
|
||||
}
|
||||
} catch (RuntimeException ex) {
|
||||
LOGGER.log(Level.INFO, "File: " + file.toString());
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
doneFile.setProperty("updateUsersIgnoreListUUID", true);
|
||||
doneFile.save();
|
||||
}
|
||||
|
||||
public void convertKits() {
|
||||
Kits kits = ess.getKits();
|
||||
EssentialsConf config = kits.getConfig();
|
||||
@ -713,5 +754,6 @@ public class EssentialsUpgrade {
|
||||
banFormatChange();
|
||||
warnMetrics();
|
||||
repairUserMap();
|
||||
convertIgnoreList();
|
||||
}
|
||||
}
|
||||
|
@ -470,19 +470,42 @@ public abstract class UserData extends PlayerExtension implements IConf {
|
||||
config.save();
|
||||
}
|
||||
|
||||
private List<String> ignoredPlayers;
|
||||
private List<UUID> ignoredPlayers;
|
||||
|
||||
public List<String> _getIgnoredPlayers() {
|
||||
return Collections.synchronizedList(config.getStringList("ignore"));
|
||||
public List<UUID> _getIgnoredPlayers() {
|
||||
List<UUID> players = new ArrayList<>();
|
||||
for (String uuid : config.getStringList("ignore")) {
|
||||
try {
|
||||
players.add(UUID.fromString(uuid));
|
||||
} catch (IllegalArgumentException ignored) {}
|
||||
}
|
||||
return Collections.synchronizedList(players);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setIgnoredPlayers(List<String> players) {
|
||||
List<UUID> uuids = new ArrayList<>();
|
||||
for (String player : players) {
|
||||
User user = ess.getOfflineUser(player);
|
||||
if (user == null) {
|
||||
return;
|
||||
}
|
||||
uuids.add(user.getBase().getUniqueId());
|
||||
}
|
||||
setIgnoredPlayerUUIDs(uuids);
|
||||
}
|
||||
|
||||
public void setIgnoredPlayerUUIDs(List<UUID> players) {
|
||||
if (players == null || players.isEmpty()) {
|
||||
ignoredPlayers = Collections.synchronizedList(new ArrayList<>());
|
||||
config.removeProperty("ignore");
|
||||
} else {
|
||||
ignoredPlayers = players;
|
||||
config.setProperty("ignore", players);
|
||||
List<String> uuids = new ArrayList<>();
|
||||
for (UUID uuid : players) {
|
||||
uuids.add(uuid.toString());
|
||||
}
|
||||
config.setProperty("ignore", uuids);
|
||||
}
|
||||
config.save();
|
||||
}
|
||||
@ -497,17 +520,19 @@ public abstract class UserData extends PlayerExtension implements IConf {
|
||||
}
|
||||
|
||||
public boolean isIgnoredPlayer(IUser user) {
|
||||
return (ignoredPlayers.contains(user.getName().toLowerCase(Locale.ENGLISH)) && !user.isIgnoreExempt());
|
||||
return ignoredPlayers.contains(user.getBase().getUniqueId()) && !user.isIgnoreExempt();
|
||||
}
|
||||
|
||||
public void setIgnoredPlayer(IUser user, boolean set) {
|
||||
final String entry = user.getName().toLowerCase(Locale.ENGLISH);
|
||||
UUID uuid = user.getBase().getUniqueId();
|
||||
if (set) {
|
||||
if (!ignoredPlayers.contains(entry)) ignoredPlayers.add(entry);
|
||||
} else {
|
||||
ignoredPlayers.remove(entry);
|
||||
if (!ignoredPlayers.contains(uuid)) {
|
||||
ignoredPlayers.add(uuid);
|
||||
}
|
||||
setIgnoredPlayers(ignoredPlayers);
|
||||
} else {
|
||||
ignoredPlayers.remove(uuid);
|
||||
}
|
||||
setIgnoredPlayerUUIDs(ignoredPlayers);
|
||||
}
|
||||
|
||||
private boolean godmode;
|
||||
|
@ -5,6 +5,7 @@ import org.bukkit.Server;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.earth2me.essentials.I18n.tl;
|
||||
|
||||
@ -18,8 +19,8 @@ public class Commandignore extends EssentialsCommand {
|
||||
protected void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception {
|
||||
if (args.length < 1) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (String s : user._getIgnoredPlayers()) {
|
||||
sb.append(s).append(" ");
|
||||
for (UUID uuid : user._getIgnoredPlayers()) {
|
||||
sb.append(ess.getUser(uuid).getName()).append(" ");
|
||||
}
|
||||
String ignoredList = sb.toString().trim();
|
||||
user.sendMessage(ignoredList.length() > 0 ? tl("ignoredList", ignoredList) : tl("noIgnored"));
|
||||
|
Loading…
Reference in New Issue
Block a user