From 8c3dc12658a92cfeca8b66dbbb02c904c161b122 Mon Sep 17 00:00:00 2001 From: Xephi Date: Tue, 1 Apr 2014 10:32:27 +0200 Subject: [PATCH] Update 3.3.5 //Changes 3.3.5:// * Now Support our sponsor ipClean feature ( Get player real ip through their servers ) * Now Cache correctly Item Custom Names and Lores * Fix FlatToSQL converter * Add /authme getip command, perm : authme.admin.getip * Implement correctly XenForo Support * Fix maxregperip * Fix maxloginperip * Preparation for next features, coming soon ! --- pom.xml | 4 +- src/main/java/fr/xephi/authme/AuthMe.java | 59 ++-- src/main/java/fr/xephi/authme/api/API.java | 2 +- .../xephi/authme/cache/backup/FileCache.java | 76 +++++- .../xephi/authme/cache/limbo/LimboCache.java | 2 +- .../xephi/authme/commands/AdminCommand.java | 27 +- .../xephi/authme/commands/LogoutCommand.java | 2 +- .../authme/commands/UnregisterCommand.java | 4 +- .../fr/xephi/authme/converter/FlatToSql.java | 45 ++-- .../authme/datasource/MySQLDataSource.java | 64 ++++- .../authme/listener/AuthMePlayerListener.java | 51 ++-- .../authme/listener/AuthMeServerListener.java | 4 +- .../process/login/AsyncronousLogin.java | 9 +- .../login/ProcessSyncronousPlayerLogin.java | 2 +- .../process/register/AsyncronousRegister.java | 9 +- .../ProcessSyncronousEmailRegister.java | 4 +- .../ProcessSyncronousPasswordRegister.java | 6 +- .../fr/xephi/authme/settings/Settings.java | 251 +++++++----------- .../fr/xephi/authme/threads/MySQLThread.java | 66 ++++- src/main/resources/config.yml | 9 +- src/main/resources/messages_cz.yml | 26 +- src/main/resources/messages_ru.yml | 102 +++---- src/main/resources/plugin.yml | 6 +- 23 files changed, 489 insertions(+), 341 deletions(-) diff --git a/pom.xml b/pom.xml index 765c581b5..6fc8ce544 100644 --- a/pom.xml +++ b/pom.xml @@ -24,12 +24,12 @@ - 3.3.4 + 3.3.5 org.bukkit craftbukkit - 1.7.2-R0.3 + 1.7.5-R0.1-SNAPSHOT net.milkbowl.vault diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 030eeb7e0..310031c53 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -1,10 +1,11 @@ package fr.xephi.authme; +import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; +import java.io.InputStreamReader; import java.io.OutputStream; -import java.net.InetAddress; import java.net.URL; import java.net.URLConnection; import java.util.Calendar; @@ -29,7 +30,6 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; - import com.earth2me.essentials.Essentials; import com.maxmind.geoip.LookupService; import com.onarandombox.MultiverseCore.MultiverseCore; @@ -105,6 +105,7 @@ public class AuthMe extends JavaPlugin { public LookupService ls = null; public boolean antibotMod = false; public boolean delayedAntiBot = true; + protected static String vgUrl = "http://monitor-1.verygames.net/api/?action=ipclean-real-ip&out=raw&ip=%IP%&port=%PORT%"; public Settings getSettings() { return settings; @@ -532,9 +533,6 @@ public class AuthMe extends JavaPlugin { player.getInventory().setArmorContents(limbo.getArmour()); player.getInventory().setContents(limbo.getInventory()); } - if (!limbo.getLoc().getChunk().isLoaded()) { - limbo.getLoc().getChunk().load(); - } player.teleport(limbo.getLoc()); this.utils.addNormal(player, limbo.getGroup()); player.setOp(limbo.getOperator()); @@ -690,7 +688,8 @@ public class AuthMe extends JavaPlugin { ConsoleLogger.info("AutoPurgeDatabase : Remove " + i + " EssentialsFiles"); } - public Location getSpawnLocation(Player player, World world) { + public Location getSpawnLocation(Player player) { + World world = player.getWorld(); String[] spawnPriority = Settings.spawnPriority.split(","); Location spawnLoc = world.getSpawnLocation(); int i = 3; @@ -727,9 +726,8 @@ public class AuthMe extends JavaPlugin { } private Location getEssentialsSpawn() { - if (essentialsSpawn != null) { + if (essentialsSpawn != null) return essentialsSpawn; - } return null; } @@ -766,8 +764,8 @@ public class AuthMe extends JavaPlugin { } catch (Exception e) {} } } - - public String getCountryCode(InetAddress ip) { + + public String getCountryCode(String ip) { try { if (ls == null) ls = new LookupService(new File(getDataFolder(), "GeoIP.dat")); @@ -778,7 +776,7 @@ public class AuthMe extends JavaPlugin { return null; } - public String getCountryName(InetAddress ip) { + public String getCountryName(String ip) { try { if (ls == null) ls = new LookupService(new File(getDataFolder(), "GeoIP.dat")); @@ -821,38 +819,63 @@ public class AuthMe extends JavaPlugin { message = message.replace("{PLAYER}", player.getName()); message = message.replace("{ONLINE}", ""+this.getServer().getOnlinePlayers().length); message = message.replace("{MAXPLAYERS}", ""+this.getServer().getMaxPlayers()); - message = message.replace("{IP}", player.getAddress().getAddress().getHostAddress()); + message = message.replace("{IP}", getIP(player)); message = message.replace("{LOGINS}", ""+PlayerCache.getInstance().getLogged()); message = message.replace("{WORLD}", player.getWorld().getName()); message = message.replace("{SERVER}", this.getServer().getServerName()); message = message.replace("{VERSION}", this.getServer().getBukkitVersion()); - message = message.replace("{COUNTRY}", this.getCountryName(player.getAddress().getAddress())); + message = message.replace("{COUNTRY}", this.getCountryName(getIP(player))); } catch (Exception e) {} return message; } - public String getIP(Player player, String name) { + public String getIP(Player player) { + String name = player.getName().toLowerCase(); String ip = player.getAddress().getAddress().getHostAddress(); if (Settings.bungee) { if (realIp.containsKey(name)) ip = realIp.get(name); } + if (Settings.checkVeryGames) + if (getVeryGamesIP(player) != null) + ip = getVeryGamesIP(player); return ip; } - public boolean isLoggedIp(String ip) { + public boolean isLoggedIp(String name, String ip) { for (Player player : this.getServer().getOnlinePlayers()) { - if(ip.equalsIgnoreCase(getIP(player, player.getName())) && database.isLogged(player.getName().toLowerCase())) + if(ip.equalsIgnoreCase(getIP(player)) && database.isLogged(player.getName().toLowerCase()) && !player.getName().equalsIgnoreCase(name)) return true; } return false; } - public boolean hasJoinedIp(String ip) { + public boolean hasJoinedIp(String name, String ip) { for (Player player : this.getServer().getOnlinePlayers()) { - if(ip.equalsIgnoreCase(getIP(player, player.getName()))) + if(ip.equalsIgnoreCase(getIP(player)) && !player.getName().equalsIgnoreCase(name)) return true; } return false; } + + /** + * Get Player real IP through VeryGames method + * @param Player player + */ + public String getVeryGamesIP(Player player) { + String realIP = null; + String sUrl = vgUrl; + sUrl = sUrl.replace("%IP%", player.getAddress().getAddress().getHostAddress()).replace("%PORT%", ""+player.getAddress().getPort()); + try { + URL url = new URL(sUrl); + URLConnection urlc = url.openConnection(); + BufferedReader in = new BufferedReader(new InputStreamReader(urlc.getInputStream())); + String inputLine = in.readLine(); + if (inputLine != null && !inputLine.isEmpty() && !inputLine.equalsIgnoreCase("error")) { + realIP = inputLine; + } + } catch (Exception e) { + } + return realIP; + } } diff --git a/src/main/java/fr/xephi/authme/api/API.java b/src/main/java/fr/xephi/authme/api/API.java index ccc7179f6..e34eebcb0 100644 --- a/src/main/java/fr/xephi/authme/api/API.java +++ b/src/main/java/fr/xephi/authme/api/API.java @@ -6,7 +6,6 @@ import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; - import fr.xephi.authme.AuthMe; import fr.xephi.authme.Utils; import fr.xephi.authme.cache.auth.PlayerAuth; @@ -176,4 +175,5 @@ public class API { public static void forceLogin(Player player) { instance.management.performLogin(player, "dontneed", true); } + } diff --git a/src/main/java/fr/xephi/authme/cache/backup/FileCache.java b/src/main/java/fr/xephi/authme/cache/backup/FileCache.java index ad62aa4e5..a61770359 100644 --- a/src/main/java/fr/xephi/authme/cache/backup/FileCache.java +++ b/src/main/java/fr/xephi/authme/cache/backup/FileCache.java @@ -3,6 +3,8 @@ package fr.xephi.authme.cache.backup; import java.io.File; import java.io.FileWriter; +import java.util.ArrayList; +import java.util.List; import java.util.Scanner; import org.bukkit.Material; @@ -53,6 +55,8 @@ public class FileCache { int amount = 0; int durability = 0; String enchList = ""; + String name = ""; + String lores = ""; if (invstack[i] != null) { itemid = invstack[i].getType().name(); amount = invstack[i].getAmount(); @@ -60,9 +64,22 @@ public class FileCache { for(Enchantment e : invstack[i].getEnchantments().keySet()) { enchList = enchList.concat(e.getName()+":"+invstack[i].getEnchantmentLevel(e)+":"); } + if (enchList.length() > 1) + enchList = enchList.substring(0, enchList.length() - 1); + if (invstack[i].hasItemMeta()) { + if (invstack[i].getItemMeta().hasDisplayName()) { + name = invstack[i].getItemMeta().getDisplayName(); + } + if (invstack[i].getItemMeta().hasLore()) { + for (String lore : invstack[i].getItemMeta().getLore()) { + lores = lore + "%newline%"; + } + } + } } - writer.write("i" + ":" + itemid + ":" + amount + ":" - + durability + ":"+ enchList + "\r\n"); + String writeItem = "i" + ":" + itemid + ":" + amount + ":" + + durability + ":"+ enchList + ";" + name + "\\*" + lores + "\r\n"; + writer.write(writeItem); writer.flush(); } @@ -73,16 +90,31 @@ public class FileCache { int amount = 0; int durability = 0; String enchList = ""; + String name = ""; + String lores = ""; if (armorstack[i] != null) { itemid = armorstack[i].getType().name(); amount = armorstack[i].getAmount(); durability = armorstack[i].getDurability(); for(Enchantment e : armorstack[i].getEnchantments().keySet()) { enchList = enchList.concat(e.getName()+":"+armorstack[i].getEnchantmentLevel(e)+":"); - } + } + if (enchList.length() > 1) + enchList = enchList.substring(0, enchList.length() - 1); + if (armorstack[i].hasItemMeta()) { + if (armorstack[i].getItemMeta().hasDisplayName()) { + name = armorstack[i].getItemMeta().getDisplayName(); + } + if (armorstack[i].getItemMeta().hasLore()) { + for (String lore : armorstack[i].getItemMeta().getLore()) { + lores = lore + "%newline%"; + } + } + } } - writer.write("w" + ":" + itemid + ":" + amount + ":" - + durability + ":"+ enchList + "\r\n"); + String writeItem = "w" + ":" + itemid + ":" + amount + ":" + + durability + ":"+ enchList + ";" + name + "\\*" + lores + "\r\n"; + writer.write(writeItem); writer.flush(); } writer.close(); @@ -111,7 +143,7 @@ public class FileCache { int i = 0; int a = 0; while (reader.hasNextLine()) { - final String line = reader.nextLine(); + String line = reader.nextLine(); if (!line.contains(":")) { // the fist line represent the player group, operator status and flying status @@ -130,10 +162,20 @@ public class FileCache { continue; } - final String[] in = line.split(":"); - if (!in[0].equals("i") && !in[0].equals("w")) { + if (!line.startsWith("i") && !line.startsWith("w")) { continue; } + String lores = ""; + String name = ""; + if (line.split("\\*").length > 1) { + lores = line.split("\\*")[1]; + line = line.split("\\*")[0]; + } + if (line.split(";").length > 1) { + name = line.split(";")[1]; + line = line.split(";")[0]; + } + final String[] in = line.split(":"); // can enchant item? size ofstring in file - 4 all / 2 = number of enchant if (in[0].equals("i")) { stacki[i] = new ItemStack(Material.getMaterial(in[1]), @@ -144,6 +186,15 @@ public class FileCache { k++; } } + if (!name.isEmpty()) + stacki[i].getItemMeta().setDisplayName(name); + if (!lores.isEmpty()) { + List loreList = new ArrayList(); + for (String s : lores.split("%newline%")) { + loreList.add(s); + } + stacki[i].getItemMeta().setLore(loreList); + } i++; } else { stacka[a] = new ItemStack(Material.getMaterial(in[1]), @@ -154,6 +205,15 @@ public class FileCache { k++; } } + if (!name.isEmpty()) + stacka[a].getItemMeta().setDisplayName(name); + if (!lores.isEmpty()) { + List loreList = new ArrayList(); + for (String s : lores.split("%newline%")) { + loreList.add(s); + } + stacka[a].getItemMeta().setLore(loreList); + } a++; } } diff --git a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java index 265cc974d..87f4aa6bd 100644 --- a/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java +++ b/src/main/java/fr/xephi/authme/cache/limbo/LimboCache.java @@ -89,7 +89,7 @@ public class LimboCache { gameMode = GameMode.SURVIVAL; } if(player.isDead()) { - loc = plugin.getSpawnLocation(player, player.getWorld()); + loc = plugin.getSpawnLocation(player); } cache.put(player.getName().toLowerCase(), new LimboPlayer(name, loc, inv, arm, gameMode, operator, playerGroup, flying)); } diff --git a/src/main/java/fr/xephi/authme/commands/AdminCommand.java b/src/main/java/fr/xephi/authme/commands/AdminCommand.java index 057841db9..1b36c3a2d 100644 --- a/src/main/java/fr/xephi/authme/commands/AdminCommand.java +++ b/src/main/java/fr/xephi/authme/commands/AdminCommand.java @@ -302,9 +302,13 @@ public class AdminCommand implements CommandExecutor { return true; } else if (args[0].equalsIgnoreCase("convertflattosql")) { try { - FlatToSql.FlatToSqlConverter(); - if (sender instanceof Player) - sender.sendMessage("[AuthMe] FlatFile converted to authme.sql file"); + FlatToSql converter = new FlatToSql(); + if (sender instanceof Player) { + if (converter.convert()) + sender.sendMessage("[AuthMe] FlatFile converted to authme.sql file"); + else sender.sendMessage("[AuthMe] Error while converting to authme.sql"); + } + } catch (IOException e) { e.printStackTrace(); } catch (NullPointerException ex) { @@ -506,7 +510,7 @@ public class AdminCommand implements CommandExecutor { if (target != null) { if (target.isOnline()) { if (Settings.isTeleportToSpawnEnabled) { - Location spawn = plugin.getSpawnLocation(target, target.getWorld()); + Location spawn = plugin.getSpawnLocation(target); SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(target, target.getLocation(), spawn, false); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { @@ -578,6 +582,21 @@ public class AdminCommand implements CommandExecutor { new RoyalAuthConverter(plugin); sender.sendMessage("[AuthMe] RoyalAuth database has been imported correctly"); return true; + } else if (args[0].equalsIgnoreCase("getip")) { + if (args.length < 2) { + sender.sendMessage("Usage : /authme getip onlinePlayerName"); + return true; + } + if (Bukkit.getOfflinePlayer(args[1]).isOnline()) { + Player player = Bukkit.getPlayer(args[1]); + sender.sendMessage(player.getName() + " actual ip is : " + player.getAddress().getAddress().getHostAddress() + ":" + player.getAddress().getPort()); + sender.sendMessage(player.getName() + " real ip is : " + plugin.getIP(player)); + return true; + } else { + sender.sendMessage("This player is not actually online"); + sender.sendMessage("Usage : /authme getip onlinePlayerName"); + return true; + } } else { sender.sendMessage("Usage: /authme reload|register playername password|changepassword playername password|unregister playername"); } diff --git a/src/main/java/fr/xephi/authme/commands/LogoutCommand.java b/src/main/java/fr/xephi/authme/commands/LogoutCommand.java index 1a218d695..28aaa88e0 100644 --- a/src/main/java/fr/xephi/authme/commands/LogoutCommand.java +++ b/src/main/java/fr/xephi/authme/commands/LogoutCommand.java @@ -70,7 +70,7 @@ public class LogoutCommand implements CommandExecutor { database.setUnlogged(name); if (Settings.isTeleportToSpawnEnabled) { - Location spawnLoc = plugin.getSpawnLocation(player, player.getWorld()); + Location spawnLoc = plugin.getSpawnLocation(player); AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, spawnLoc); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { diff --git a/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java b/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java index 4e2c63289..1998645fb 100644 --- a/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java +++ b/src/main/java/fr/xephi/authme/commands/UnregisterCommand.java @@ -71,7 +71,7 @@ public class UnregisterCommand implements CommandExecutor { } if(Settings.isForcedRegistrationEnabled) { if (Settings.isTeleportToSpawnEnabled) { - Location spawn = plugin.getSpawnLocation(player, player.getWorld()); + Location spawn = plugin.getSpawnLocation(player); SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawn, false); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { @@ -114,7 +114,7 @@ public class UnregisterCommand implements CommandExecutor { plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " unregistered himself!")); } if (Settings.isTeleportToSpawnEnabled) { - Location spawn = plugin.getSpawnLocation(player, player.getWorld()); + Location spawn = plugin.getSpawnLocation(player); SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawn, false); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { diff --git a/src/main/java/fr/xephi/authme/converter/FlatToSql.java b/src/main/java/fr/xephi/authme/converter/FlatToSql.java index 37b4d5a1e..389bc8b7d 100644 --- a/src/main/java/fr/xephi/authme/converter/FlatToSql.java +++ b/src/main/java/fr/xephi/authme/converter/FlatToSql.java @@ -29,10 +29,12 @@ public class FlatToSql { private static String lastlocZ; private static String lastlocWorld; private static String columnEmail; + private static String columnLogged; + private static String columnID; private static File source; private static File output; - public static void FlatToSqlConverter() throws IOException { + public FlatToSql() { tableName = Settings.getMySQLTablename; columnName = Settings.getMySQLColumnName; columnPassword = Settings.getMySQLColumnPassword; @@ -43,7 +45,11 @@ public class FlatToSql { lastlocZ = Settings.getMySQLlastlocZ; lastlocWorld = Settings.getMySQLlastlocWorld; columnEmail = Settings.getMySQLColumnEmail; - + columnLogged = Settings.getMySQLColumnLogged; + columnID = Settings.getMySQLColumnId; + } + + public boolean convert() throws IOException { try { source = new File(AuthMe.getInstance().getDataFolder() + File.separator + "auths.db"); source.createNewFile(); @@ -53,45 +59,46 @@ public class FlatToSql { br = new BufferedReader(new FileReader(source)); sql = new BufferedWriter(new FileWriter(output)); String createDB = " CREATE TABLE IF NOT EXISTS " + tableName + " (" - + "id INTEGER AUTO_INCREMENT," - + columnName + " VARCHAR(255) NOT NULL UNIQUE," - + columnPassword + " VARCHAR(255) NOT NULL," - + columnIp + " VARCHAR(40) NOT NULL," - + columnLastLogin + " BIGINT," - + lastlocX + " smallint(6) DEFAULT '0'," - + lastlocY + " smallint(6) DEFAULT '0'," - + lastlocZ + " smallint(6) DEFAULT '0'," - + lastlocWorld + " VARCHAR(255) DEFAULT 'world'," - + columnEmail + " VARCHAR(255) NOT NULL," - + "CONSTRAINT table_const_prim PRIMARY KEY (id));"; + + columnID + " INTEGER AUTO_INCREMENT," + + columnName + " VARCHAR(255) NOT NULL UNIQUE," + + columnPassword + " VARCHAR(255) NOT NULL," + + columnIp + " VARCHAR(40) NOT NULL DEFAULT '127.0.0.1'," + + columnLastLogin + " BIGINT DEFAULT '0'," + + lastlocX + " DOUBLE NOT NULL DEFAULT '0.0'," + + lastlocY + " DOUBLE NOT NULL DEFAULT '0.0'," + + lastlocZ + " DOUBLE NOT NULL DEFAULT '0.0'," + + lastlocWorld + " VARCHAR(255) DEFAULT 'world'," + + columnEmail + " VARCHAR(255) DEFAULT 'your@email.com'," + + columnLogged + " SMALLINT NOT NULL DEFAULT '0'," + + "CONSTRAINT table_const_prim PRIMARY KEY (" + columnID + "));"; sql.write(createDB); String line; - int i = 1; String newline; while ((line = br.readLine()) != null) { sql.newLine(); String[] args = line.split(":"); if (args.length == 4) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", 0, 0, 0, 'world', 'your@email.com');"; + newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", 0.0, 0.0, 0.0, 'world', 'your@email.com', 0);"; else if (args.length == 7) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", 'world', 'your@email.com');"; + newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", 'world', 'your@email.com', 0);"; else if (args.length == 8) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', 'your@email.com');"; + newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', 'your@email.com', 0);"; else if (args.length == 9) - newline = "INSERT INTO " + tableName + " VALUES (" + i + ", '" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', '" + args[8] + "');"; + newline = "INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + "," + lastlocX + "," + lastlocY + "," + lastlocZ + "," + lastlocWorld + "," + columnEmail + "," + columnLogged + ") VALUES ('" + args[0] + "', '" + args[1] + "', '" + args[2] + "', " + args[3] + ", " + args[4] + ", " + args[5] + ", " + args[6] + ", '" + args[7] + "', '" + args[8] + "', 0);"; else newline = ""; if (newline != "") sql.write(newline); - i = i + 1; } sql.close(); br.close(); ConsoleLogger.info("The FlatFile has been converted to authme.sql file"); + return true; } catch (FileNotFoundException ex) { ConsoleLogger.showError(ex.getMessage()); } catch (IOException ex) { ConsoleLogger.showError(ex.getMessage()); } + return false; } } diff --git a/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java b/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java index 740abfbbd..3e7a8a26f 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQLDataSource.java @@ -183,6 +183,8 @@ public class MySQLDataSource implements DataSource { Connection con = null; PreparedStatement pst = null; ResultSet rs = null; + PlayerAuth pAuth = null; + int id = -1; try { con = makeSureConnectionIsReady(); pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " @@ -190,17 +192,26 @@ public class MySQLDataSource implements DataSource { pst.setString(1, user); rs = pst.executeQuery(); if (rs.next()) { - if (rs.getString(columnIp).isEmpty() ) { - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + id = rs.getInt(columnID); + if (rs.getString(columnIp).isEmpty() && rs.getString(columnIp) != null) { + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); } else { if(!columnSalt.isEmpty()){ if(!columnGroup.isEmpty()) - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); - else return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + else pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); } else { - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); } } + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + rs.close(); + pst = con.prepareStatement("SELECT * FROM xf_user_authenticate WHERE " + columnID + "=?;"); + pst.setInt(1, id); + if (rs.next()) { + pAuth.setHash(rs.getString(columnPassword)); + } + } } else { return null; } @@ -215,6 +226,7 @@ public class MySQLDataSource implements DataSource { close(pst); close(con); } + return pAuth; } @Override @@ -363,6 +375,21 @@ public class MySQLDataSource implements DataSource { pst.executeUpdate(); } } + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + int id; + ResultSet rs = null; + pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, auth.getNickname()); + rs = pst.executeQuery(); + if (rs.next()) { + id = rs.getInt(columnID); + // Insert password in the correct table + pst = con.prepareStatement("INSERT INTO xf_user_authenticate (user_id, scheme_class, data) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "XenForo_Authentication_Core12"); + pst.setString(3, auth.getHash()); + } + } } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return false; @@ -386,6 +413,20 @@ public class MySQLDataSource implements DataSource { pst.setString(1, auth.getHash()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + int id; + ResultSet rs = null; + pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, auth.getNickname()); + rs = pst.executeQuery(); + if (rs.next()) { + id = rs.getInt(columnID); + // Insert password in the correct table + pst = con.prepareStatement("UPDATE xf_user_authenticate SET data=? WHERE " + columnID + "=?;"); + pst.setString(1, auth.getHash()); + pst.setInt(2, id); + } + } } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return false; @@ -481,6 +522,19 @@ public class MySQLDataSource implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + int id; + ResultSet rs = null; + pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, user); + rs = pst.executeQuery(); + if (rs.next()) { + id = rs.getInt(columnID); + // Remove data + pst = con.prepareStatement("DELETE FROM xf_user_authenticate WHERE " + columnID + "=?;"); + pst.setInt(1, id); + } + } pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); pst.setString(1, user); pst.executeUpdate(); diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index 1346210ef..13767bff0 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -11,7 +11,6 @@ import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -365,7 +364,7 @@ public class AuthMePlayerListener implements Listener { } int radius = Settings.getMovementRadius; - Location spawn = plugin.getSpawnLocation(player, player.getWorld()); + Location spawn = plugin.getSpawnLocation(player); if (!event.getPlayer().getWorld().equals(spawn.getWorld())) { event.getPlayer().teleport(spawn); @@ -388,14 +387,14 @@ public class AuthMePlayerListener implements Listener { } if (!Settings.countriesBlacklist.isEmpty()) { - String code = plugin.getCountryCode(event.getAddress()); + String code = plugin.getCountryCode(event.getAddress().getHostAddress()); if (((code == null) || (Settings.countriesBlacklist.contains(code) && !API.isRegistered(name))) && !plugin.authmePermissible(player, "authme.bypassantibot")) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("country_banned")[0]); return; } } if (Settings.enableProtection && !Settings.countries.isEmpty()) { - String code = plugin.getCountryCode(event.getAddress()); + String code = plugin.getCountryCode(event.getAddress().getHostAddress()); if (((code == null) || (!Settings.countries.contains(code) && !API.isRegistered(name))) && !plugin.authmePermissible(player, "authme.bypassantibot")) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, m._("country_banned")[0]); return; @@ -540,9 +539,8 @@ public class AuthMePlayerListener implements Listener { return; } Player player = event.getPlayer(); - World world = player.getWorld(); final String name = player.getName().toLowerCase(); - Location spawnLoc = plugin.getSpawnLocation(player, world); + Location spawnLoc = plugin.getSpawnLocation(player); gm = player.getGameMode(); gameMode.put(name, gm); BukkitScheduler sched = plugin.getServer().getScheduler(); @@ -557,11 +555,7 @@ public class AuthMePlayerListener implements Listener { } catch (Exception e) {} } - String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee) { - if (plugin.realIp.containsKey(name)) - ip = plugin.realIp.get(name); - } + String ip = plugin.getIP(player); if(Settings.isAllowRestrictedIp && !Settings.getRestrictedIp(name, ip)) { GameMode gM = gameMode.get(name); this.causeByAuthMe = true; @@ -573,7 +567,7 @@ public class AuthMePlayerListener implements Listener { return; } if(Settings.getMaxJoinPerIp > 0 && !plugin.authmePermissible(player, "authme.allow2accounts") && !ip.equalsIgnoreCase("127.0.0.1") && !ip.equalsIgnoreCase("localhost")) { - if (plugin.hasJoinedIp(ip)) { + if (plugin.hasJoinedIp(player.getName(), ip)) { player.kickPlayer("A player with the same IP is already in game!"); return; } @@ -637,10 +631,9 @@ public class AuthMePlayerListener implements Listener { SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, PlayerCache.getInstance().isAuthenticated(name)); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); + if (player != null && player.isOnline() && tpEvent.getTo() != null) { + player.teleport(tpEvent.getTo()); + } } } placePlayerSafely(player, spawnLoc); @@ -660,10 +653,9 @@ public class AuthMePlayerListener implements Listener { SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnLoc, PlayerCache.getInstance().isAuthenticated(name)); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); + if (player != null && player.isOnline() && tpEvent.getTo() != null) { + player.teleport(tpEvent.getTo()); } - player.teleport(tpEvent.getTo()); } } if (!Settings.isForcedRegistrationEnabled) { @@ -750,11 +742,7 @@ public class AuthMePlayerListener implements Listener { return; } - String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee) { - if (plugin.realIp.containsKey(name)) - ip = plugin.realIp.get(name); - } + String ip = plugin.getIP(player); if (PlayerCache.getInstance().isAuthenticated(name) && !player.isDead()) { if(Settings.isSaveQuitLocationEnabled && data.isAuthAvailable(name)) { @@ -826,11 +814,7 @@ public class AuthMePlayerListener implements Listener { String name = player.getName().toLowerCase(); - String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee) { - if (plugin.realIp.containsKey(name)) - ip = plugin.realIp.get(name); - } + String ip = plugin.getIP(player); if ((PlayerCache.getInstance().isAuthenticated(name)) && (!player.isDead())) { if ((Settings.isSaveQuitLocationEnabled) && data.isAuthAvailable(name)){ final PlayerAuth auth = new PlayerAuth(name, loc.getX(), loc.getY(), loc.getZ(),loc.getWorld().getName()); @@ -863,10 +847,9 @@ public class AuthMePlayerListener implements Listener { AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, limbo.getLoc()); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { - if (!tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).isLoaded()) { - tpEvent.getTo().getWorld().getChunkAt(tpEvent.getTo()).load(); - } - player.teleport(tpEvent.getTo()); + if (player != null && player.isOnline() && tpEvent.getTo() != null) { + player.teleport(tpEvent.getTo()); + } } } catch (NullPointerException npe) { } @@ -1122,7 +1105,7 @@ public class AuthMePlayerListener implements Listener { if (!Settings.isForcedRegistrationEnabled) return; - Location spawn = plugin.getSpawnLocation(player, player.getWorld()); + Location spawn = plugin.getSpawnLocation(player); if(Settings.isSaveQuitLocationEnabled && data.isAuthAvailable(name)) { final PlayerAuth auth = new PlayerAuth(name,spawn.getX(),spawn.getY(),spawn.getZ(),spawn.getWorld().getName()); try { diff --git a/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java index a3cf7f0a5..42eed321f 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMeServerListener.java @@ -26,10 +26,10 @@ public class AuthMeServerListener implements Listener { if (!Settings.enableProtection) return; if (Settings.countries.isEmpty()) return; if (!Settings.countriesBlacklist.isEmpty()) { - if(Settings.countriesBlacklist.contains(plugin.getCountryCode(event.getAddress()))) + if(Settings.countriesBlacklist.contains(plugin.getCountryCode(event.getAddress().getHostAddress()))) event.setMotd(m._("country_banned")[0]); } - if(Settings.countries.contains(plugin.getCountryCode(event.getAddress()))) { + if(Settings.countries.contains(plugin.getCountryCode(event.getAddress().getHostAddress()))) { event.setMotd(plugin.getServer().getMotd()); } else { event.setMotd(m._("country_banned")[0]); diff --git a/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java b/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java index 4a5c00582..df88c5f5b 100644 --- a/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/AsyncronousLogin.java @@ -43,12 +43,7 @@ public class AsyncronousLogin { } protected String getIP() { - String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee) { - if (plugin.realIp.containsKey(name)) - ip = plugin.realIp.get(name); - } - return ip; + return plugin.getIP(player); } protected boolean needsCaptcha() { if (Settings.useCaptcha) { @@ -100,7 +95,7 @@ public class AsyncronousLogin { return null; } if (Settings.getMaxLoginPerIp > 0 && !plugin.authmePermissible(player, "authme.allow2accounts") && !getIP().equalsIgnoreCase("127.0.0.1") && !getIP().equalsIgnoreCase("localhost")) { - if (plugin.isLoggedIp(getIP())) { + if (plugin.isLoggedIp(realName, getIP())) { m._(player, "logged_in"); return null; } diff --git a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java index fde113c5e..1cce8f48c 100644 --- a/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java +++ b/src/main/java/fr/xephi/authme/process/login/ProcessSyncronousPlayerLogin.java @@ -68,7 +68,7 @@ public class ProcessSyncronousPlayerLogin implements Runnable { } } protected void teleportToSpawn() { - Location spawnL = plugin.getSpawnLocation(player, player.getWorld()); + Location spawnL = plugin.getSpawnLocation(player); SpawnTeleportEvent tpEvent = new SpawnTeleportEvent(player, player.getLocation(), spawnL, true); pm.callEvent(tpEvent); if (!tpEvent.isCancelled()) { diff --git a/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java b/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java index b9c048f9d..ae4fe1c37 100644 --- a/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/AsyncronousRegister.java @@ -15,6 +15,7 @@ import fr.xephi.authme.settings.Messages; import fr.xephi.authme.settings.Settings; public class AsyncronousRegister { + protected Player player; protected String name; protected String password; @@ -37,13 +38,7 @@ public class AsyncronousRegister { } protected String getIp() { - String ip = player.getAddress().getAddress().getHostAddress(); - - if (Settings.bungee) { - if (plugin.realIp.containsKey(name)) - ip = plugin.realIp.get(name); - } - return ip; + return plugin.getIP(player); } protected void preRegister() { diff --git a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java index 08d39af4e..a28c8a701 100644 --- a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousEmailRegister.java @@ -49,7 +49,7 @@ public class ProcessSyncronousEmailRegister implements Runnable { if (Settings.isTeleportToSpawnEnabled) { World world = player.getWorld(); - Location loca = plugin.getSpawnLocation(player, world); + Location loca = plugin.getSpawnLocation(player); RegisterTeleportEvent tpEvent = new RegisterTeleportEvent(player, loca); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { @@ -65,7 +65,7 @@ public class ProcessSyncronousEmailRegister implements Runnable { } player.saveData(); if (!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " registered "+player.getAddress().getAddress().getHostAddress()); + ConsoleLogger.info(player.getName() + " registered "+plugin.getIP(player)); if(plugin.notifications != null) { plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " has registered by email!")); } diff --git a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java index f9d8bdf08..bb4d719aa 100644 --- a/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/ProcessSyncronousPasswordRegister.java @@ -44,7 +44,7 @@ public class ProcessSyncronousPasswordRegister implements Runnable { protected void forceLogin(Player player) { if (Settings.isTeleportToSpawnEnabled) { - Location spawnLoc = plugin.getSpawnLocation(player, player.getWorld()); + Location spawnLoc = plugin.getSpawnLocation(player); AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(player, spawnLoc); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { @@ -81,7 +81,7 @@ public class ProcessSyncronousPasswordRegister implements Runnable { player.setGameMode(limbo.getGameMode()); if (Settings.isTeleportToSpawnEnabled) { World world = player.getWorld(); - Location loca = plugin.getSpawnLocation(player, world); + Location loca = plugin.getSpawnLocation(player); RegisterTeleportEvent tpEvent = new RegisterTeleportEvent(player, loca); plugin.getServer().getPluginManager().callEvent(tpEvent); if(!tpEvent.isCancelled()) { @@ -111,7 +111,7 @@ public class ProcessSyncronousPasswordRegister implements Runnable { player.saveData(); if (!Settings.noConsoleSpam) - ConsoleLogger.info(player.getName() + " registered "+player.getAddress().getAddress().getHostAddress()); + ConsoleLogger.info(player.getName() + " registered "+plugin.getIP(player)); if(plugin.notifications != null) { plugin.notifications.showNotification(new Notification("[AuthMe] " + player.getName() + " has registered!")); } diff --git a/src/main/java/fr/xephi/authme/settings/Settings.java b/src/main/java/fr/xephi/authme/settings/Settings.java index 4be58b03e..fc5406f6b 100644 --- a/src/main/java/fr/xephi/authme/settings/Settings.java +++ b/src/main/java/fr/xephi/authme/settings/Settings.java @@ -59,7 +59,7 @@ public final class Settings extends YamlConfiguration { disableSocialSpy, useMultiThreading, forceOnlyAfterLogin, useEssentialsMotd, usePurge, purgePlayerDat, purgeEssentialsFile, supportOldPassword, purgeLimitedCreative, purgeAntiXray, purgePermissions, enableProtection, enableAntiBot, recallEmail, useWelcomeMessage, - broadcastWelcomeMessage, forceRegKick, forceRegLogin; + broadcastWelcomeMessage, forceRegKick, forceRegLogin, checkVeryGames; public static String getNickRegex, getUnloggedinGroup, getMySQLHost, getMySQLPort, getMySQLUsername, getMySQLPassword, getMySQLDatabase, getMySQLTablename, @@ -241,6 +241,7 @@ public void loadConfigOptions() { spawnPriority = configFile.getString("settings.restrictions.spawnPriority", "authme,essentials,multiverse,default"); getMaxLoginPerIp = configFile.getInt("settings.restrictions.maxLoginPerIp", 0); getMaxJoinPerIp = configFile.getInt("settings.restrictions.maxJoinPerIp", 0); + checkVeryGames = configFile.getBoolean("VeryGames.enableIpCheck", false); // Load the welcome message getWelcomeMessage(plugin); @@ -398,163 +399,113 @@ public static void reloadConfigOptions(YamlConfiguration newConfig) { spawnPriority = configFile.getString("settings.restrictions.spawnPriority", "authme,essentials,multiverse,default"); getMaxLoginPerIp = configFile.getInt("settings.restrictions.maxLoginPerIp", 0); getMaxJoinPerIp = configFile.getInt("settings.restrictions.maxJoinPerIp", 0); + checkVeryGames = configFile.getBoolean("VeryGames.enableIpCheck", false); // Reload the welcome message getWelcomeMessage(AuthMe.getInstance()); } -public void mergeConfig() { - if(!contains("DataSource.mySQLColumnEmail")) - set("DataSource.mySQLColumnEmail","email"); - if(!contains("Email.RecoveryPasswordLength")) - set("Email.RecoveryPasswordLength", 8); - if(!contains("Email.mailPort")) - set("Email.mailPort", 465); - if(!contains("Email.mailSMTP")) - set("Email.mailSMTP", "smtp.gmail.com"); - if(!contains("Email.mailAccount")) - set("Email.mailAccount", ""); - if(!contains("Email.mailPassword")) - set("Email.mailPassword", ""); - if(!contains("ExternalBoardOptions.mySQLOtherUsernameColumns")) - set("ExternalBoardOptions.mySQLOtherUsernameColumns", new ArrayList()); - if(!contains("settings.restrictions.displayOtherAccounts")) - set("settings.restrictions.displayOtherAccounts", true); - if(!contains("DataSource.mySQLColumnId")) - set("DataSource.mySQLColumnId", "id"); - if(!contains("Email.mailSenderName")) - set("Email.mailSenderName", ""); - if(!contains("Security.captcha.useCaptcha")) - set("Security.captcha.useCaptcha", false); - if(!contains("Security.captcha.maxLoginTry")) - set("Security.captcha.maxLoginTry", 5); - if(!contains("Security.captcha.captchaLength")) - set("Security.captcha.captchaLength", 5); - if(!contains("Email.mailSubject")) - set("Email.mailSubject", ""); - if(!contains("Email.mailText")) - set("Email.mailText", "Dear ,

This is your new AuthMe password for the server

:



Do not forget to change password after login!
/changepassword newPassword"); - if(contains("Email.mailText")) { - try { - String s = getString("Email.mailText"); - s = s.replaceAll("\n", "
"); - set("Email.mailText", null); - set("Email.mailText", s); - } catch (Exception e) {} - } - if(!contains("settings.registration.enableEmailRegistrationSystem")) - set("settings.registration.enableEmailRegistrationSystem", false); - if(!contains("settings.security.doubleMD5SaltLength")) - set("settings.security.doubleMD5SaltLength", 8); - if(!contains("Email.maxRegPerEmail")) - set("Email.maxRegPerEmail", 1); - if(!contains("Hooks.multiverse")) { - set("Hooks.multiverse", true); - set("Hooks.chestshop", true); - set("Hooks.notifications", true); - set("Hooks.bungeecord", false); - } - if(!contains("settings.restrictions.ForceSpawnOnTheseWorlds")) - set("settings.restrictions.ForceSpawnOnTheseWorlds", new ArrayList()); - if(!contains("settings.restrictions.banUnsafedIP")) - set("settings.restrictions.banUnsafedIP", false); - if(!contains("settings.registration.doubleEmailCheck")) - set("settings.registration.doubleEmailCheck", false); - if(!contains("settings.sessions.sessionExpireOnIpChange")) - set("settings.sessions.sessionExpireOnIpChange", false); - if(!contains("Security.console.logConsole")) - set("Security.console.logConsole", false); - if(!contains("Hooks.disableSocialSpy")) - set("Hooks.disableSocialSpy", true); - if(!contains("Performances.useMultiThreading")) - set("Performances.useMultiThreading", true); - if(!contains("ExternalBoardOptions.bCryptLog2Round")) - set("ExternalBoardOptions.bCryptLog2Round", 10); - if(!contains("DataSource.mySQLlastlocWorld")) - set("DataSource.mySQLlastlocWorld", "world"); - if(!contains("settings.GameMode.ForceOnlyAfterLogin")) - set("settings.GameMode.ForceOnlyAfterLogin", false); - if(!contains("Hooks.useEssentialsMotd")) - set("Hooks.useEssentialsMotd", false); - if(!contains("Purge.useAutoPurge")) { - set("Purge.useAutoPurge", false); - set("Purge.daysBeforeRemovePlayer", 60); - set("Purge.removePlayerDat", false); - set("Purge.removeEssentialsFile", false); - set("Purge.defaultWorld", "world"); - } - if(!contains("ExternalBoardOptions.phpbbTablePrefix")) { - set("ExternalBoardOptions.phpbbTablePrefix", "phpbb_"); - set("ExternalBoardOptions.phpbbActivatedGroupId", 2); - } - if(!contains("settings.security.supportOldPasswordHash")) - set("settings.security.supportOldPasswordHash", false); - if(!contains("ExternalBoardOptions.wordpressTablePrefix")) - set("ExternalBoardOptions.wordpressTablePrefix", "wp_"); - if(contains("Xenoforo.predefinedSalt")) - set("Xenoforo.predefinedSalt", null); - if(configFile.getString("settings.security.passwordHash","SHA256").toUpperCase().equals("XFSHA1") || configFile.getString("settings.security.passwordHash","SHA256").toUpperCase().equals("XFSHA256")) - set("settings.security.passwordHash", "XENFORO"); - if(!contains("Purge.removeLimitedCreativesInventories")) - set("Purge.removeLimitedCreativesInventories", false); - if(!contains("Purge.removeAntiXRayFile")) - set("Purge.removeAntiXRayFile", false); - /*if(!contains("Purge.removePermissions")) - set("Purge.removePermissions", false);*/ - if(!contains("Protection.enableProtection")) - set("Protection.enableProtection", false); - if(!contains("Protection.countries")) { - countries = new ArrayList(); - countries.add("US"); - countries.add("GB"); - set("Protection.countries", countries); - } - if(!contains("Protection.enableAntiBot")) - set("Protection.enableAntiBot", false); - if(!contains("Protection.antiBotSensibility")) - set("Protection.antiBotSensibility", 5); - if(!contains("Protection.antiBotDuration")) - set("Protection.antiBotDuration", 10); - if(!contains("settings.forceCommands")) - set("settings.forceCommands", new ArrayList()); - if(!contains("Email.recallPlayers")) - set("Email.recallPlayers", false); - if(!contains("Email.delayRecall")) - set("Email.delayRecall", 5); - if(!contains("settings.useWelcomeMessage")) - set("settings.useWelcomeMessage", true); - if(!contains("settings.security.unsafePasswords")) { - List str = new ArrayList(); - str.add("123456"); - str.add("password"); - set("settings.security.unsafePasswords", str); - } - if(!contains("Protection.countriesBlacklist")) { - countriesBlacklist = new ArrayList(); - countriesBlacklist.add("A1"); - set("Protection.countriesBlacklist", countriesBlacklist); - } - if(!contains("settings.broadcastWelcomeMessage")) - set("settings.broadcastWelcomeMessage", false); - if(!contains("settings.registration.forceKickAfterRegister")) - set("settings.registration.forceKickAfterRegister", false); - if(!contains("settings.registration.forceLoginAfterRegister")) - set("settings.registration.forceLoginAfterRegister", false); - if(!contains("DataSource.mySQLColumnLogged")) - set("DataSource.mySQLColumnLogged", "isLogged"); - if(!contains("settings.restrictions.spawnPriority")) - set("settings.restrictions.spawnPriority", "authme,essentials,multiverse,default"); - if(!contains("settings.restrictions.maxLoginPerIp")) - set("settings.restrictions.maxLoginPerIp", 0); - if(!contains("settings.restrictions.maxJoinPerIp")) - set("settings.restrictions.maxJoinPerIp", 0); + public void mergeConfig() { + boolean changes = false; + if(contains("Xenoforo.predefinedSalt")) + set("Xenoforo.predefinedSalt", null); + if(configFile.getString("settings.security.passwordHash","SHA256").toUpperCase().equals("XFSHA1") || configFile.getString("settings.security.passwordHash","SHA256").toUpperCase().equals("XFSHA256")) + set("settings.security.passwordHash", "XENFORO"); + if(!contains("Protection.enableProtection")) { + set("Protection.enableProtection", false); + changes = true; + } + if(!contains("Protection.countries")) { + countries = new ArrayList(); + countries.add("US"); + countries.add("GB"); + set("Protection.countries", countries); + changes = true; + } + if(!contains("Protection.enableAntiBot")) { + set("Protection.enableAntiBot", false); + changes = true; + } + if(!contains("Protection.antiBotSensibility")) { + set("Protection.antiBotSensibility", 5); + changes = true; + } + if(!contains("Protection.antiBotDuration")) { + set("Protection.antiBotDuration", 10); + changes = true; + } + if(!contains("settings.forceCommands")) { + set("settings.forceCommands", new ArrayList()); + changes = true; + } + if(!contains("Email.recallPlayers")) { + set("Email.recallPlayers", false); + changes = true; + } + if(!contains("Email.delayRecall")) { + set("Email.delayRecall", 5); + changes = true; + } + if(!contains("settings.useWelcomeMessage")) { + set("settings.useWelcomeMessage", true); + changes = true; + } + if(!contains("settings.security.unsafePasswords")) { + List str = new ArrayList(); + str.add("123456"); + str.add("password"); + set("settings.security.unsafePasswords", str); + changes = true; + } + if(!contains("Protection.countriesBlacklist")) { + countriesBlacklist = new ArrayList(); + countriesBlacklist.add("A1"); + set("Protection.countriesBlacklist", countriesBlacklist); + changes = true; + } + if(!contains("settings.broadcastWelcomeMessage")) { + set("settings.broadcastWelcomeMessage", false); + changes = true; + } + if(!contains("settings.registration.forceKickAfterRegister")) { + set("settings.registration.forceKickAfterRegister", false); + changes = true; + } + if(!contains("settings.registration.forceLoginAfterRegister")) { + set("settings.registration.forceLoginAfterRegister", false); + changes = true; + } + if(!contains("DataSource.mySQLColumnLogged")) { + set("DataSource.mySQLColumnLogged", "isLogged"); + changes = true; + } + if(!contains("settings.restrictions.spawnPriority")) { + set("settings.restrictions.spawnPriority", "authme,essentials,multiverse,default"); + changes = true; + } + if(!contains("settings.restrictions.maxLoginPerIp")) { + set("settings.restrictions.maxLoginPerIp", 0); + changes = true; + } + if(!contains("settings.restrictions.maxJoinPerIp")) { + set("settings.restrictions.maxJoinPerIp", 0); + changes = true; + } + if(!contains("VeryGames.enableIpCheck")) { + set("VeryGames.enableIpCheck", false); + changes = true; + } + if(getString("settings.restrictions.allowedNicknameCharacters").equals("[a-zA-Z0-9_?]*")) + set("settings.restrictions.allowedNicknameCharacters", "[a-zA-Z0-9_]*"); - plugin.getLogger().warning("Merge new Config Options if needed.."); - plugin.getLogger().warning("Please check your config.yml file!"); - plugin.saveConfig(); + if (changes) { + plugin.getLogger().warning("Merge new Config Options if needed.."); + plugin.getLogger().warning("Please check your config.yml file!"); + } + plugin.saveConfig(); - return; + return; } private static HashAlgorithm getPasswordHash() { diff --git a/src/main/java/fr/xephi/authme/threads/MySQLThread.java b/src/main/java/fr/xephi/authme/threads/MySQLThread.java index e52e23d81..53f498d5a 100644 --- a/src/main/java/fr/xephi/authme/threads/MySQLThread.java +++ b/src/main/java/fr/xephi/authme/threads/MySQLThread.java @@ -212,6 +212,8 @@ public class MySQLThread extends Thread implements DataSource { Connection con = null; PreparedStatement pst = null; ResultSet rs = null; + PlayerAuth pAuth = null; + int id = -1; try { con = makeSureConnectionIsReady(); pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " @@ -219,17 +221,26 @@ public class MySQLThread extends Thread implements DataSource { pst.setString(1, user); rs = pst.executeQuery(); if (rs.next()) { - if (rs.getString(columnIp).isEmpty() ) { - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + id = rs.getInt(columnID); + if (rs.getString(columnIp).isEmpty() && rs.getString(columnIp) != null) { + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), "198.18.0.1", rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); } else { if(!columnSalt.isEmpty()){ if(!columnGroup.isEmpty()) - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); - else return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getInt(columnGroup), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + else pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword),rs.getString(columnSalt), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld),rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); } else { - return new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); + pAuth = new PlayerAuth(rs.getString(columnName), rs.getString(columnPassword), rs.getString(columnIp), rs.getLong(columnLastLogin), rs.getDouble(lastlocX), rs.getDouble(lastlocY), rs.getDouble(lastlocZ), rs.getString(lastlocWorld), rs.getString(columnEmail), API.getPlayerRealName(rs.getString(columnName))); } } + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + rs.close(); + pst = con.prepareStatement("SELECT * FROM xf_user_authenticate WHERE " + columnID + "=?;"); + pst.setInt(1, id); + if (rs.next()) { + pAuth.setHash(rs.getString(columnPassword)); + } + } } else { return null; } @@ -244,6 +255,7 @@ public class MySQLThread extends Thread implements DataSource { close(pst); close(con); } + return pAuth; } @Override @@ -252,7 +264,7 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); - if ((columnSalt.isEmpty() || columnSalt == null) && (auth.getSalt().isEmpty() || auth.getSalt() == null)) { + if ((columnSalt == null || columnSalt.isEmpty()) && (auth.getSalt() == null || auth.getSalt().isEmpty())) { pst = con.prepareStatement("INSERT INTO " + tableName + "(" + columnName + "," + columnPassword + "," + columnIp + "," + columnLastLogin + ") VALUES (?,?,?,?);"); pst.setString(1, auth.getNickname()); pst.setString(2, auth.getHash()); @@ -392,6 +404,21 @@ public class MySQLThread extends Thread implements DataSource { pst.executeUpdate(); } } + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + int id; + ResultSet rs = null; + pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, auth.getNickname()); + rs = pst.executeQuery(); + if (rs.next()) { + id = rs.getInt(columnID); + // Insert password in the correct table + pst = con.prepareStatement("INSERT INTO xf_user_authenticate (user_id, scheme_class, data) VALUES (?,?,?);"); + pst.setInt(1, id); + pst.setString(2, "XenForo_Authentication_Core12"); + pst.setString(3, auth.getHash()); + } + } } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return false; @@ -415,6 +442,20 @@ public class MySQLThread extends Thread implements DataSource { pst.setString(1, auth.getHash()); pst.setString(2, auth.getNickname()); pst.executeUpdate(); + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + int id; + ResultSet rs = null; + pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, auth.getNickname()); + rs = pst.executeQuery(); + if (rs.next()) { + id = rs.getInt(columnID); + // Insert password in the correct table + pst = con.prepareStatement("UPDATE xf_user_authenticate SET data=? WHERE " + columnID + "=?;"); + pst.setString(1, auth.getHash()); + pst.setInt(2, id); + } + } } catch (SQLException ex) { ConsoleLogger.showError(ex.getMessage()); return false; @@ -510,6 +551,19 @@ public class MySQLThread extends Thread implements DataSource { PreparedStatement pst = null; try { con = makeSureConnectionIsReady(); + if (Settings.getPasswordHash == HashAlgorithm.XENFORO) { + int id; + ResultSet rs = null; + pst = con.prepareStatement("SELECT * FROM " + tableName + " WHERE " + columnName + "=?;"); + pst.setString(1, user); + rs = pst.executeQuery(); + if (rs.next()) { + id = rs.getInt(columnID); + // Remove data + pst = con.prepareStatement("DELETE FROM xf_user_authenticate WHERE " + columnID + "=?;"); + pst.setInt(1, id); + } + } pst = con.prepareStatement("DELETE FROM " + tableName + " WHERE " + columnName + "=?;"); pst.setString(1, user); pst.executeUpdate(); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c03832ce3..4bd42f4d6 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -85,7 +85,7 @@ settings: - /passpartu - /email - /captcha - # Maximum Registraion per IP default: 1 + # Maximum Registration per IP default: 1 maxRegPerIp: 1 # max allowed nick length (Warning when you use # mysql and choose a value >20 you have to @@ -136,7 +136,7 @@ settings: # should be kicked. Set to 0 to disable. timeout: 30 # Regex sintax for allowed Char in player name. - allowedNicknameCharacters: '[a-zA-Z0-9_?]*' + allowedNicknameCharacters: '[a-zA-Z0-9_]*' # How far can unregistered players walk? Set to 0 # for unlimited radius allowedMovementRadius: 100 @@ -398,4 +398,7 @@ Protection: # Max number of player allowed to login in 5 secs before enable AntiBot system automatically antiBotSensibility: 5 # Duration in minutes of the antibot automatic system - antiBotDuration: 10 \ No newline at end of file + antiBotDuration: 10 +VeryGames: + # These features are only available on VeryGames Server Provider + enableIpCheck: false \ No newline at end of file diff --git a/src/main/resources/messages_cz.yml b/src/main/resources/messages_cz.yml index 4066d59a8..bb1c22df7 100644 --- a/src/main/resources/messages_cz.yml +++ b/src/main/resources/messages_cz.yml @@ -35,22 +35,22 @@ name_len: '&cTvuj nick je prilis kratky, nebo prilis dlouhy' regex: '&cTvuj nick obsahuje nepovolene znaky. Pripustne znaky jsou: REG_EX' add_email: '&cPridej prosim svuj email pomoci : /email add TvujEmail TvujEmail' bad_database_email: '[AuthMe] Prikaz /email je mozno pouzit jen s MySQL a SQLite, kontaktuj Admina' -recovery_email: '&cZapomels heslo? Zadej: /email recovery ' +recovery_email: '&cZapomel jsi heslo? Zadej: /email recovery ' usage_captcha: '&cPouzij: /captcha ' wrong_captcha: '&cSpatne opsana Captcha, pouzij prosim: /captcha CAPTCHA_TEXT' -valid_captcha: '&cZadana captcha je OK !' -kick_forvip: '&cA VIP Hrac se pripojil na plny server!' -kick_fullserver: '&cServer je plne obsazen, zkus to pozdeji prosim !' -usage_email_add: '&fPouzij: /email add ' -usage_email_change: '&fPouzij: /email change ' +valid_captcha: '&cZadana captcha je v poradku!' +kick_forvip: '&cVIP Hrac se pripojil na plny server!' +kick_fullserver: '&cServer je plne obsazen, zkus to pozdeji prosim!' +usage_email_add: '&fPouzij: /email add ' +usage_email_change: '&fPouzij: /email change ' usage_email_recovery: '&fPouzij: /email recovery ' new_email_invalid: '[AuthMe] Novy email je chybne zadan!' old_email_invalid: '[AuthMe] Stary email je chybne zadan!' email_invalid: '[AuthMe] Nespravny email' -email_added: '[AuthMe] Email pridan !' -email_confirm: '[AuthMe] Potvrd prosim svuj email !' -email_changed: '[AuthMe] Email zmenen !' -email_send: '[AuthMe] Email pro obnoveni hesla odeslan !' -country_banned: 'Your country is banned from this server' -antibot_auto_enabled: '[AuthMe] AntiBotMod automatically enabled due to massive connections!' -antibot_auto_disabled: '[AuthMe] AntiBotMod automatically disabled after %m Minutes, hope invasion stopped' \ No newline at end of file +email_added: '[AuthMe] Email pridan!' +email_confirm: '[AuthMe] Potvrd prosim svuj email!' +email_changed: '[AuthMe] Email zmenen!' +email_send: '[AuthMe] Email pro obnoveni hesla odeslan!' +country_banned: 'Vase zeme je na tomto serveru zakazana' +antibot_auto_enabled: '[AuthMe] AntiBotMod automaticky spusten z duvodu masivnich pripojeni!' +antibot_auto_disabled: '[AuthMe] AntiBotMod automaticky ukoncen po %m minutach, doufejme v konec invaze' diff --git a/src/main/resources/messages_ru.yml b/src/main/resources/messages_ru.yml index e34b38da9..58f797a15 100644 --- a/src/main/resources/messages_ru.yml +++ b/src/main/resources/messages_ru.yml @@ -1,57 +1,57 @@ # Translate by AlexMerser / Перевод от AlexMerser -unknown_user: '&cТакой игрок не зарегестрирован' -unsafe_spawn: '&6Ваше расположение перед выходом было опасным - &aВы перенесены на спавн.' -not_logged_in: '&cВы еще не вошли!' -reg_voluntarily: '&eРегистрация - &d/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ' -usage_log: '&eИспользование: &d/l ПАРОЛЬ' -wrong_pwd: '&cНеверный пароль' -unregistered: '&cВы успешно удалили свой аккаунт!' -reg_disabled: '&6Регистрация отключена' -valid_session: '&cСессия включена' -login: '&cУспешная авторизация!' -vb_nonActiv: '&aВаш аккаунт активирован. &5Проверьте свою электронную почту.' -user_regged: '&cТакой игрок уже зарегистрирован' -usage_reg: '&cИспользование: /reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ' -max_reg: '&fВы превысили максимальное количество регистраций на аккаунт' -no_perm: '&cУ Вас нет прав' -error: '&cЧто-то пошло не так; &5Свяжитесь с администратором.' -login_msg: '&cВойти в игру - /login ПАРОЛЬ' -reg_msg: '&eЗарегистрируйтесь - &d/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ' -reg_email_msg: '&cЗарегистрируйтесь - /register ВАШ_EMAIL ВАШ_EMAIL' -usage_unreg: '&cИспользование: /unregister ПАРОЛЬ' -pwd_changed: '&cПароль успешно изменен!' -user_unknown: '&cТакой игрок не зарегистрирован' -password_error: '&fПароль не совпадает' -unvalid_session: '&cСессия некорректна. &5Дождитесь, пока сессия закончится.' -reg_only: '&fВход доступен только зарегистрированным игрокам! Зарегистрируйтесь здесь - http://example.com/?do=register' -logged_in: '&cВы уже вошли!' -logout: '&cВы успешно вышли' -same_nick: '&fТакой игрок уже играет на сервере' -registered: '&cУспешная регистрация!' -pass_len: '&cТвой пароль либо слишком длинный, либо слишком короткий' -reload: '&fКонфигурация и база данных перезагружены.' -timeout: '&fВремя входа истекло, попробуйте еще раз, но быстрее' -usage_changepassword: '&fИспользование: /changepassword СТАРЫЙ_ПАРОЛЬ НОВЫЙ_ПАРОЛЬ' -name_len: '&cВаш логин слишком длинный или слишком короткий' -regex: '&cВаш логин содержит запрещенные символы. Разрешенные символы: REG_EX' -add_email: '&cДобавьте свой email: /email add ВАШ_EMAIL ВАШ_EMAIL' -bad_database_email: '&c[AuthMe] Команда &d/email&c доступна только при работе с MySQL или SQLite' -recovery_email: '&cЗабыли пароль? Используйте /email recovery ВАШ_EMAIL' -usage_captcha: '&cИспользование: /captcha СИМВОЛЫ_ВЫШЕ' -wrong_captcha: '&cНеправильная капча: /captcha СИМВОЛЫ_ВЫШЕ' -valid_captcha: '&cКапча введена правильно!' -kick_forvip: '&cVIP игрок зашел на переполненный сервер!' -kick_fullserver: '&cСервер переполнен!' -usage_email_add: '&fИспользование: /email add ВАШ_EMAIL ВАШ_EMAIL ' -usage_email_change: '&fИспользование: /email change СТАРЫЙ_EMAIL НОВЫЙ_EMAIL ' -usage_email_recovery: '&fИспользование: /email recovery ВАШ_EMAIL' -new_email_invalid: '[AuthMe] Новый email недействителен!' -old_email_invalid: '[AuthMe] Старый email недействителен!' -email_invalid: '[AuthMe] Email неправильный' +unknown_user: '&4Игрок с таким логином не зарегистрирован' +unsafe_spawn: '&6Ваше расположение перед выходом было опасным - вы перенесены на спавн' +not_logged_in: '&4Вы еще не вошли!' +reg_voluntarily: '&6Чтобы зарегистрироваться введите: &5/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ' +usage_log: '&4Использование: &5/l ПАРОЛЬ' +wrong_pwd: '&4Неправильный пароль!' +unregistered: '&6Вы успешно удалили свой аккаунт!' +reg_disabled: '&4Регистрация отключена' +valid_session: '&6Сессия активна' +login: '&2Вы успешно вошли!' +vb_nonActiv: '&6Ваш аккаунт еще не активирован! Проверьте вашу почту!' +user_regged: '&4Такой игрок уже зарегистрирован' +usage_reg: '&4Использование: &5/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ' +max_reg: '&4Вы превысили макс количество регистраций на IP' +no_perm: '&4Недостаточно прав' +error: '&4Произошла ошибка. Свяжитесь с администратором' +login_msg: '&4Авторизация: &5/l ПАРОЛЬ' +reg_msg: '&4Регистрация: &5/reg ПАРОЛЬ ПОВТОР_ПАРОЛЯ' +reg_email_msg: '&4Регистрация: &5/reg EMAIL ПОВТОР_EMAIL' +usage_unreg: '&4Использование: &5/unregister ПАРОЛЬ' +pwd_changed: '&2Пароль изменен!' +user_unknown: '&4Такой игрок не зарегистрирован' +password_error: '&4Пароль не совпадает' +unvalid_session: '&4Сессия некорректна. Дождитесь, пока она закончится' +reg_only: '&4Только для зарегистрированных! Посетите http://project.ru/register/ для регистрации' +logged_in: '&4Вы уже авторизированы!' +logout: '&2Вы успешно вышли' +same_nick: '&4Такой игрок уже играет на сервере' +registered: '&2Успешная регистрация!' +pass_len: '&4Твой пароль либо слишком длинный, либо слишком короткий' +reload: '&6Конфигурация и база данных перезагружены' +timeout: '&4Время авторизации истекло' +usage_changepassword: '&4Использование: &5/changepassword СТАРЫЙ_ПАРОЛЬ НОВЫЙ_ПАРОЛЬ' +name_len: '&4Ваш логин слишком длинный или слишком короткий' +regex: '&4Ваш логин содержит запрещенные символы. Разрешенные символы: REG_EX' +add_email: '&4Добавьте свой email: &5/email add ВАШ_EMAIL ВАШ_EMAIL' +bad_database_email: '&4[AuthMe] Команда &5/email&4 доступна только при работе с MySQL или SQLite' +recovery_email: '&4Забыли пароль? Используйте &5/email recovery ВАШ_EMAIL' +usage_captcha: '&4Вы должны ввести код, используйте: &5/captcha КОД' +wrong_captcha: '&4Неверный код, используйте: &5/captcha КОД' +valid_captcha: '&2Вы успешно ввели код!' +kick_forvip: '&6VIP игрок зашел на переполненный сервер!' +kick_fullserver: '&4Сервер переполнен!' +usage_email_add: '&4Использование: &5/email add ВАШ_EMAIL ПОВТОР_EMAIL' +usage_email_change: '&4Использование: &5/email change СТАРЫЙ_EMAIL НОВЫЙ_EMAIL' +usage_email_recovery: '&4Использование: /email recovery EMAIL' +new_email_invalid: '[AuthMe] Недействительный новый email!' +old_email_invalid: '[AuthMe] Недействительный старый email!' +email_invalid: '[AuthMe] Недействительный email' email_added: '[AuthMe] Email добавлен!' -email_confirm: '[AuthMe] Подтвердите ваш email!' +email_confirm: '[AuthMe] Подтвердите ваш Email!' email_changed: '[AuthMe] Email изменен!' email_send: '[AuthMe] Восстановительное письмо отправлено!' country_banned: 'Ваша страна запрещена на этом сервере' antibot_auto_enabled: '[AuthMe] AntiBot-режим автоматически включен из-за большого количества входов!' -antibot_auto_disabled: '[AuthMe] AntiBot-режим автоматичски отключен после %m мин. Надеюсь, атака закончилась' +antibot_auto_disabled: '[AuthMe] AntiBot-режим автоматичски отключен после %m мин. Надеюсь атака закончилась' diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index adf1f2f8c..2946d0bed 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ author: Xephi59 website: http://dev.bukkit.org/bukkit-plugins/authme-reloaded/ description: AuthMe prevents people, which aren't logged in, from doing stuff like placing blocks, moving, typing commands or seeing the inventory of the current player. main: fr.xephi.authme.AuthMe -version: 3.3.4 +version: 3.3.5 softdepend: [Vault, ChestShop, Spout, Multiverse-Core, Notifications, Citizens, CombatTag, Essentials, EssentialsSpawn] commands: register: @@ -63,6 +63,7 @@ permissions: authme.admin.purgelastpos: true authme.admin.switchantibot: true authme.bypassantibot: true + authme.admin.getip: true authme.register: description: Register an account default: true @@ -164,4 +165,7 @@ permissions: default: op authme.admin.firstspawn: description: Teleport to AuthMe First Spawn Point + default: op + authme.admin.getip: + description: Get IP from a player ( fake and real ) default: op \ No newline at end of file