summaryrefslogtreecommitdiffstats
path: root/Essentials2Compat/src/com/earth2me/essentials/UpdateUserFiles.java
diff options
context:
space:
mode:
Diffstat (limited to 'Essentials2Compat/src/com/earth2me/essentials/UpdateUserFiles.java')
-rw-r--r--Essentials2Compat/src/com/earth2me/essentials/UpdateUserFiles.java171
1 files changed, 171 insertions, 0 deletions
diff --git a/Essentials2Compat/src/com/earth2me/essentials/UpdateUserFiles.java b/Essentials2Compat/src/com/earth2me/essentials/UpdateUserFiles.java
new file mode 100644
index 000000000..9f969bc90
--- /dev/null
+++ b/Essentials2Compat/src/com/earth2me/essentials/UpdateUserFiles.java
@@ -0,0 +1,171 @@
+package com.earth2me.essentials;
+
+import com.google.common.io.PatternFilenameFilter;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import net.ess3.api.IEssentials;
+import net.ess3.api.IUser;
+import net.ess3.api.InvalidNameException;
+import net.ess3.api.NoLoanPermittedException;
+import net.ess3.api.UserDoesNotExistException;
+import net.ess3.user.User;
+import net.ess3.user.UserBase;
+import org.bukkit.Material;
+import org.bukkit.OfflinePlayer;
+
+
+class UpdateUserFiles
+{
+ private static final String BROKENNAME = "BROKENNAME";
+ private final IEssentials ess;
+
+ public UpdateUserFiles(File folder, IEssentials ess)
+ {
+ this.ess = ess;
+ for (String filename : folder.list(new PatternFilenameFilter(".+\\.yml")))
+ {
+ File file = new File(folder, filename);
+ String name = filename.substring(0, filename.length() - 4);
+ if (name.contains("_"))
+ {
+ String origName = name;
+ name = getRealName(name);
+ if (name.equals(BROKENNAME))
+ {
+ ess.getLogger().warning("Could not convert player " + origName);
+ continue;
+ }
+ }
+ UserData userData = new UserData(ess, file);
+ if (userData.isNPC())
+ {
+ ess.getEconomy().createNPC(name);
+ try
+ {
+ ess.getEconomy().setMoney(name, userData.getMoney());
+ }
+ catch (UserDoesNotExistException ex)
+ {
+ ess.getLogger().log(Level.WARNING, "Could not convert player " + name, ex);
+ }
+ catch (NoLoanPermittedException ex)
+ {
+ ess.getLogger().log(Level.WARNING, "Could not convert player " + name, ex);
+ }
+ }
+ else
+ {
+ IUser user = ess.getUserMap().getUser(name);
+ if (user == null) {
+ try
+ {
+ user = new User(ess.getServer().getOfflinePlayer(name), ess);
+ }
+ catch (InvalidNameException ex)
+ {
+ ess.getLogger().log(Level.WARNING, "Could not convert player " + name, ex);
+ continue;
+ }
+ }
+ net.ess3.user.UserData data = user.getData();
+ data.setPowerToolsEnabled(userData.arePowerToolsEnabled());
+ data.getBan().setReason(userData.getBanReason());
+ data.getBan().setTimeout(userData.getBanTimeout());
+ userData.getHomes();
+ for (String playerName : userData.getIgnoredPlayers())
+ {
+ data.setIgnore(playerName.toLowerCase(Locale.ENGLISH), true);
+ }
+
+ data.setJail(userData.getJail());
+ data.setTimestamp(net.ess3.user.UserData.TimestampType.JAIL, userData.getJailTimeout());
+ for (String kit : userData.getKitTimestamps())
+ {
+ data.setTimestamp(net.ess3.user.UserData.TimestampType.KIT, kit, userData.getKitTimestamp(kit));
+ }
+ data.setTimestamp(net.ess3.user.UserData.TimestampType.LASTHEAL, userData.getLastHealTimestamp());
+ data.setLastLocation(userData.getLastLocation());
+ data.setTimestamp(net.ess3.user.UserData.TimestampType.LOGIN, userData.getLastLogin());
+ data.setIpAddress(userData.getLastLoginAddress());
+ data.setTimestamp(net.ess3.user.UserData.TimestampType.LOGOUT, userData.getLastLogout());
+ data.setTimestamp(net.ess3.user.UserData.TimestampType.LASTTELEPORT, userData.getLastTeleportTimestamp());
+ for (String mail : userData.getMails())
+ {
+ data.addMail(mail);
+ }
+ data.setMoney(userData.getMoney());
+ data.setTimestamp(net.ess3.user.UserData.TimestampType.MUTE, userData.getMuteTimeout());
+ data.setMuted(userData.getMuted());
+ data.setNickname(userData.getNickname());
+ for (String string : userData.getPowertools())
+ {
+ try
+ {
+ int id = Integer.parseInt(string);
+ Material mat = Material.getMaterial(id);
+ if (mat != null)
+ {
+ data.setPowertool(mat, userData.getPowertool(id));
+ }
+ }
+ catch (NumberFormatException ex)
+ {
+ }
+ }
+ for (Integer integer : userData.getUnlimited())
+ {
+ Material mat = Material.getMaterial(integer);
+ if (mat != null)
+ {
+ data.setUnlimited(mat, true);
+ }
+ }
+ data.setAfk(userData.isAfk());
+ data.setGodmode(userData.isGodModeEnabled());
+ data.setJailed(userData.isJailed());
+ data.setMuted(userData.isMuted());
+ data.setSocialspy(userData.isSocialSpyEnabled());
+ data.setTeleportEnabled(userData.isTeleportEnabled());
+ user.queueSave();
+ }
+ }
+ }
+
+ private String getRealName(String name)
+ {
+ String realname = getPlayer(name);
+ return realname == null ? BROKENNAME : realname;
+ }
+ private final Map<String, String> players = new HashMap<String, String>();
+
+ private String getPlayer(String check)
+ {
+ synchronized (players)
+ {
+ if (players.isEmpty())
+ {
+ File worldFolder = ess.getServer().getWorlds().get(0).getWorldFolder();
+ File playersFolder = new File(worldFolder, "players");
+ for (String filename : playersFolder.list(new PatternFilenameFilter(".+\\.dat")))
+ {
+ String name = filename.substring(0, filename.length() - 4).toLowerCase(Locale.ENGLISH);
+ String sanitizedName = Util.sanitizeFileName(name);
+ String mapName = players.get(sanitizedName);
+ if (mapName != null && !mapName.equals(name))
+ {
+ players.put(sanitizedName, BROKENNAME);
+ }
+ else
+ {
+ players.put(sanitizedName, name);
+ }
+ }
+ }
+ }
+ return players.get(check);
+ }
+}