diff --git a/pom.xml b/pom.xml
index 765c581b..6fc8ce54 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 030eeb7e..310031c5 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 ccc7179f..e34eebcb 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 ad62aa4e..a6177035 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 265cc974..87f4aa6b 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 057841db..1b36c3a2 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 1a218d69..28aaa88e 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 4e2c6328..1998645f 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 37b4d5a1..389bc8b7 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 740abfbb..3e7a8a26 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 1346210e..13767bff 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 a3cf7f0a..42eed321 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 4a5c0058..df88c5f5 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 fde113c5..1cce8f48 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 b9c048f9..ae4fe1c3 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 08d39af4..a28c8a70 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 f9d8bdf0..bb4d719a 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 4be58b03..fc5406f6 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 e52e23d8..53f498d5 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 c03832ce..4bd42f4d 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 4066d59a..bb1c22df 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 e34b38da..58f797a1 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 adf1f2f8..2946d0be 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