diff --git a/pom.xml b/pom.xml
index cff91fff..4c8bab4e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
- 2.9.1
+ 2.9.2
org.bukkit
diff --git a/src/main/java/uk/org/whoami/authme/api/API.java b/src/main/java/uk/org/whoami/authme/api/API.java
index babd0848..00879592 100644
--- a/src/main/java/uk/org/whoami/authme/api/API.java
+++ b/src/main/java/uk/org/whoami/authme/api/API.java
@@ -11,6 +11,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import uk.org.whoami.authme.AuthMe;
+import uk.org.whoami.authme.ConsoleLogger;
import uk.org.whoami.authme.Utils;
import uk.org.whoami.authme.cache.auth.PlayerAuth;
import uk.org.whoami.authme.cache.auth.PlayerCache;
@@ -203,5 +204,27 @@ public class API {
return false;
}
}
+
+ /**
+ * Register a player
+ * @param String playerName, String password
+ * @return true if the player is register correctly
+ */
+ public static boolean registerPlayer(String playerName, String password) {
+ try {
+ String name = playerName.toLowerCase();
+ String hash = PasswordSecurity.getHash(Settings.getPasswordHash, password, name);
+ if (database.isAuthAvailable(name)) {
+ return false;
+ }
+ PlayerAuth auth = new PlayerAuth(name, hash, "198.18.0.1", 0);
+ if (!database.saveAuth(auth)) {
+ return false;
+ }
+ return true;
+ } catch (NoSuchAlgorithmException ex) {
+ return false;
+ }
+ }
}
diff --git a/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java b/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java
index cff9ca99..d76170b4 100644
--- a/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java
+++ b/src/main/java/uk/org/whoami/authme/commands/CaptchaCommand.java
@@ -68,7 +68,7 @@ public class CaptchaCommand implements CommandExecutor {
plugin.cap.remove(name);
} catch (NullPointerException npe) {
}
- player.sendMessage("Your captcha is correct");
+ player.sendMessage(m._("valid_captcha"));
player.sendMessage(m._("login_msg"));
return true;
}
diff --git a/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java b/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java
index c312b842..84ca73da 100644
--- a/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java
+++ b/src/main/java/uk/org/whoami/authme/commands/EmailCommand.java
@@ -62,25 +62,25 @@ public class EmailCommand implements CommandExecutor {
String name = player.getName().toLowerCase();
if (args.length == 0) {
- player.sendMessage("usage: /email add ");
- player.sendMessage("usage: /email change ");
- player.sendMessage("usage: /email recovery ");
+ player.sendMessage(m._("usage_email_add"));
+ player.sendMessage(m._("usage_email_change"));
+ player.sendMessage(m._("usage_email_recovery"));
return true;
}
if(args[0].equalsIgnoreCase("add")) {
if (args.length != 3) {
- player.sendMessage("[AuthMe] /email add ");
+ player.sendMessage(m._("usage_email_add"));
return true;
}
if(args[1].equals(args[2]) && PlayerCache.getInstance().isAuthenticated(name)) {
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
if (auth.getEmail() == null || !auth.getEmail().contains("your@email.com")) {
- player.sendMessage("[AuthMe] /email change ");
+ player.sendMessage("usage_email_change");
return true;
}
if (!args[1].contains("@")) {
- player.sendMessage("[AuthMe] Invalid Email !");
+ player.sendMessage(m._("email_invalid"));
return true;
}
auth.setEmail(args[1]);
@@ -89,10 +89,10 @@ public class EmailCommand implements CommandExecutor {
return true;
}
PlayerCache.getInstance().updatePlayer(auth);
- player.sendMessage("[AuthMe] Email Added !");
+ player.sendMessage(m._("email_added"));
player.sendMessage(auth.getEmail());
} else if (PlayerCache.getInstance().isAuthenticated(name)){
- player.sendMessage("[AuthMe] Confirm your Email ! ");
+ player.sendMessage(m._("email_confirm"));
} else {
if (!data.isAuthAvailable(name)) {
player.sendMessage(m._("login_msg"));
@@ -104,27 +104,27 @@ public class EmailCommand implements CommandExecutor {
if(PlayerCache.getInstance().isAuthenticated(name)) {
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
if (auth.getEmail() == null || auth.getEmail().equals("your@email.com")) {
- player.sendMessage("[AuthMe] Please use : /email add ");
+ player.sendMessage(m._("usage_email_add"));
return true;
}
- if (!args[1].equals(auth.getEmail())) {
- player.sendMessage("[AuthMe] Invalid Email !");
+ if (!args[1].equals(auth.getEmail())) {
+ player.sendMessage(m._("old_email_invalid"));
return true;
}
if (!args[2].contains("@")) {
- player.sendMessage("[AuthMe] New Email is Invalid !");
+ player.sendMessage(m._("new_email_invalid"));
return true;
}
auth.setEmail(args[2]);
if (!data.updateEmail(auth)) {
- player.sendMessage("[AuthMe] /email command only available with MySQL and SQLite");
+ player.sendMessage(m._("bad_database_email"));
return true;
}
PlayerCache.getInstance().updatePlayer(auth);
- player.sendMessage("[AuthMe] Email Change !");
- player.sendMessage("[AuthMe] Your Email : " + auth.getEmail());
+ player.sendMessage(m._("email_changed"));
+ player.sendMessage(m._("email_defined") + auth.getEmail());
} else if (PlayerCache.getInstance().isAuthenticated(name)){
- player.sendMessage("[AuthMe] Confirm your Email ! ");
+ player.sendMessage(m._("email_confirm"));
} else {
if (!data.isAuthAvailable(name)) {
player.sendMessage(m._("login_msg"));
@@ -135,7 +135,7 @@ public class EmailCommand implements CommandExecutor {
}
if(args[0].equalsIgnoreCase("recovery")) {
if (args.length != 2) {
- player.sendMessage("usage: /email recovery ");
+ player.sendMessage(m._("usage_email_recovery"));
return true;
}
if (plugin.mail == null) {
@@ -167,7 +167,7 @@ public class EmailCommand implements CommandExecutor {
}
if (!args[1].equalsIgnoreCase(auth.getEmail())) {
- player.sendMessage("[AuthMe] Invalid Email");
+ player.sendMessage(m._("email_invalid"));
return true;
}
final String finalhashnew = hashnew;
@@ -180,7 +180,7 @@ public class EmailCommand implements CommandExecutor {
}
});
plugin.mail.main(auth, thePass);
- player.sendMessage("[AuthMe] Recovery Email Send !");
+ player.sendMessage(m._("email_send"));
} catch (NoSuchAlgorithmException ex) {
ConsoleLogger.showError(ex.getMessage());
sender.sendMessage(m._("error"));
diff --git a/src/main/java/uk/org/whoami/authme/datasource/MiniConnectionPoolManager.java b/src/main/java/uk/org/whoami/authme/datasource/MiniConnectionPoolManager.java
index d0ed6d08..45d626de 100644
--- a/src/main/java/uk/org/whoami/authme/datasource/MiniConnectionPoolManager.java
+++ b/src/main/java/uk/org/whoami/authme/datasource/MiniConnectionPoolManager.java
@@ -153,8 +153,8 @@ private synchronized Connection getConnection3() throws SQLException {
else {
pconn = dataSource.getPooledConnection();
pconn.addConnectionEventListener(poolConnectionEventListener); }
- Connection conn = pconn.getConnection();
activeConnections++;
+ Connection conn = pconn.getConnection();
assertInnerState();
return conn; }
diff --git a/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java b/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java
index bcf30427..e83ba35e 100644
--- a/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java
+++ b/src/main/java/uk/org/whoami/authme/listener/AuthMePlayerListener.java
@@ -521,8 +521,13 @@ public class AuthMePlayerListener implements Listener {
if (Spawn.getInstance().getLocation() != null && Spawn.getInstance().getLocation().getWorld().equals(player.getWorld()))
spawn = Spawn.getInstance().getLocation();
+ if (!event.getPlayer().getWorld().equals(spawn.getWorld())) {
+ event.getPlayer().teleport(spawn);
+ return;
+ }
if ((spawn.distance(player.getLocation()) > radius) ) {
event.getPlayer().teleport(spawn);
+ return;
}
}
diff --git a/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java b/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java
index 722330cf..111ff2a9 100644
--- a/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java
+++ b/src/main/java/uk/org/whoami/authme/security/PasswordSecurity.java
@@ -224,6 +224,8 @@ public class PasswordSecurity {
return getWBB3(password, saltwbb);
case SHA512:
return getSHA512(password);
+ case DOUBLEMD5:
+ return getMD5(getMD5(password));
default:
throw new NoSuchAlgorithmException("Unknown hash algorithm");
}
@@ -254,15 +256,14 @@ public class PasswordSecurity {
String saltmybb = AuthMe.getInstance().database.getAuth(playername).getSalt();
return hash.equals(getSaltedMyBB(password, saltmybb));
}
- if(Settings.getPasswordHash == HashAlgorithm.SMF) {
+ if(Settings.getPasswordHash == HashAlgorithm.SMF)
return hash.equals(getSHA1(playername.toLowerCase() + password));
- }
- if(Settings.getPasswordHash == HashAlgorithm.XFSHA1) {
+ if(Settings.getPasswordHash == HashAlgorithm.XFSHA1)
return hash.equals(getSHA1(getSHA1(password) + Settings.getPredefinedSalt));
- }
- if(Settings.getPasswordHash == HashAlgorithm.XFSHA256) {
+ if(Settings.getPasswordHash == HashAlgorithm.XFSHA256)
return hash.equals(getSHA256(getSHA256(password)+ Settings.getPredefinedSalt));
- }
+ if(Settings.getPasswordHash == HashAlgorithm.DOUBLEMD5)
+ return hash.equals(getMD5(getMD5(password)));
if(!Settings.getMySQLColumnSalt.isEmpty() && Settings.getPasswordHash == HashAlgorithm.SALTED2MD5) {
String salt2md5 = AuthMe.getInstance().database.getAuth(playername).getSalt();
return hash.equals(getMD5(getMD5(password) + salt2md5));
@@ -271,19 +272,15 @@ public class PasswordSecurity {
String saltj = hash.split(":")[1];
return hash.equals(getMD5(password + saltj) + ":" + saltj);
}
- if(Settings.getPasswordHash == HashAlgorithm.SHA512) {
+ if(Settings.getPasswordHash == HashAlgorithm.SHA512)
return hash.equals(getSHA512(password));
- }
// PlainText Password
- if(hash.length() < 32 ) {
+ if(hash.length() < 32 )
return hash.equals(password);
- }
- if (hash.length() == 32) {
+ if (hash.length() == 32)
return hash.equals(getMD5(password));
- }
- if (hash.length() == 40) {
+ if (hash.length() == 40)
return hash.equals(getSHA1(password));
- }
if (hash.length() == 140) {
int saltPos = (password.length() >= hash.length() ? hash.length() - 1 : password.length());
String salt = hash.substring(saltPos, saltPos + 12);
@@ -339,7 +336,7 @@ public class PasswordSecurity {
public enum HashAlgorithm {
MD5, SHA1, SHA256, WHIRLPOOL, XAUTH, MD5VB, PHPBB, PLAINTEXT, MYBB, IPB3, PHPFUSION, SMF, XFSHA1,
- XFSHA256, SALTED2MD5, JOOMLA, BCRYPT, WBB3, SHA512
+ XFSHA256, SALTED2MD5, JOOMLA, BCRYPT, WBB3, SHA512, DOUBLEMD5
}
}
diff --git a/src/main/java/uk/org/whoami/authme/settings/Messages.java b/src/main/java/uk/org/whoami/authme/settings/Messages.java
index cd4e106c..21437786 100644
--- a/src/main/java/uk/org/whoami/authme/settings/Messages.java
+++ b/src/main/java/uk/org/whoami/authme/settings/Messages.java
@@ -73,6 +73,17 @@ public class Messages extends CustomConfiguration {
this.set("valid_captcha", "&cYour captcha is valid !");
this.set("kick_forvip", "&cA VIP Player join the full server!");
this.set("kick_fullserver", "&cThe server is actually full, Sorry!");
+ this.set("usage_email_add", "&fUsage: /email add ");
+ this.set("usage_email_change", "&Usage: /email change ");
+ this.set("usage_email_recovery", "&Usage: /email recovery ");
+ this.set("email_add", "[AuthMe] /email add ");
+ this.set("new_email_invalid", "[AuthMe] New email invalid!");
+ this.set("old_email_invalid", "[AuthMe] Old email invalid!");
+ this.set("email_invalid", "[AuthMe] Invalid Email !");
+ this.set("email_added", "[AuthMe] Email Added !");
+ this.set("email_confirm", "[AuthMe] Confirm your Email !");
+ this.set("email_changed", "[AuthMe] Email Change !");
+ this.set("email_send", "[AuthMe] Recovery Email Send !");
}
private void loadFile() {
diff --git a/src/main/java/uk/org/whoami/authme/settings/Settings.java b/src/main/java/uk/org/whoami/authme/settings/Settings.java
index bb1ef2f3..ba1e2323 100644
--- a/src/main/java/uk/org/whoami/authme/settings/Settings.java
+++ b/src/main/java/uk/org/whoami/authme/settings/Settings.java
@@ -588,7 +588,7 @@ public void mergeConfig() {
}
public enum messagesLang {
- en, de, br, cz, pl, fr, ru, hu, sk, es, zhtw, fi, zhcn, lt, it
+ en, de, br, cz, pl, fr, ru, hu, sk, es, zhtw, fi, zhcn, lt, it, ko, pt
}
}
diff --git a/src/main/resources/messages_br.yml b/src/main/resources/messages_br.yml
index b6ab82f7..35c8b11d 100644
--- a/src/main/resources/messages_br.yml
+++ b/src/main/resources/messages_br.yml
@@ -38,4 +38,14 @@ usage_captcha: '&cUsage: /captcha '
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
valid_captcha: '&cYour captcha is valid !'
kick_forvip: '&cA VIP Player join the full server!'
-kick_fullserver: '&cThe server is actually full, Sorry!'
\ No newline at end of file
+kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
\ No newline at end of file
diff --git a/src/main/resources/messages_cz.yml b/src/main/resources/messages_cz.yml
index 39ed815f..b8626ce8 100644
--- a/src/main/resources/messages_cz.yml
+++ b/src/main/resources/messages_cz.yml
@@ -41,3 +41,13 @@ 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: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_de.yml b/src/main/resources/messages_de.yml
index 7dad6614..380b0585 100644
--- a/src/main/resources/messages_de.yml
+++ b/src/main/resources/messages_de.yml
@@ -40,4 +40,14 @@ usage_captcha: '&cBenutze: /captcha '
wrong_captcha: '&cFalsches Captcha, bitte nutze: /captcha '
valid_captcha: '&cDas Captcha ist korrekt!'
kick_forvip: '&cEin VIP Spieler hat den vollen Server betreten!'
-kick_fullserver: '&cDer Server ist momentan voll, Sorry!'
\ No newline at end of file
+kick_fullserver: '&cDer Server ist momentan voll, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
\ No newline at end of file
diff --git a/src/main/resources/messages_en.yml b/src/main/resources/messages_en.yml
index 8b88fdaf..59d598b4 100644
--- a/src/main/resources/messages_en.yml
+++ b/src/main/resources/messages_en.yml
@@ -41,4 +41,13 @@ wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
valid_captcha: '&cYour captcha is valid !'
kick_forvip: '&cA VIP Player join the full server!'
kick_fullserver: '&cThe server is actually full, Sorry!'
-
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_es.yml b/src/main/resources/messages_es.yml
index a25517e6..85b5a44a 100644
--- a/src/main/resources/messages_es.yml
+++ b/src/main/resources/messages_es.yml
@@ -41,4 +41,14 @@ usage_captcha: '&cUso: /captcha '
wrong_captcha: '&cCaptcha incorrecto, please use : /captcha EL_CAPTCHA'
valid_captcha: '&c¡ Captcha ingresado correctamente !'
kick_forvip: '&cA VIP Player join the full server!'
-kick_fullserver: '&cThe server is actually full, Sorry!'
\ No newline at end of file
+kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
\ No newline at end of file
diff --git a/src/main/resources/messages_fi.yml b/src/main/resources/messages_fi.yml
index 3158619d..28497888 100644
--- a/src/main/resources/messages_fi.yml
+++ b/src/main/resources/messages_fi.yml
@@ -41,3 +41,13 @@ wrong_captcha: '&cVäärä varmistus, käytä : /captcha THE_CAPTCHA'
valid_captcha: '&cSinun varmistus epäonnistui.!'
kick_forvip: '&cA VIP Player join the full server!'
kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_fr.yml b/src/main/resources/messages_fr.yml
index 6b3df976..1f203dd5 100644
--- a/src/main/resources/messages_fr.yml
+++ b/src/main/resources/messages_fr.yml
@@ -42,3 +42,13 @@ wrong_captcha: '&cCaptcha incorrect, écrivez de nouveau : /captcha THE_CAPTCHA'
valid_captcha: '&cLe Captcha est valide, merci!'
kick_forvip: '&cUn joueur VIP a rejoint le serveur plein!'
kick_fullserver: '&cLe serveur est actuellement plein, désolé!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_hu.yml b/src/main/resources/messages_hu.yml
index c7cc93b7..4ab51fa9 100644
--- a/src/main/resources/messages_hu.yml
+++ b/src/main/resources/messages_hu.yml
@@ -41,3 +41,13 @@ wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
valid_captcha: '&cYour captcha is valid !'
kick_forvip: '&cA VIP Player join the full server!'
kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_it.yml b/src/main/resources/messages_it.yml
index e272bcbf..a6747d87 100644
--- a/src/main/resources/messages_it.yml
+++ b/src/main/resources/messages_it.yml
@@ -41,3 +41,13 @@ wrong_captcha: '&cCaptcha sbagliato, perfavore fai: /captcha THE_CAPTCHA'
valid_captcha: "&cIl tuo captcha è valido!"
kick_forvip: "&cUn player VIP è entrato mentre il server era pieno!"
kick_fullserver: "&cIl server è attualmente pieno, ci dispiace!"
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
\ No newline at end of file
diff --git a/src/main/resources/messages_ko.yml b/src/main/resources/messages_ko.yml
new file mode 100644
index 00000000..6fb56a48
--- /dev/null
+++ b/src/main/resources/messages_ko.yml
@@ -0,0 +1,53 @@
+unknown_user: 사용자는 데이터베이스에 없습니다
+unsafe_spawn: 당신이 나갔던 위치는 안전하지 않았습니다, 당신을 윌드 스폰으로 텔레포트시킵니다
+not_logged_in: '&c로그인하지 않았습니다!'
+reg_voluntarily: 당신이 서버에 게정을 등록하고 싶다면 "/register 비밀번호 비밀번호재입력"을 치세요
+usage_log: '&c사용법: /login 비밀번호'
+wrong_pwd: '&c잘못된 비밀번호입니다'
+unregistered: '&c성공적으로 회원탈퇴되었습니다!'
+reg_disabled: '&c회원가입이 성공적으로 비활성화되었습니다'
+valid_session: '&c세션 로그인'
+login: '&c성공적으로 로그인 되었습니다!'
+vb_nonActiv: 당신의 계정은 활성화되어 있지 않습니다 당신의 이메일을 체크해주세요!
+user_regged: '&c사용자 이름은 이미 등록되어 있습니다'
+usage_reg: '&c사용법: /register 비밀번호 비밀번호재입력'
+max_reg: 당신은 가입할 수 있는 계정의 최대 한도 수를 넘었습니다
+no_perm: '&c권한이 없습니다'
+error: 오류가 발생했습니다; 관리자한테 문의하세요
+login_msg: '&c로그인 하실려면 "/login 비밀번호"를 치세요'
+reg_msg: '&c가입하실려면 "/register 비밀번호 비밀번호재입력"을 치세요'
+reg_email_msg: '&c가입하실려면 "/register <이메일> <이메일재입력>을 치세요"'
+usage_unreg: '&c사용법: /unregister 비밀번호'
+pwd_changed: '&c비밀번호가 변경되었습니다!'
+user_unknown: '&c사용자 이름은 등록되지 않았습니다'
+password_error: 비밀번호가 일치하지 않습니다
+unvalid_session: Session Dataes doesnt corrispond 세션이 끝날때 까지 기달려주세요
+reg_only: 회원가입은 플레이어만 할 수 있습니다! http://example.com 에 가입해주세요
+logged_in: '&c이미 로그인되어 있습니다!'
+logout: '&c성공적으로 로그아웃되었습니다'
+same_nick: 같은 닉네임이 이미 게임중입니다
+registered: '&c성공적으로 회원가입되었습니다!'
+pass_len: 당신의 비밀번호는 최소 글자나 최대글자를 초과하였습니다 적당한 비밀번호 글자로 해주세요
+reload: 설정과 데이터베이스가 리로드되었습니다
+timeout: 로그인 시간 초과
+usage_changepassword: '사용법: /changepassword 기존비밀번호 새비밀번호'
+name_len: '&c당신의 닉네임은 너무 길거나 짧습니다'
+regex: '&c당신의 닉네임에 잘못된 문자가 포함되어 있습니다. 허용된 글자: REG_EX'
+add_email: '&c당신의 이메일을 : /email add yourEmail confirmEmail 명령어로 추가해주세요'
+bad_database_email: '[AuthMe] /email 명령어는 오직 MySQL 와 SQLite에서만 가능합니다, 관리자에게 문의해보세요'
+recovery_email: '&c비밀번호를 잊어버리셨다고요? /email recovery <자신의이메일>을 사용해서 복구해보세요'
+usage_captcha: '&c사용법: /captcha <캡차>'
+wrong_captcha: '&c잘못된 캡차입니다, 올바른 사용법 : /captcha THE_CAPTCHA'
+valid_captcha: '&c당신의 캡차는 올바릅니다 !'
+kick_forvip: '&c한 VIP 플레이어가 만원인 서버에 입장했습니다!!'
+kick_fullserver: '&c그 서버는 실제로 만원입니다, 미안!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_lt.yml b/src/main/resources/messages_lt.yml
index e1e40714..734ff07c 100644
--- a/src/main/resources/messages_lt.yml
+++ b/src/main/resources/messages_lt.yml
@@ -40,4 +40,14 @@ usage_captcha: '&cPanaudojimas: /captcha '
wrong_captcha: '&cNeteisinga Captcha, naudokite : /captcha THE_CAPTCHA'
valid_captcha: '&cJusu captcha Teisinga!'
kick_forvip: '&cA VIP prisijunge i pilna serveri!'
-kick_fullserver: '&cServeris yra pilnas, Atsiprasome.'
\ No newline at end of file
+kick_fullserver: '&cServeris yra pilnas, Atsiprasome.'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
\ No newline at end of file
diff --git a/src/main/resources/messages_pl.yml b/src/main/resources/messages_pl.yml
index 5b0fd967..fb081acc 100644
--- a/src/main/resources/messages_pl.yml
+++ b/src/main/resources/messages_pl.yml
@@ -41,3 +41,13 @@ wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
valid_captcha: '&cYour captcha is valid !'
kick_forvip: '&cA VIP Player join the full server!'
kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_pt.yml b/src/main/resources/messages_pt.yml
new file mode 100644
index 00000000..beacb965
--- /dev/null
+++ b/src/main/resources/messages_pt.yml
@@ -0,0 +1,54 @@
+unknown_user: '&fUtilizador não existente na base de dados'
+unsafe_spawn: '&fA sua localização na saída não é segura, será tele-portado para a Spawn'
+not_logged_in: '&cNão autenticado!'
+reg_voluntarily: '&fPode registar o seu nickname no servidor com o comando "/register password ConfirmePassword"'
+usage_log: '&cUse: /login password'
+wrong_pwd: '&cPassword errada!'
+unregistered: '&cRegisto eliminado com sucesso!'
+reg_disabled: '&cRegito de novos utilizadores desactivado'
+valid_session: '&cSessão válida'
+login: '&cAutenticado com sucesso!'
+vb_nonActiv: '&fA sua conta não foi ainda activada, verifique o seu email onde irá receber indicações para activação de conta. '
+user_regged: '&cUtilizador já registado'
+usage_reg: '&cUse: /register seu@email.com seu@email.com'
+max_reg: '&cAtingiu o numero máximo de registos permitidos'
+no_perm: '&cSem Permissões'
+error: '&fOcorreu um erro; Por favor contacte um admin'
+login_msg: '&cIdentifique-se com "/login password"'
+reg_msg: '&cPor favor registe-se com "/register password ConfirmePassword"'
+reg_email_msg: '&ePor favor registe-se com "/register "'
+usage_unreg: '&cUse: /unregister password'
+pwd_changed: '&cPassword alterada!'
+user_unknown: '&cUsername não registado'
+password_error: '&fAs passwords não coincidem'
+unvalid_session: '&fDados de sessão não correspondem. Por favor aguarde o fim da sessão'
+reg_only: '&fApenas jogadores registados! Visite http://example.com para se registar'
+logged_in: '&cJá se encontra autenticado!'
+logout: '&cSaida com sucesso'
+same_nick: '&fO mesmo nickname já se encontra a jogar no servidor'
+registered: '&cRegistado com sucesso!'
+pass_len: '&fPassword demasiado curta'
+reload: '&fConfiguração e base de dados foram recarregadas'
+timeout: '&fExcedeu o tempo para autenticação'
+usage_changepassword: '&fUse: /changepassword passwordAntiga passwordNova'
+name_len: '&cO seu nick é demasiado curto ou muito longo.'
+regex: '&cO seu nickname contém caracteres não permitidos. Permitido: REG_EX'
+add_email: '&cPor favor adicione o seu email com : /email add seuEmail confirmarSeuEmail'
+bad_database_email: '[AuthMe] O comando /email não está disponível contacte o staff via ticket'
+recovery_email: '&cPerdeu a sua password? Para a recuperar escreva /email recovery '
+usage_captcha: '&cUse: /captcha '
+wrong_captcha: '&cCaptcha errado, por favor use : /captcha THE_CAPTCHA'
+valid_captcha: '&cO seu captcha é válido!'
+kick_forvip: '&cUm jogador VIP entrou no servidor cheio!'
+kick_fullserver: '&cO servidor está actualmente cheio, lamentamos!'
+usage_email_add: '&fUse: /email add '
+usage_email_change: '&fUse: /email change '
+usage_email_recovery: '&fUse: /email recovery '
+email_add: '/email add '
+new_email_invalid: 'Novo email inválido!'
+old_email_invalid: 'Email antigo inválido!'
+email_invalid: 'Email inválido!'
+email_added: 'Email adicionado com sucesso!'
+email_confirm: 'Confirme o seu email!'
+email_changed: 'Email alterado com sucesso!'
+email_send: 'Nova palavra-passe enviada para o seu email!'
diff --git a/src/main/resources/messages_ru.yml b/src/main/resources/messages_ru.yml
index 22088bbf..78d6cefb 100644
--- a/src/main/resources/messages_ru.yml
+++ b/src/main/resources/messages_ru.yml
@@ -45,4 +45,14 @@ usage_captcha: '&cUsage: /captcha '
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
valid_captcha: '&cYour captcha is valid !'
kick_forvip: '&cA VIP Player join the full server!'
-kick_fullserver: '&cThe server is actually full, Sorry!'
+kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_sk.yml b/src/main/resources/messages_sk.yml
index 03ccb659..ce201838 100644
--- a/src/main/resources/messages_sk.yml
+++ b/src/main/resources/messages_sk.yml
@@ -44,4 +44,14 @@ usage_captcha: '&cUsage: /captcha '
wrong_captcha: '&cWrong Captcha, please use : /captcha THE_CAPTCHA'
valid_captcha: '&cYour captcha is valid !'
kick_forvip: '&cA VIP Player join the full server!'
-kick_fullserver: '&cThe server is actually full, Sorry!'
\ No newline at end of file
+kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
\ No newline at end of file
diff --git a/src/main/resources/messages_zhcn.yml b/src/main/resources/messages_zhcn.yml
index 57c389fe..6cc2f81d 100644
--- a/src/main/resources/messages_zhcn.yml
+++ b/src/main/resources/messages_zhcn.yml
@@ -40,4 +40,14 @@ usage_captcha: '&c正确用法:/captcha <验证码>'
wrong_captcha: '&c错误的验证码,请输入:“/captcha <验证码>”'
valid_captcha: '&c你的验证码是有效的!'
kick_forvip: '&cA VIP Player join the full server!'
-kick_fullserver: '&cThe server is actually full, Sorry!'
+kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
diff --git a/src/main/resources/messages_zhtw.yml b/src/main/resources/messages_zhtw.yml
index 9be69621..c83dbb76 100644
--- a/src/main/resources/messages_zhtw.yml
+++ b/src/main/resources/messages_zhtw.yml
@@ -40,4 +40,14 @@ usage_captcha: '&c用法 : 《 /captcha <驗證碼> 》'
wrong_captcha: '&c你輸入了錯誤的驗證碼,請使用 《 /captcha <驗證碼> 》 再次輸入 。'
valid_captcha: '&c你的驗證碼是無效的 !'
kick_forvip: '&cA VIP Player join the full server!'
-kick_fullserver: '&cThe server is actually full, Sorry!'
\ No newline at end of file
+kick_fullserver: '&cThe server is actually full, Sorry!'
+usage_email_add: '&fUsage: /email add '
+usage_email_change: '&fUsage: /email change '
+usage_email_recovery: '&fUsage: /email recovery '
+new_email_invalid: '[AuthMe] New email invalid!'
+old_email_invalid: '[AuthMe] Old email invalid!'
+email_invalid: '[AuthMe] Invalid Email'
+email_added: '[AuthMe] Email Added !'
+email_confirm: '[AuthMe] Confirm your Email !'
+email_changed: '[AuthMe] Email Change !'
+email_send: '[AuthMe] Recovery Email Send !'
\ No newline at end of file
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 23cd557b..33afb27d 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -3,7 +3,7 @@ author: Xephi59
website: http://www.multiplayer-italia.com/
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: uk.org.whoami.authme.AuthMe
-version: 2.9.1
+version: 2.9.2
softdepend: [Vault, ChestShop, Spout, Multiverse-Core, Notifications, Citizens, CombatTag, Essentials, EssentialsSpawn]
commands:
register: