Merge pull request #2 from Xephi/master

Syncing
This commit is contained in:
Maxetto 2015-07-05 20:55:06 +02:00
commit 86d41294a7
10 changed files with 188 additions and 186 deletions

View File

@ -9,3 +9,11 @@ cache:
script:
- mvn clean install -B && mvn clean -B
notifications:
webhooks:
urls:
- https://webhooks.gitter.im/e/952357dbd9d3cea70fd5
on_success: change # options: [always|never|change] default: always
on_failure: always # options: [always|never|change] default: always
on_start: false # default: false

View File

@ -4,6 +4,8 @@
<hr>
#####Development tools:
[![Join the chat at https://gitter.im/Xephi/AuthMeReloaded](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Xephi/AuthMeReloaded?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
- Build status: [![Build Status](https://travis-ci.org/Xephi/AuthMeReloaded.svg?branch=master)](https://travis-ci.org/Xephi/AuthMeReloaded)
- Build Server: <a href="http://ci.xephi.fr">Jenkins</a>

70
pom.xml
View File

@ -3,7 +3,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.xephi.authme.AuthMe</groupId>
<groupId>fr.xephi.authme</groupId>
<artifactId>AuthMe</artifactId>
<version>5.0-SNAPSHOT</version>
@ -79,6 +79,29 @@
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<artifactSet>
<includes>
<include>com.maxmind.geoip:*</include>
<include>com.sun.mail:*</include>
<include>javax.mail:*</include>
<include>com.comphenix.attribute:*</include>
</includes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
@ -114,12 +137,6 @@
<url>http://repo.minelink.net/content/repositories/public</url>
</repository>
<!-- CombatTag Repo, Unofficial (needs replacement) UPDATE: this server is OFFLINE
<repository>
<id>techcable-repo</id>
<url>http://repo.techcable.net/content/repositories/snapshots/</url>
</repository> -->
<!-- XAuth Repo -->
<repository>
<id>luricos-releases</id>
@ -175,12 +192,7 @@
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.5.0-b01</version>
<version>1.5.4</version>
</dependency>
<!-- Maxmind GeoIp API -->
@ -198,7 +210,7 @@
<version>${bukkitVersion}</version>
</dependency>
<!-- Attribute -->
<!-- Attribute -->
<dependency>
<groupId>com.comphenix.attribute</groupId>
<artifactId>AttributeStorage</artifactId>
@ -212,7 +224,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Vault, http://dev.bukkit.org/bukkit-plugins/vault/ -->
@ -229,7 +241,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Citizens 2.X, NPC plugin, http://dev.bukkit.org/bukkit-plugins/citizens/ -->
@ -246,7 +258,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Multi World plugin, http://www.spigotmc.org/resources/multiverse-core.390/ -->
@ -265,7 +277,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Essentials plugin -->
@ -282,7 +294,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Anti PvPLogging plugin, https://github.com/MinelinkNetwork/CombatTagPlus -->
@ -299,7 +311,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Anti PvPLogging plugin, http://www.spigotmc.org/resources/combat-tag.3182/ -->
@ -316,7 +328,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- XAuth, another authentication plugin, required by the database converter -->
@ -333,7 +345,7 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Spout API, https://spoutcraft.org/downloads/ -->
@ -350,11 +362,11 @@
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</exclusions>
</dependency>
<!-- Local Dependencies -->
<!-- It doesn't have a Maven Repo, http://dev.bukkit.org/bukkit-plugins/chestshop/ -->
<dependency>
<groupId>com.Acrobot</groupId>
@ -362,16 +374,6 @@
<version>3.8.10</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/ChestShop.jar</systemPath>
<exclusions>
<exclusion>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
</exclusion>
<exclusion>
<groupId>org.bukkit</groupId>
<artifactId>craftbukkit</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Citizens 1.X (No API) -->

View File

@ -6,7 +6,6 @@ import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
@ -41,53 +40,56 @@ public class SendMailSSL {
sendername = Settings.getmailSenderName;
}
String port = String.valueOf(Settings.getMailPort);
Properties props = new Properties();
props.put("mail.smtp.host", Settings.getmailSMTP);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", port);
props.put("mail.smtp.starttls.enable", true);
final String sender = sendername;
final String port = String.valueOf(Settings.getMailPort);
final String acc = Settings.getmailAccount;
final String subject = Settings.getMailSubject;
final String smtp = Settings.getmailSMTP;
final String password = Settings.getmailPassword;
final String mailText = Settings.getMailText;
final String mail = auth.getEmail();
try {
Session session = Session.getInstance(props, null);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
final Message message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(Settings.getmailAccount, sendername));
} catch (UnsupportedEncodingException uee) {
message.setFrom(new InternetAddress(Settings.getmailAccount));
}
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(auth.getEmail()));
message.setSubject(Settings.getMailSubject);
message.setSentDate(new Date());
BodyPart messageBodyPart = new MimeBodyPart();
String text = Settings.getMailText;
messageBodyPart.setText(text);
@Override
public void run() {
try {
Properties props = new Properties();
props.put("mail.smtp.host", smtp);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", port);
props.put("mail.smtp.starttls.enable", true);
Session session = Session.getInstance(props, null);
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
final Transport transport = session.getTransport("smtp");
transport.connect(Settings.getmailSMTP, Settings.getmailAccount, Settings.getmailPassword);
Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable() {
@Override
public void run() {
Message message = new MimeMessage(session);
try {
transport.sendMessage(message, message.getAllRecipients());
} catch (MessagingException e) {
System.out.println("Some error occured while trying to send a mail to " + auth.getEmail());
message.setFrom(new InternetAddress(acc, sender));
} catch (UnsupportedEncodingException uee) {
message.setFrom(new InternetAddress(acc));
}
}
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mail));
message.setSubject(subject);
message.setSentDate(new Date());
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(mailText);
});
} catch (Exception e) {
System.out.println("Some error occured while trying to send a mail to " + auth.getEmail());
}
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport transport = session.getTransport("smtp");
transport.connect(smtp, acc, password);
transport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
System.out.println("Some error occured while trying to send a mail to " + mail);
}
}
});
}
}

View File

@ -1,10 +1,8 @@
package fr.xephi.authme;
import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import java.util.Scanner;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
@ -12,10 +10,10 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import fr.xephi.authme.api.API;
import fr.xephi.authme.cache.limbo.LimboCache;
import fr.xephi.authme.cache.limbo.LimboPlayer;
import fr.xephi.authme.events.AuthMeTeleportEvent;
import fr.xephi.authme.security.RandomString;
import fr.xephi.authme.settings.Settings;
public class Utils {
@ -24,6 +22,7 @@ public class Utils {
private static Utils singleton;
int id;
public AuthMe plugin;
private static List<String> tokens = new ArrayList<String>();
public Utils(AuthMe plugin) {
this.plugin = plugin;
@ -167,19 +166,18 @@ public class Utils {
* Random Token for passpartu
*/
public boolean obtainToken() {
File file = new File("plugins" + File.separator + "AuthMe" + File.separator + "passpartu.token");
if (file.exists())
file.delete();
FileWriter writer = null;
try {
file.createNewFile();
writer = new FileWriter(file);
String token = generateToken();
writer.write(token + ":" + System.currentTimeMillis() / 1000 + API.newline);
writer.flush();
final String token = new RandomString(10).nextString();
tokens.add(token);
ConsoleLogger.info("[AuthMe] Security passpartu token: " + token);
writer.close();
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
@Override
public void run() {
tokens.remove(token);
}
}, 600);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -191,46 +189,11 @@ public class Utils {
* Read Token
*/
public boolean readToken(String inputToken) {
File file = new File("plugins" + File.separator + "AuthMe" + File.separator + "passpartu.token");
if (!file.exists())
return false;
if (inputToken.isEmpty())
return false;
Scanner reader = null;
try {
reader = new Scanner(file);
while (reader.hasNextLine()) {
final String line = reader.nextLine();
if (line.contains(":")) {
String[] tokenInfo = line.split(":");
if (tokenInfo[0].equals(inputToken) && System.currentTimeMillis() / 1000 - 30 <= Integer.parseInt(tokenInfo[1])) {
file.delete();
reader.close();
return true;
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
reader.close();
return false;
}
/*
* Generate Random Token
*/
private String generateToken() {
// obtain new random token
Random rnd = new Random();
char[] arr = new char[5];
for (int i = 0; i < 5; i++) {
int n = rnd.nextInt(36);
arr[i] = (char) (n < 10 ? '0' + n : 'a' + n - 10);
}
return new String(arr);
boolean ret = false;
if (tokens.contains(inputToken))
ret = true;
tokens.remove(inputToken);
return (ret);
}
/*

View File

@ -73,6 +73,7 @@ public class AdminCommand implements CommandExecutor {
sender.sendMessage("/authme getemail <playername> - Get player email");
sender.sendMessage("/authme purgelastpos <playername> - Purge last position for a player");
sender.sendMessage("/authme switchantibot on/off - Enable/Disable antibot method");
sender.sendMessage("/authme forcelogin <playername>");
return true;
}
@ -552,6 +553,26 @@ public class AdminCommand implements CommandExecutor {
database.updateQuitLoc(auth);
sender.sendMessage("[AuthMe] Successfully reset position for " + auth.getNickname());
return true;
} else if (args[0].equalsIgnoreCase("forcelogin")) {
if (args.length < 2) {
sender.sendMessage("Usage : /authme forcelogin <playerName>");
return true;
}
try {
Player player = Bukkit.getPlayer(args[1]);
if (player == null || !player.isOnline()) {
sender.sendMessage("Online player only !");
return true;
}
if (!plugin.authmePermissible(player, "authme.canbeforced")) {
sender.sendMessage("You cannot force login for this player!");
return true;
}
plugin.management.performLogin(player, "dontneed", true);
sender.sendMessage("Force Login performed !");
} catch (Exception e) {
sender.sendMessage("An error occured while trying to get that player!");
}
} else {
sender.sendMessage("Usage: /authme reload|register playername password|changepassword playername password|unregister playername");
}

View File

@ -263,7 +263,7 @@ public final class Settings extends YamlConfiguration {
delayJoinMessage = configFile.getBoolean("settings.delayJoinMessage", false);
noTeleport = configFile.getBoolean("settings.restrictions.noTeleport", false);
crazyloginFileName = configFile.getString("Converter.CrazyLogin.fileName", "accounts.db");
getPassRegex = configFile.getString("settings.restrictions.allowedPasswordCharacters", "[a-zA-Z0-9_?!@+&-]*");
getPassRegex = configFile.getString("settings.restrictions.allowedPasswordCharacters", "[\\x21-\\x7E]*");
applyBlindEffect = configFile.getBoolean("settings.applyBlindEffect", false);
emailBlacklist = configFile.getStringList("Email.emailBlacklisted");
emailWhitelist = configFile.getStringList("Email.emailWhitelisted");
@ -430,7 +430,7 @@ public final class Settings extends YamlConfiguration {
delayJoinMessage = configFile.getBoolean("settings.delayJoinMessage", false);
noTeleport = configFile.getBoolean("settings.restrictions.noTeleport", false);
crazyloginFileName = configFile.getString("Converter.CrazyLogin.fileName", "accounts.db");
getPassRegex = configFile.getString("settings.restrictions.allowedPasswordCharacters", "[a-zA-Z0-9_?!@+&-]*");
getPassRegex = configFile.getString("settings.restrictions.allowedPasswordCharacters", "[\\x21-\\x7E]*");
applyBlindEffect = configFile.getBoolean("settings.applyBlindEffect", false);
emailBlacklist = configFile.getStringList("Email.emailBlacklisted");
emailWhitelist = configFile.getStringList("Email.emailWhitelisted");
@ -554,7 +554,7 @@ public final class Settings extends YamlConfiguration {
changes = true;
}
if (!contains("settings.restrictions.allowedPasswordCharacters")) {
set("settings.restrictions.allowedPasswordCharacters", "[a-zA-Z0-9_?!@+&-]*");
set("settings.restrictions.allowedPasswordCharacters", "[\\x21-\\x7E]*");
changes = true;
}
if (!contains("settings.applyBlindEffect")) {
@ -579,13 +579,11 @@ public final class Settings extends YamlConfiguration {
set("settings.forceRegisterCommandsAsConsole", new ArrayList<String>());
changes = true;
}
if (!contains("Hooks.customAttributes"))
{
if (!contains("Hooks.customAttributes")) {
set("Hooks.customAttributes", false);
changes = true;
}
if (!contains("Purge.removePermissions"))
{
if (!contains("Purge.removePermissions")) {
set("Purge.removePermissions", false);
changes = true;
}

View File

@ -1,56 +1,56 @@
unknown_user: "L'utente non è presente nel database"
unsafe_spawn: 'Il tuo punto di logout non era sicuro, sei stato teletrasportato allo Spawn'
not_logged_in: '&cNon loggato!'
reg_voluntarily: 'Puoi registrare il tuo nickname nel server con "/register <password> <ConfermaPassword>"'
unknown_user: "L'utente non è presente nel database."
unsafe_spawn: 'Il punto di disconnessione è attualmente ostruito o insicuro, sei stato teletrasportato al punto di rigenerazione!'
not_logged_in: "&cL'utente non ha ancora eseguito l'autenticazione!"
reg_voluntarily: 'Per eseguire la registrazione al server devi eseguire il seguente comando: "/register <password> <ConfermaPassword>"'
usage_log: '&cUtilizzo: /login <password>'
wrong_pwd: '&cPassword sbagliata'
unregistered: '&cCancellato correttamente!'
reg_disabled: '&cLe registrazioni sono disabilitate'
valid_session: '&cLoggato attraverso la sessione'
login: '&cLoggato correttamente!'
vb_nonActiv: 'Il tuo account non è ancora attivo, controlla le tue Email!'
user_regged: '&cUtente già registrato'
wrong_pwd: '&cPassword non corretta!'
unregistered: "&cL'utente è stato rimosso dal database con successo!"
reg_disabled: '&cLa registrazione tramite i comandi del gioco è disabilitata.'
valid_session: '&cAutenticato attraverso la sessione ripresa!'
login: '&cAutenticazone effettuata correttamente!'
vb_nonActiv: 'Il tuo Account non è stato ancora verificato, controlla le tue Email per scoprire come attivarlo!'
user_regged: "&cL'utente si è già registrato, impossibile eseguire nuovamente la registrazione."
usage_reg: '&cUtilizzo: /register <password> <confermaPassword>'
max_reg: 'Hai raggiunto il numero massimo di registrazioni per il tuo account'
no_perm: '&cNessun Permesso'
error: "Errore; Perfavore, contatta l'admin"
login_msg: '&cPerfavore, loggati con "/login <password>"'
reg_msg: '&cPerfavore, registrati con "/register <password> <confermaPassword>"'
reg_email_msg: '&cPerfavore, registrati con "/register <email> <confermaEmail>"'
max_reg: 'Hai raggiunto il numero massimo di registrazioni per indirizzo IP!'
no_perm: '&cNon hai il permesso di eseguire questa operazione.'
login_msg: '&cPerfavore, per giocare devi effettuare l'autenticazione con il comando: "/login <password>"'
reg_msg: '&cPerfavore, per connetterti al server devi prima registrarti con il comando: "/register <password> <ConfermaPassword>"'
reg_email_msg: '&cPerfavore, per connetterti al server devi prima registrarti con il comando: "/register <email> <confermaEmail>"'
usage_unreg: '&cUtilizzo: /unregister <password>'
pwd_changed: '&cPassword cambiata correttamente!'
user_unknown: '&cUtente non registrato'
password_error: 'Le Password non corrispondono'
unvalid_session: "I tuoi dati non combaciano con l'ultima sessione. Per favore attendi la fine della sessione attuale"
reg_only: 'Possono entrare solo utenti registrati! Perfavore, vai su http://example.com per registrarti'
logged_in: '&cSei già loggato!'
logout: '&cDisconnesso correttamente'
same_nick: 'Lo stesso nickname è già online'
pwd_changed: '&cPassword cambiata con successo!'
user_unknown: "&cL'utente non ha ancora eseguito la registrazione."
password_error: 'Le Password non corrispondono!'
invalid_session: "I tuoi dati di connessione attuali non sono quelli utilizzati in precedenza. Attendere la fine della sessione attuale."
reg_only: 'La registrazione è effettuabile soltanto attraverso il sito web! Perfavore, vai su http://example.com per procedere!'
logged_in: '&cHai già eseguito l'autenticazione!'
logout: '&cDisconnessione avvenuta correttamente!'
same_nick: 'Lo stesso nickname è già online sul server!'
registered: '&cRegistrato correttamente!'
pass_len: 'La tua password è troppo corta o troppo lunga'
reload: 'La configurazione e il database sono stati ricaricati'
timeout: 'Timeout di Login'
pass_len: 'La tua password è troppo corta o troppo lunga, prova a cambiarla!'
reload: 'La configurazione e il database sono stati ricaricati con successo!'
timeout: "Tempo scaduto per effettuare l'autenticazione"
usage_changepassword: 'Utilizzo: /changepassword <vecchiaPassword> <nuovaPassword>'
name_len: '&cIl tuo nickname è troppo corto o troppo lungo'
regex: '&cIl tuo nickname contiene caratteri strani. Caratteri abilitati: REG_EX'
add_email: '&cPer una maggiore sicurezza, aggiungi una mail con : /email add <tuaEmail> <confermaEmail>'
bad_database_email: '[AuthMe] Il comando /email è utilizzabile solo con MySQL o SQLite, contatta un admin'
recovery_email: '&cDimenticata la tua password? Perfavore, fai /email recovery <tuaEmail>'
name_len: '&cIl tuo nickname è troppo corto o troppo lungo!'
regex: '&cIl tuo nickname contiene caratteri non consentiti. I caratteri consentiti sono: REG_EX'
add_email: '&cPer poter recuperare la password in futuro, aggiungi una email al tuo account con il comando: "/email add tuaEmail confermaEmail"'
bad_database_email: 'Il comando /email è utilizzabile solo con database MySQL o SQLite, riporta questo errore ad un Admin!'
recovery_email: '&cHai dimenticato la tua password? Puoi recuperarla eseguendo il comando: "/email recovery <tuaEmail>"'
usage_captcha: '&cUtilizzo: /captcha <ilCaptcha>'
wrong_captcha: '&cCaptcha sbagliato, perfavore fai: /captcha THE_CAPTCHA'
wrong_captcha: '&cCodice captcha sbagliato, perfavore riprova eseguendo il comando: "/captcha THE_CAPTCHA"'
valid_captcha: '&cIl tuo captcha è valido!'
kick_forvip: '&cUn utente VIP è entrato mentre il server era pieno!'
kick_fullserver: '&cIl server è attualmente pieno, riprova più tardi!'
usage_email_add: '&fUtilizzo: /email add <email> <confermaEmail>'
usage_email_change: '&fUtilizzo: /email change <vecchiaEmail> <nuovaEmail>'
usage_email_recovery: '&fUtilizzo: /email recovery <email>'
new_email_invalid: '[AuthMe] La nuova Email non è valida!'
old_email_invalid: '[AuthMe] La vecchia Email non è valida!'
email_invalid: "[AuthMe] L'Email non è valida"
email_added: '[AuthMe] Email aggiunta!'
email_confirm: '[AuthMe] Conferma la tua Email!'
email_changed: '[AuthMe] Email cambiata!'
email_send: '[AuthMe] Email di recupero inviata!'
country_banned: 'Il tuo paese è bannato su questo server'
antibot_auto_enabled: '[AuthMe] AntiBotMod è stato automaticamente abilitato a seguito delle numerose connessioni!'
antibot_auto_disabled: "[AuthMe] AntiBotMod è stato automaticamente disabilitato dopo %m Minuti, sperando che l'invasione sia finita"
new_email_invalid: 'La nuova Email non è valida!'
old_email_invalid: 'La vecchia Email non è valida!'
email_invalid: "L'Email non è valida"
email_added: 'Email aggiunta correttamente!'
email_confirm: 'Conferma la tua Email!'
email_changed: 'Email cambiata correttamente!'
email_send: 'Email di recupero inviata al tuo indirizzo!'
email_exists: 'Il tuo account ha già una Email configurata. Se vuoi, puoi cambiarla con il seguente comando:'
country_banned: 'Il tuo paese è bandito su questo server!'
antibot_auto_enabled: 'Il servizio di AntiBot è stato automaticamente abilitato a seguito delle numerose connessioni!'
antibot_auto_disabled: "Il servizio di AntiBot è stato automaticamente disabilitato dopo %m Minuti, sperando che l'attacco sia finito!"

View File

@ -1,5 +1,4 @@
# Translator: uSoc_lifehome (http://lifeho.me) #
# '-- Last edit: 1405878032 UTC #
# -------------------------------------------- #
unknown_user: '&8[&6用戶系統&8] &f用戶資料並不存在於資料庫中。'
unsafe_spawn: '&8[&6用戶系統&8] &f你的登出位置不安全現在將傳送你到重生點。'
@ -25,7 +24,7 @@ pwd_changed: '&8[&6用戶系統&8] &c你成功的更換了你的密碼 '
user_unknown: '&8[&6用戶系統&8] &c此用戶名沒有已登記資料。'
password_error: '&8[&6用戶系統&8] &f密碼不符合。'
unvalid_session: '&8[&6用戶系統&8] &f登入階段資料已損壞請等待登入階段結束。'
reg_only: '&8[&6用戶系統&8] &f限已註冊會員請先到 https://www.craftinghk.com/ 註冊。'
reg_only: '&8[&6用戶系統&8] &f限已註冊會員請先到 https://www.example.com/ 註冊。'
logged_in: '&8[&6用戶系統&8] &c你已經登入過了。'
logout: '&8[&6用戶系統&8] &b你成功的登出了。'
same_nick: '&8[&6用戶系統&8] &f同名玩家已在遊玩。'

View File

@ -69,6 +69,7 @@ permissions:
authme.admin.getip: true
authme.admin.converter: true
authme.admin.resetposition: true
authme.admin.forcelogin: true
authme.register:
description: Register an account
default: true
@ -165,3 +166,9 @@ permissions:
authme.admin.resetposition:
description: Reset last position for a player
default: op
authme.admin.forcelogin:
description: Force login for that player
default: op
authme.canbeforced:
description: Can this player be forced to login
default: true