diff --git a/Essentials/src/com/earth2me/essentials/EssentialsConf.java b/Essentials/src/com/earth2me/essentials/EssentialsConf.java index 3ce2151ea..2d5e550ad 100644 --- a/Essentials/src/com/earth2me/essentials/EssentialsConf.java +++ b/Essentials/src/com/earth2me/essentials/EssentialsConf.java @@ -170,7 +170,6 @@ public class EssentialsConf extends YamlConfiguration finally { inputStream.close(); - save(); } } catch (IOException ex) diff --git a/Essentials/src/com/earth2me/essentials/UUIDMap.java b/Essentials/src/com/earth2me/essentials/UUIDMap.java index b095b6b8e..ba712752b 100644 --- a/Essentials/src/com/earth2me/essentials/UUIDMap.java +++ b/Essentials/src/com/earth2me/essentials/UUIDMap.java @@ -117,6 +117,10 @@ public class UUIDMap public Future _writeUUIDMap() { final ConcurrentSkipListMap names = ess.getUserMap().getNames().clone(); + if (names.size() < 1) + { + return null; + } pendingDiskWrites.incrementAndGet(); Future future = EXECUTOR_SERVICE.submit(new WriteRunner(ess.getDataFolder(), userList, names, pendingDiskWrites)); return future; diff --git a/Essentials/src/com/earth2me/essentials/UserMap.java b/Essentials/src/com/earth2me/essentials/UserMap.java index ea20f8979..4983ebcb2 100644 --- a/Essentials/src/com/earth2me/essentials/UserMap.java +++ b/Essentials/src/com/earth2me/essentials/UserMap.java @@ -15,6 +15,7 @@ import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.ExecutionException; import net.ess3.api.IEssentials; +import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -33,7 +34,6 @@ public class UserMap extends CacheLoader implements IConf this.ess = ess; uuidMap = new UUIDMap(ess); users = CacheBuilder.newBuilder().maximumSize(ess.getSettings().getMaxUserCacheCount()).softValues().build(this); - loadAllUsersAsync(ess); } private void loadAllUsersAsync(final IEssentials ess) @@ -43,33 +43,34 @@ public class UserMap extends CacheLoader implements IConf @Override public void run() { - final File userdir = new File(ess.getDataFolder(), "userdata"); - if (!userdir.exists()) + synchronized (users) { - return; + final File userdir = new File(ess.getDataFolder(), "userdata"); + if (!userdir.exists()) + { + return; + } + keys.clear(); + names.clear(); + users.invalidateAll(); + for (String string : userdir.list()) + { + if (!string.endsWith(".yml")) + { + continue; + } + final String name = string.substring(0, string.length() - 4); + try + { + keys.add(UUID.fromString(name)); + } + catch (IllegalArgumentException ex) + { + //Ignore these users till they rejoin. + } + } + uuidMap.loadAllUsers(names, history); } - keys.clear(); - names.clear(); - users.invalidateAll(); - for (String string : userdir.list()) - { - if (!string.endsWith(".yml")) - { - continue; - } - final String name = string.substring(0, string.length() - 4); - try - { - keys.add(UUID.fromString(name)); - } - catch (IllegalArgumentException ex) - { - //Ignore these users till they rejoin. - } - } - - uuidMap.loadAllUsers(names, history); - } }); } @@ -164,7 +165,7 @@ public class UserMap extends CacheLoader implements IConf if (userFile.exists()) { - player = new OfflinePlayer(uuid, ess.getServer()); + player = new OfflinePlayer(uuid, ess.getServer()); final User user = new User(player, ess); ((OfflinePlayer)player).setName(user.getLastAccountName()); trackUUID(uuid, user.getName()); @@ -212,7 +213,7 @@ public class UserMap extends CacheLoader implements IConf { return history; } - + public List getUserHistory(final UUID uuid) { return history.get(uuid); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java index 4ec1a2594..9bf924e63 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandseen.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandseen.java @@ -74,9 +74,9 @@ public class Commandseen extends EssentialsCommand sender.sendMessage(tl("seenOnline", user.getDisplayName(), DateUtil.formatDateDiff(user.getLastLogin()))); List history = ess.getUserMap().getUserHistory(user.getBase().getUniqueId()); - if (history.size() > 1) + if (history != null && history.size() > 1) { - sender.sendMessage("User has also been known as: " + StringUtil.joinList(history)); //TODO: TL + sender.sendMessage(tl("seenAccounts", StringUtil.joinListSkip(", ", user.getName(), history))); } if (user.isAfk()) @@ -119,9 +119,9 @@ public class Commandseen extends EssentialsCommand } List history = ess.getUserMap().getUserHistory(user.getBase().getUniqueId()); - if (history.size() > 1) + if (history != null && history.size() > 1) { - sender.sendMessage("User has also been known as: " + StringUtil.joinList(history)); //TODO: TL + sender.sendMessage(tl("seenAccounts", StringUtil.joinListSkip(", ", user.getName(), history))); } if (user.getBase().isBanned()) diff --git a/Essentials/src/com/earth2me/essentials/utils/StringUtil.java b/Essentials/src/com/earth2me/essentials/utils/StringUtil.java index cd6c579f6..3c0ea9239 100644 --- a/Essentials/src/com/earth2me/essentials/utils/StringUtil.java +++ b/Essentials/src/com/earth2me/essentials/utils/StringUtil.java @@ -60,6 +60,40 @@ public class StringUtil } return buf.toString(); } + + public static String joinListSkip(String seperator, String skip, Object... list) + { + StringBuilder buf = new StringBuilder(); + for (Object each : list) + { + if (each.toString().equalsIgnoreCase(skip)) { + continue; + } + + if (buf.length() > 0) + { + buf.append(seperator); + } + + if (each instanceof Collection) + { + buf.append(joinListSkip(seperator, skip, ((Collection)each).toArray())); + } + else + { + try + { + buf.append(each.toString()); + } + catch (Exception e) + { + buf.append(each.toString()); + } + } + } + return buf.toString(); + } + private StringUtil() { } diff --git a/Essentials/src/messages.properties b/Essentials/src/messages.properties index 4f8ad02a8..5abc17c15 100644 --- a/Essentials/src/messages.properties +++ b/Essentials/src/messages.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 characters. mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_cs.properties b/Essentials/src/messages_cs.properties index 06c8df9fc..ed3a79825 100644 --- a/Essentials/src/messages_cs.properties +++ b/Essentials/src/messages_cs.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_da.properties b/Essentials/src/messages_da.properties index 67bce1408..d33b004f2 100644 --- a/Essentials/src/messages_da.properties +++ b/Essentials/src/messages_da.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_de.properties b/Essentials/src/messages_de.properties index 53a877a64..197240ec1 100644 --- a/Essentials/src/messages_de.properties +++ b/Essentials/src/messages_de.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_en.properties b/Essentials/src/messages_en.properties index 4f8ad02a8..5abc17c15 100644 --- a/Essentials/src/messages_en.properties +++ b/Essentials/src/messages_en.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 characters. mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_es.properties b/Essentials/src/messages_es.properties index 1aee41a3e..e19c297ea 100644 --- a/Essentials/src/messages_es.properties +++ b/Essentials/src/messages_es.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_et.properties b/Essentials/src/messages_et.properties index c8162637e..49b65fd58 100644 --- a/Essentials/src/messages_et.properties +++ b/Essentials/src/messages_et.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_fi.properties b/Essentials/src/messages_fi.properties index 85f660022..fa01cc3ea 100644 --- a/Essentials/src/messages_fi.properties +++ b/Essentials/src/messages_fi.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_fr.properties b/Essentials/src/messages_fr.properties index 3fe48b487..8df87422c 100644 --- a/Essentials/src/messages_fr.properties +++ b/Essentials/src/messages_fr.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_hu.properties b/Essentials/src/messages_hu.properties index 83a5e1350..7fb296deb 100644 --- a/Essentials/src/messages_hu.properties +++ b/Essentials/src/messages_hu.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_it.properties b/Essentials/src/messages_it.properties index 4a6bf21aa..d62baa616 100644 --- a/Essentials/src/messages_it.properties +++ b/Essentials/src/messages_it.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_ko.properties b/Essentials/src/messages_ko.properties index 68879257b..3d5fbee08 100644 --- a/Essentials/src/messages_ko.properties +++ b/Essentials/src/messages_ko.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_lt.properties b/Essentials/src/messages_lt.properties index 7c6875c43..68ad18671 100644 --- a/Essentials/src/messages_lt.properties +++ b/Essentials/src/messages_lt.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_nl.properties b/Essentials/src/messages_nl.properties index d27f378b9..b4efc24f4 100644 --- a/Essentials/src/messages_nl.properties +++ b/Essentials/src/messages_nl.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_pl.properties b/Essentials/src/messages_pl.properties index f47787651..2f3f26c4f 100644 --- a/Essentials/src/messages_pl.properties +++ b/Essentials/src/messages_pl.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_pt.properties b/Essentials/src/messages_pt.properties index 6090ec3b3..72e6d98ea 100644 --- a/Essentials/src/messages_pt.properties +++ b/Essentials/src/messages_pt.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_ro.properties b/Essentials/src/messages_ro.properties index 6c6211f83..5c36f98cb 100644 --- a/Essentials/src/messages_ro.properties +++ b/Essentials/src/messages_ro.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_ru.properties b/Essentials/src/messages_ru.properties index 7f31ec99f..dbeace14f 100644 --- a/Essentials/src/messages_ru.properties +++ b/Essentials/src/messages_ru.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_sv.properties b/Essentials/src/messages_sv.properties index 7ed3eaa64..3ec26213a 100644 --- a/Essentials/src/messages_sv.properties +++ b/Essentials/src/messages_sv.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_tr.properties b/Essentials/src/messages_tr.properties index 34cafa98c..8d80e596f 100644 --- a/Essentials/src/messages_tr.properties +++ b/Essentials/src/messages_tr.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_zh.properties b/Essentials/src/messages_zh.properties index 2ba82bce6..2f0947661 100644 --- a/Essentials/src/messages_zh.properties +++ b/Essentials/src/messages_zh.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_zh_HK.properties b/Essentials/src/messages_zh_HK.properties index 254ff4e70..82c97bf70 100644 --- a/Essentials/src/messages_zh_HK.properties +++ b/Essentials/src/messages_zh_HK.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/Essentials/src/messages_zh_TW.properties b/Essentials/src/messages_zh_TW.properties index 42611ef60..d1f61c169 100644 --- a/Essentials/src/messages_zh_TW.properties +++ b/Essentials/src/messages_zh_TW.properties @@ -545,3 +545,4 @@ weatherInvalidWorld=World named {0} not found\! gameModeInvalid=\u00a74You need to specify a valid player/mode. mailTooLong=\u00a74Mail message too long. Try to keep it below 1000 mailDelay=Too many mails have been sent within the last minute. Maximum\: {0} +seenAccounts=\u00a76Player has also been known as:\u00a7c {0} diff --git a/nbactions.xml b/nbactions.xml index 0842d88fd..23a1ac4b6 100644 --- a/nbactions.xml +++ b/nbactions.xml @@ -23,6 +23,7 @@ build package + dependency:copy