diff options
Diffstat (limited to 'src/main/java/net/minecraft/server/NameReferencingFileConverter.java')
-rw-r--r-- | src/main/java/net/minecraft/server/NameReferencingFileConverter.java | 410 |
1 files changed, 410 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java new file mode 100644 index 00000000..01dedf2f --- /dev/null +++ b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java @@ -0,0 +1,410 @@ +package net.minecraft.server; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; + +import net.minecraft.util.com.google.common.base.Charsets; +import net.minecraft.util.com.google.common.collect.Iterators; +import net.minecraft.util.com.google.common.collect.Lists; +import net.minecraft.util.com.google.common.collect.Maps; +import net.minecraft.util.com.google.common.io.Files; +import net.minecraft.util.com.mojang.authlib.Agent; +import net.minecraft.util.com.mojang.authlib.GameProfile; +import net.minecraft.util.com.mojang.authlib.ProfileLookupCallback; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +// CraftBukkit - Imported for package private static methods + +public class NameReferencingFileConverter { + + private static final Logger e = LogManager.getLogger(); + public static final File a = new File("banned-ips.txt"); + public static final File b = new File("banned-players.txt"); + public static final File c = new File("ops.txt"); + public static final File d = new File("white-list.txt"); + + static List a(File file1, Map map) throws IOException { // CraftBukkit - Added throws + List list = Files.readLines(file1, Charsets.UTF_8); + Iterator iterator = list.iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + + s = s.trim(); + if (!s.startsWith("#") && s.length() >= 1) { + String[] astring = s.split("\\|"); + + map.put(astring[0].toLowerCase(Locale.ROOT), astring); + } + } + + return list; + } + + private static void a(MinecraftServer minecraftserver, Collection collection, ProfileLookupCallback profilelookupcallback) { + String[] astring = (String[]) Iterators.toArray(Iterators.filter(collection.iterator(), new PredicateEmptyList()), String.class); + + if (minecraftserver.getOnlineMode()) { + minecraftserver.getGameProfileRepository().findProfilesByNames(astring, Agent.MINECRAFT, profilelookupcallback); + } else { + String[] astring1 = astring; + int i = astring.length; + + for (int j = 0; j < i; ++j) { + String s = astring1[j]; + UUID uuid = EntityHuman.a(new GameProfile((UUID) null, s)); + GameProfile gameprofile = new GameProfile(uuid, s); + + profilelookupcallback.onProfileLookupSucceeded(gameprofile); + } + } + } + + public static boolean a(MinecraftServer minecraftserver) { + GameProfileBanList gameprofilebanlist = new GameProfileBanList(PlayerList.a); + + if (b.exists() && b.isFile()) { + if (gameprofilebanlist.c().exists()) { + /* CraftBukkit start - Exception is never thrown + try { + gameprofilebanlist.load(); + } catch (FileNotFoundException filenotfoundexception) { + e.warn("Could not load existing file " + gameprofilebanlist.c().getName(), filenotfoundexception); + } + */ + gameprofilebanlist.load(); + // CraftBukkit end + } + + try { + HashMap hashmap = Maps.newHashMap(); + + a(b, (Map) hashmap); + GameProfileBanListEntryConverter gameprofilebanlistentryconverter = new GameProfileBanListEntryConverter(minecraftserver, hashmap, gameprofilebanlist); + + a(minecraftserver, hashmap.keySet(), gameprofilebanlistentryconverter); + gameprofilebanlist.save(); + c(b); + return true; + } catch (IOException ioexception) { + e.warn("Could not read old user banlist to convert it!", ioexception); + return false; + } catch (FileConversionException fileconversionexception) { + e.error("Conversion failed, please try again later", fileconversionexception); + return false; + } + } else { + return true; + } + } + + public static boolean b(MinecraftServer minecraftserver) { + IpBanList ipbanlist = new IpBanList(PlayerList.b); + + if (a.exists() && a.isFile()) { + if (ipbanlist.c().exists()) { + /* CraftBukkit start - Exception is never thrown + try { + ipbanlist.load(); + } catch (FileNotFoundException filenotfoundexception) { + e.warn("Could not load existing file " + ipbanlist.c().getName(), filenotfoundexception); + } + */ + ipbanlist.load(); + // CraftBukkit end + } + + try { + HashMap hashmap = Maps.newHashMap(); + + a(a, (Map) hashmap); + Iterator iterator = hashmap.keySet().iterator(); + + while (iterator.hasNext()) { + String s = (String) iterator.next(); + String[] astring = (String[]) hashmap.get(s); + Date date = astring.length > 1 ? b(astring[1], (Date) null) : null; + String s1 = astring.length > 2 ? astring[2] : null; + Date date1 = astring.length > 3 ? b(astring[3], (Date) null) : null; + String s2 = astring.length > 4 ? astring[4] : null; + + ipbanlist.add(new IpBanEntry(s, date, s1, date1, s2)); + } + + ipbanlist.save(); + c(a); + return true; + } catch (IOException ioexception) { + e.warn("Could not parse old ip banlist to convert it!", ioexception); + return false; + } + } else { + return true; + } + } + + public static boolean c(MinecraftServer minecraftserver) { + OpList oplist = new OpList(PlayerList.c); + + if (c.exists() && c.isFile()) { + if (oplist.c().exists()) { + /* CraftBukkit start - Exception is never thrown + try { + oplist.load(); + } catch (FileNotFoundException filenotfoundexception) { + e.warn("Could not load existing file " + oplist.c().getName(), filenotfoundexception); + } + */ + oplist.load(); + // CraftBukkit end + } + + try { + List list = Files.readLines(c, Charsets.UTF_8); + OpListProfileCallback oplistprofilecallback = new OpListProfileCallback(minecraftserver, oplist); + + a(minecraftserver, list, oplistprofilecallback); + oplist.save(); + c(c); + return true; + } catch (IOException ioexception) { + e.warn("Could not read old oplist to convert it!", ioexception); + return false; + } catch (FileConversionException fileconversionexception) { + e.error("Conversion failed, please try again later", fileconversionexception); + return false; + } + } else { + return true; + } + } + + public static boolean d(MinecraftServer minecraftserver) { + WhiteList whitelist = new WhiteList(PlayerList.d); + + if (d.exists() && d.isFile()) { + if (whitelist.c().exists()) { + /* CraftBukkit start - Exception is never thrown + try { + whitelist.load(); + } catch (FileNotFoundException filenotfoundexception) { + e.warn("Could not load existing file " + whitelist.c().getName(), filenotfoundexception); + } + */ + whitelist.load(); + // CraftBukkit end + } + + try { + List list = Files.readLines(d, Charsets.UTF_8); + WhiteListProfileCallback whitelistprofilecallback = new WhiteListProfileCallback(minecraftserver, whitelist); + + a(minecraftserver, list, whitelistprofilecallback); + whitelist.save(); + c(d); + return true; + } catch (IOException ioexception) { + e.warn("Could not read old whitelist to convert it!", ioexception); + return false; + } catch (FileConversionException fileconversionexception) { + e.error("Conversion failed, please try again later", fileconversionexception); + return false; + } + } else { + return true; + } + } + + public static String a(String s) { + if (!UtilColor.b(s) && s.length() <= 16) { + MinecraftServer minecraftserver = MinecraftServer.getServer(); + GameProfile gameprofile = minecraftserver.getUserCache().a(s); + + if (gameprofile != null && gameprofile.getId() != null) { + return gameprofile.getId().toString(); + } else if (!minecraftserver.N() && minecraftserver.getOnlineMode()) { + ArrayList arraylist = Lists.newArrayList(); + GameProfileLookupCallback gameprofilelookupcallback = new GameProfileLookupCallback(minecraftserver, arraylist); + + a(minecraftserver, Lists.newArrayList(new String[] { s}), gameprofilelookupcallback); + return arraylist.size() > 0 && ((GameProfile) arraylist.get(0)).getId() != null ? ((GameProfile) arraylist.get(0)).getId().toString() : ""; + } else { + return EntityHuman.a(new GameProfile((UUID) null, s)).toString(); + } + } else { + return s; + } + } + + public static boolean a(DedicatedServer dedicatedserver, PropertyManager propertymanager) { + File file1 = d(propertymanager); + File file2 = new File(file1.getParentFile(), "playerdata"); + File file3 = new File(file1.getParentFile(), "unknownplayers"); + + if (file1.exists() && file1.isDirectory()) { + File[] afile = file1.listFiles(); + ArrayList arraylist = Lists.newArrayList(); + File[] afile1 = afile; + int i = afile.length; + + for (int j = 0; j < i; ++j) { + File file4 = afile1[j]; + String s = file4.getName(); + + if (s.toLowerCase(Locale.ROOT).endsWith(".dat")) { + String s1 = s.substring(0, s.length() - ".dat".length()); + + if (s1.length() > 0) { + arraylist.add(s1); + } + } + } + + try { + String[] astring = (String[]) arraylist.toArray(new String[arraylist.size()]); + PlayerDatFileConverter playerdatfileconverter = new PlayerDatFileConverter(dedicatedserver, file2, file3, file1, astring); + + a(dedicatedserver, Lists.newArrayList(astring), playerdatfileconverter); + return true; + } catch (FileConversionException fileconversionexception) { + e.error("Conversion failed, please try again later", fileconversionexception); + return false; + } + } else { + return true; + } + } + + private static void b(File file1) { + if (file1.exists()) { + if (!file1.isDirectory()) { + throw new FileConversionException("Can\'t create directory " + file1.getName() + " in world save directory.", (PredicateEmptyList) null); + } + } else if (!file1.mkdirs()) { + throw new FileConversionException("Can\'t create directory " + file1.getName() + " in world save directory.", (PredicateEmptyList) null); + } + } + + public static boolean a(PropertyManager propertymanager) { + boolean flag = b(propertymanager); + + flag = flag && c(propertymanager); + return flag; + } + + private static boolean b(PropertyManager propertymanager) { + boolean flag = false; + + if (b.exists() && b.isFile()) { + flag = true; + } + + boolean flag1 = false; + + if (a.exists() && a.isFile()) { + flag1 = true; + } + + boolean flag2 = false; + + if (c.exists() && c.isFile()) { + flag2 = true; + } + + boolean flag3 = false; + + if (d.exists() && d.isFile()) { + flag3 = true; + } + + if (!flag && !flag1 && !flag2 && !flag3) { + return true; + } else { + e.warn("**** FAILED TO START THE SERVER AFTER ACCOUNT CONVERSION!"); + e.warn("** please remove the following files and restart the server:"); + if (flag) { + e.warn("* " + b.getName()); + } + + if (flag1) { + e.warn("* " + a.getName()); + } + + if (flag2) { + e.warn("* " + c.getName()); + } + + if (flag3) { + e.warn("* " + d.getName()); + } + + return false; + } + } + + private static boolean c(PropertyManager propertymanager) { + File file1 = d(propertymanager); + + if (file1.exists() && file1.isDirectory()) { + String[] astring = file1.list(new DatFilenameFilter()); + + if (astring.length > 0) { + e.warn("**** DETECTED OLD PLAYER FILES IN THE WORLD SAVE"); + e.warn("**** THIS USUALLY HAPPENS WHEN THE AUTOMATIC CONVERSION FAILED IN SOME WAY"); + e.warn("** please restart the server and if the problem persists, remove the directory \'{}\'", new Object[] { file1.getPath()}); + return false; + } + } + + return true; + } + + private static File d(PropertyManager propertymanager) { + String s = propertymanager.getString("level-name", "world"); + File file1 = new File(s); + + return new File(file1, "players"); + } + + private static void c(File file1) { + File file2 = new File(file1.getName() + ".converted"); + + file1.renameTo(file2); + } + + private static Date b(String s, Date date) { + Date date1; + + try { + date1 = ExpirableListEntry.a.parse(s); + } catch (ParseException parseexception) { + date1 = date; + } + + return date1; + } + + static Logger a() { + return e; + } + + static Date a(String s, Date date) { + return b(s, date); + } + + static void a(File file1) { + b(file1); + } +} |