Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a31c2f45b1 | |||
| 06d9e71ae8 | |||
| 441e020192 | |||
| f153867d85 | |||
| eed5ce1b7b | |||
| 00b4bcb6a3 | |||
| e69ba501da | |||
| f2ccbf72a8 | |||
| c29aec210b | |||
| 78b5102692 | |||
| 9fd671db85 | |||
| beb99418d4 | |||
| 0f70de9a5a | |||
| 08ad55c742 | |||
| a70c1e0102 | |||
| efec997128 | |||
| 413c2a39d7 | |||
| 5a9b9ce619 | |||
| ee58da2b39 | |||
| 7475cd8ea4 | |||
| 8b8f6c0e2e | |||
| 69b170b754 | |||
| 702b6aae32 |
@@ -10,14 +10,14 @@ jobs:
|
|||||||
Build:
|
Build:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
jdkversion: [11]
|
jdkversion: [ 11 ]
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- uses: actions/setup-java@v3
|
- uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
java-version: ${{ matrix.jdkversion }}
|
java-version: ${{ matrix.jdkversion }}
|
||||||
cache: 'maven'
|
cache: 'maven'
|
||||||
- name: 使用Maven构建
|
- name: Build
|
||||||
run: mvn -V -B clean package --file pom.xml
|
run: mvn -V -B clean package --file pom.xml
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
**"A fork of the best authentication plugin for the Bukkit modding API!"**
|
**"A fork of the best authentication plugin for the Bukkit modding API!"**
|
||||||
MCBBS Link: [Click Here](https://www.mcbbs.net/forum.php?mod=viewthread&tid=1471495)
|
MCBBS Link: [Click Here](https://www.mcbbs.net/forum.php?mod=viewthread&tid=1471495)
|
||||||

|

|
||||||
|
<p align="center">
|
||||||
|
<img src="https://img.shields.io/github/languages/code-size/HaHaWTH/AuthMeReReloaded.svg" alt="Code size"/>
|
||||||
|
<img src="https://img.shields.io/github/repo-size/HaHaWTH/AuthMeReReloaded.svg" alt="GitHub repo size"/>
|
||||||
|
</p>
|
||||||
|
|
||||||
**Detailed Changes:**
|
**Detailed Changes:**
|
||||||
1. Improved mail sending logic & support more emails
|
1. Improved mail sending logic & support more emails
|
||||||
@@ -19,3 +23,4 @@ MCBBS Link: [Click Here](https://www.mcbbs.net/forum.php?mod=viewthread&tid=1471
|
|||||||
13. Offhand Menu compatibility(Thats amazing)
|
13. Offhand Menu compatibility(Thats amazing)
|
||||||
14. Automatically fix portal stuck issue
|
14. Automatically fix portal stuck issue
|
||||||
15. More......
|
15. More......
|
||||||
|
**Pull Requests and suggestions are welcome!**
|
||||||
|
|||||||
@@ -687,7 +687,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.zaxxer</groupId>
|
<groupId>com.zaxxer</groupId>
|
||||||
<artifactId>HikariCP</artifactId>
|
<artifactId>HikariCP</artifactId>
|
||||||
<version>5.0.1</version> <!-- Latest java 8 release -->
|
<version>4.0.3</version> <!-- Latest java 8 release -->
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
@@ -700,7 +700,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-simple</artifactId>
|
<artifactId>slf4j-simple</artifactId>
|
||||||
<version>2.0.5</version> <!-- We can't update to 2.x as long as we use HikariCP for java 8 -->
|
<version>1.7.36</version> <!-- We can't update to 2.x as long as we use HikariCP for java 8 -->
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@@ -1082,7 +1082,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.h2database</groupId>
|
<groupId>com.h2database</groupId>
|
||||||
<artifactId>h2</artifactId>
|
<artifactId>h2</artifactId>
|
||||||
<version>2.1.214</version>
|
<version>2.2.224</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|||||||
@@ -39,12 +39,9 @@ import fr.xephi.authme.settings.properties.SecuritySettings;
|
|||||||
import fr.xephi.authme.task.CleanupTask;
|
import fr.xephi.authme.task.CleanupTask;
|
||||||
import fr.xephi.authme.task.purge.PurgeService;
|
import fr.xephi.authme.task.purge.PurgeService;
|
||||||
import fr.xephi.authme.util.ExceptionUtils;
|
import fr.xephi.authme.util.ExceptionUtils;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.event.HandlerList;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
import org.bukkit.plugin.PluginManager;
|
import org.bukkit.plugin.PluginManager;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.scheduler.BukkitScheduler;
|
import org.bukkit.scheduler.BukkitScheduler;
|
||||||
@@ -77,8 +74,7 @@ public class AuthMe extends JavaPlugin {
|
|||||||
// Version and build number values
|
// Version and build number values
|
||||||
private static String pluginVersion = "5.6.0-Fork";
|
private static String pluginVersion = "5.6.0-Fork";
|
||||||
private static final String pluginBuild = "b";
|
private static final String pluginBuild = "b";
|
||||||
private static String pluginBuildNumber = "31";
|
private static String pluginBuildNumber = "32";
|
||||||
protected final Boolean SHAEnabled = false;
|
|
||||||
// Private instances
|
// Private instances
|
||||||
private EmailService emailService;
|
private EmailService emailService;
|
||||||
private CommandHandler commandHandler;
|
private CommandHandler commandHandler;
|
||||||
@@ -209,39 +205,17 @@ public class AuthMe extends JavaPlugin {
|
|||||||
PurgeService purgeService = injector.getSingleton(PurgeService.class);
|
PurgeService purgeService = injector.getSingleton(PurgeService.class);
|
||||||
purgeService.runAutoPurge();
|
purgeService.runAutoPurge();
|
||||||
// 注册玩家加入事件监听
|
// 注册玩家加入事件监听
|
||||||
// if (settings.getProperty(SecuritySettings.ANTI_GHOST_PLAYERS) || settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)/* || settings.getProperty(SecuritySettings.GUI_CAPTCHA)*/) {
|
// register3rdPartyListeners();
|
||||||
register3rdPartyListeners();
|
|
||||||
logger.info("GitHub: https://github.com/HaHaWTH/AuthMeReReloaded/");
|
logger.info("GitHub: https://github.com/HaHaWTH/AuthMeReReloaded/");
|
||||||
|
|
||||||
if (settings.getProperty(SecuritySettings.CHECK_FOR_UPDATES)) {
|
if (settings.getProperty(SecuritySettings.CHECK_FOR_UPDATES)) {
|
||||||
checkForUpdates();
|
checkForUpdates();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SHAEnabled) {
|
|
||||||
//shaChecker();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public File pluginfile = getFile();
|
|
||||||
|
|
||||||
private void register3rdPartyListeners() {
|
//Migrated
|
||||||
if (settings.getProperty(SecuritySettings.ANTI_GHOST_PLAYERS)) {
|
|
||||||
getServer().getPluginManager().registerEvents(new DoubleLoginFixListener((Plugin) this), this);
|
|
||||||
}
|
|
||||||
if (settings.getProperty(SecuritySettings.LOGIN_LOC_FIX_SUB_UNDERGROUND) || settings.getProperty(SecuritySettings.LOGIN_LOC_FIX_SUB_PORTAL)) {
|
|
||||||
getServer().getPluginManager().registerEvents(new LoginLocationFixListener((Plugin) this), this);
|
|
||||||
}
|
|
||||||
// if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && getServer().getPluginManager().getPlugin("floodgate") != null) {
|
|
||||||
// getServer().getPluginManager().registerEvents(new BedrockAutoLoginListener((Plugin) this), this);
|
|
||||||
// }
|
|
||||||
// if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") != null) {
|
|
||||||
// getServer().getPluginManager().registerEvents(new GuiCaptchaHandler((Plugin) this), this);
|
|
||||||
// logger.info("(Beta)GUICaptcha is enabled successfully!");
|
|
||||||
// logger.info("These features are still in early development, if you encountered any problem, please report.");
|
|
||||||
// } else if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") == null) {
|
|
||||||
// logger.warning("ProtocolLib is not loaded, can't enable GUI Captcha.");
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Load the version and build number of the plugin from the description file.
|
* Load the version and build number of the plugin from the description file.
|
||||||
*
|
*
|
||||||
@@ -336,18 +310,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
pluginManager.registerEvents(injector.getSingleton(EntityListener.class), this);
|
pluginManager.registerEvents(injector.getSingleton(EntityListener.class), this);
|
||||||
pluginManager.registerEvents(injector.getSingleton(ServerListener.class), this);
|
pluginManager.registerEvents(injector.getSingleton(ServerListener.class), this);
|
||||||
|
|
||||||
//Register 3rd party listeners
|
|
||||||
if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") != null) {
|
|
||||||
pluginManager.registerEvents(injector.getSingleton(GuiCaptchaHandler.class), this);
|
|
||||||
logger.info("(Beta)GUICaptcha is enabled successfully!");
|
|
||||||
logger.info("These features are still in early development, if you encountered any problem, please report.");
|
|
||||||
} else if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") == null) {
|
|
||||||
logger.warning("ProtocolLib is not loaded, can't enable GUI Captcha.");
|
|
||||||
}
|
|
||||||
if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && getServer().getPluginManager().getPlugin("floodgate") != null) {
|
|
||||||
pluginManager.registerEvents(injector.getSingleton(BedrockAutoLoginListener.class), this);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Try to register 1.8+ player listeners
|
// Try to register 1.8+ player listeners
|
||||||
if (isClassLoaded("org.bukkit.event.entity.EntityPickupItemEvent") && isClassLoaded("org.bukkit.event.player.PlayerSwapHandItemsEvent")) {
|
if (isClassLoaded("org.bukkit.event.entity.EntityPickupItemEvent") && isClassLoaded("org.bukkit.event.player.PlayerSwapHandItemsEvent")) {
|
||||||
@@ -355,8 +317,7 @@ public class AuthMe extends JavaPlugin {
|
|||||||
} else if (isClassLoaded("org.bukkit.event.player.PlayerSwapHandItemsEvent")) {
|
} else if (isClassLoaded("org.bukkit.event.player.PlayerSwapHandItemsEvent")) {
|
||||||
pluginManager.registerEvents(injector.getSingleton(PlayerListener19.class), this);
|
pluginManager.registerEvents(injector.getSingleton(PlayerListener19.class), this);
|
||||||
}
|
}
|
||||||
|
// Try to register 1.9 player listeners(Moved to else-if)
|
||||||
// Try to register 1.9 player listeners(Moved to else-if)
|
|
||||||
// if (isClassLoaded("org.bukkit.event.player.PlayerSwapHandItemsEvent")) {
|
// if (isClassLoaded("org.bukkit.event.player.PlayerSwapHandItemsEvent")) {
|
||||||
// pluginManager.registerEvents(injector.getSingleton(PlayerListener19.class), this);
|
// pluginManager.registerEvents(injector.getSingleton(PlayerListener19.class), this);
|
||||||
// }
|
// }
|
||||||
@@ -370,6 +331,26 @@ public class AuthMe extends JavaPlugin {
|
|||||||
if (isClassLoaded("org.bukkit.event.entity.EntityAirChangeEvent")) {
|
if (isClassLoaded("org.bukkit.event.entity.EntityAirChangeEvent")) {
|
||||||
pluginManager.registerEvents(injector.getSingleton(PlayerListener111.class), this);
|
pluginManager.registerEvents(injector.getSingleton(PlayerListener111.class), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Register 3rd party listeners
|
||||||
|
if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") != null) {
|
||||||
|
pluginManager.registerEvents(injector.getSingleton(GuiCaptchaHandler.class), this);
|
||||||
|
logger.info("(Beta)GUICaptcha is enabled successfully!");
|
||||||
|
logger.info("These features are still in early development, if you encountered any problem, please report.");
|
||||||
|
} else if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") == null) {
|
||||||
|
logger.warning("ProtocolLib is not loaded, can't enable GUI Captcha.");
|
||||||
|
}
|
||||||
|
if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && getServer().getPluginManager().getPlugin("floodgate") != null) {
|
||||||
|
pluginManager.registerEvents(injector.getSingleton(BedrockAutoLoginListener.class), this);
|
||||||
|
} else if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && (!settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) || getServer().getPluginManager().getPlugin("floodgate") == null)) {
|
||||||
|
logger.warning("Failed to enable BedrockAutoLogin, ensure hookFloodgate: true and floodgate is loaded.");
|
||||||
|
}
|
||||||
|
if (settings.getProperty(SecuritySettings.LOGIN_LOC_FIX_SUB_UNDERGROUND) || settings.getProperty(SecuritySettings.LOGIN_LOC_FIX_SUB_PORTAL)) {
|
||||||
|
pluginManager.registerEvents(injector.getSingleton(LoginLocationFixListener.class), this);
|
||||||
|
}
|
||||||
|
if (settings.getProperty(SecuritySettings.ANTI_GHOST_PLAYERS)) {
|
||||||
|
pluginManager.registerEvents(injector.getSingleton(DoubleLoginFixListener.class), this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -410,7 +391,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
|
|
||||||
// Disabled correctly
|
// Disabled correctly
|
||||||
Consumer<String> infoLogMethod = logger == null ? getLogger()::info : logger::info;
|
Consumer<String> infoLogMethod = logger == null ? getLogger()::info : logger::info;
|
||||||
HandlerList.unregisterAll(this);
|
|
||||||
infoLogMethod.accept("AuthMe " + this.getDescription().getVersion() + " is unloaded successfully!");
|
infoLogMethod.accept("AuthMe " + this.getDescription().getVersion() + " is unloaded successfully!");
|
||||||
ConsoleLogger.closeFileWriter();
|
ConsoleLogger.closeFileWriter();
|
||||||
}
|
}
|
||||||
@@ -421,7 +401,7 @@ public class AuthMe extends JavaPlugin {
|
|||||||
|
|
||||||
private void checkForUpdates() {
|
private void checkForUpdates() {
|
||||||
logger.info("Checking for updates...");
|
logger.info("Checking for updates...");
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(this, () -> {
|
bukkitService.runTaskAsynchronously(() -> {
|
||||||
try {
|
try {
|
||||||
// 从南通集线器获取最新版本号
|
// 从南通集线器获取最新版本号
|
||||||
URL url = new URL("https://api.github.com/repos/" + owner + "/" + repo + "/releases/latest");
|
URL url = new URL("https://api.github.com/repos/" + owner + "/" + repo + "/releases/latest");
|
||||||
@@ -437,8 +417,8 @@ public class AuthMe extends JavaPlugin {
|
|||||||
latestVersion = latestVersion.substring(0, latestVersion.indexOf("\""));
|
latestVersion = latestVersion.substring(0, latestVersion.indexOf("\""));
|
||||||
if (isUpdateAvailable(latestVersion)) {
|
if (isUpdateAvailable(latestVersion)) {
|
||||||
String message = "New version available! Latest:" + latestVersion + " Current:" + pluginBuild + pluginBuildNumber;
|
String message = "New version available! Latest:" + latestVersion + " Current:" + pluginBuild + pluginBuildNumber;
|
||||||
getLogger().log(Level.INFO, message);
|
getLogger().log(Level.WARNING, message);
|
||||||
getLogger().log(Level.INFO, "Download from here: github.com/HaHaWTH/AuthMeReReloaded/releases/latest");
|
getLogger().log(Level.WARNING, "Download from here: github.com/HaHaWTH/AuthMeReReloaded/releases/latest");
|
||||||
} else {
|
} else {
|
||||||
getLogger().log(Level.INFO, "You are running the latest version.");
|
getLogger().log(Level.INFO, "You are running the latest version.");
|
||||||
}
|
}
|
||||||
@@ -481,72 +461,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
logger.info("AuthMeReReloaded is running on Unknown*");
|
logger.info("AuthMeReReloaded is running on Unknown*");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 其他方法和事件处理
|
|
||||||
|
|
||||||
|
|
||||||
// 其他方法和事件处理
|
|
||||||
private static final String SHA_URL = "https://raw.githubusercontent.com/"+ owner +"/"+ repo + "/master/"+pluginBuild +pluginBuildNumber+ ".sha";
|
|
||||||
private static final String ALGORITHM = "SHA-256";
|
|
||||||
private static final String PROXY_URL = "https://ghproxy.com/";
|
|
||||||
private static final String SHA_URL_GITEE = "https://gitee.com/"+ owner_gitee +"/"+ repo + "/raw/master/"+pluginBuild+pluginBuildNumber+ ".sha";
|
|
||||||
|
|
||||||
// public void shaChecker() {
|
|
||||||
// // 请求SHA文件
|
|
||||||
//
|
|
||||||
// String actualSha;
|
|
||||||
// try {
|
|
||||||
// URL url;
|
|
||||||
// if(settings.getProperty(SecuritySettings.SHA_CHECK_METHOD).equals("github")) {
|
|
||||||
// url = new URL(SHA_URL);
|
|
||||||
// logger.info("正在检查文件完整性...(GitHub)");
|
|
||||||
// } else if(settings.getProperty(SecuritySettings.SHA_CHECK_METHOD).equals("ghproxy")) {
|
|
||||||
// url = new URL(PROXY_URL + SHA_URL);
|
|
||||||
// logger.info("正在检查文件完整性...(GhProxy)");
|
|
||||||
// } else if (settings.getProperty(SecuritySettings.SHA_CHECK_METHOD).equals("gitee")) {
|
|
||||||
// url = new URL(SHA_URL_GITEE);
|
|
||||||
// logger.info("正在检查文件完整性...(Gitee)");
|
|
||||||
// }else {
|
|
||||||
// logger.warning("未知的SHA检查方法,将从GitHub获取SHA文件");
|
|
||||||
// url = new URL(SHA_URL);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
|
||||||
// conn.setConnectTimeout(10000);
|
|
||||||
// conn.setReadTimeout(9000);
|
|
||||||
// conn.setRequestMethod("GET");
|
|
||||||
// InputStream stream = conn.getInputStream();
|
|
||||||
// ByteArrayOutputStream result = new ByteArrayOutputStream();
|
|
||||||
// byte[] buffer = new byte[1024];
|
|
||||||
// int length;
|
|
||||||
// while ((length = stream.read(buffer)) != -1) {
|
|
||||||
// result.write(buffer, 0, length);
|
|
||||||
// }
|
|
||||||
// String expectedSha = result.toString().trim();
|
|
||||||
// // 计算插件文件的SHA值
|
|
||||||
// MessageDigest md = MessageDigest.getInstance(ALGORITHM);
|
|
||||||
// byte[] fileBytes = Files.readAllBytes(pluginfile.toPath());
|
|
||||||
// byte[] hashBytes = md.digest(fileBytes);
|
|
||||||
// StringBuilder sb = new StringBuilder();
|
|
||||||
// for (byte b : hashBytes) {
|
|
||||||
// sb.append(String.format("%02x", b));
|
|
||||||
// }
|
|
||||||
// actualSha = sb.toString();
|
|
||||||
//
|
|
||||||
// // 比较SHA值并加载插件
|
|
||||||
// if (expectedSha.equals(actualSha)) {
|
|
||||||
// logger.info("SHA联网安全校验完毕");
|
|
||||||
// } else {
|
|
||||||
// // SHA值不匹配,插件可能被篡改
|
|
||||||
// logger.warning("SHA值不匹配,插件被篡改");
|
|
||||||
// stopOrUnload();
|
|
||||||
// }
|
|
||||||
// }catch (NoSuchAlgorithmException | IOException e){
|
|
||||||
// logger.warning("SHA校验失败,请尝试切换校验API");
|
|
||||||
// logger.warning("您当前请求的API为:" + settings.getProperty(SecuritySettings.SHA_CHECK_METHOD));
|
|
||||||
// stopOrUnload();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package fr.xephi.authme.listener;
|
|||||||
|
|
||||||
import fr.xephi.authme.AuthMe;
|
import fr.xephi.authme.AuthMe;
|
||||||
import fr.xephi.authme.api.v3.AuthMeApi;
|
import fr.xephi.authme.api.v3.AuthMeApi;
|
||||||
|
import fr.xephi.authme.message.MessageKey;
|
||||||
|
import fr.xephi.authme.message.Messages;
|
||||||
import fr.xephi.authme.service.BukkitService;
|
import fr.xephi.authme.service.BukkitService;
|
||||||
import fr.xephi.authme.settings.properties.HooksSettings;
|
import fr.xephi.authme.settings.properties.HooksSettings;
|
||||||
import fr.xephi.authme.settings.properties.SecuritySettings;
|
import fr.xephi.authme.settings.properties.SecuritySettings;
|
||||||
@@ -23,6 +25,8 @@ public class BedrockAutoLoginListener implements Listener {
|
|||||||
private BukkitService bukkitService;
|
private BukkitService bukkitService;
|
||||||
@Inject
|
@Inject
|
||||||
private AuthMe plugin;
|
private AuthMe plugin;
|
||||||
|
@Inject
|
||||||
|
private Messages messages;
|
||||||
|
|
||||||
|
|
||||||
public BedrockAutoLoginListener() {
|
public BedrockAutoLoginListener() {
|
||||||
@@ -39,7 +43,7 @@ public class BedrockAutoLoginListener implements Listener {
|
|||||||
UUID uuid = event.getPlayer().getUniqueId();
|
UUID uuid = event.getPlayer().getUniqueId();
|
||||||
if (isBedrockPlayer(uuid) && !authmeApi.isAuthenticated(player) && authmeApi.isRegistered(name)) {
|
if (isBedrockPlayer(uuid) && !authmeApi.isAuthenticated(player) && authmeApi.isRegistered(name)) {
|
||||||
authmeApi.forceLogin(player);
|
authmeApi.forceLogin(player);
|
||||||
player.sendMessage("§a基岩版自动登录完成!");
|
messages.send(player, MessageKey.BEDROCK_AUTO_LOGGED_IN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,32 +1,32 @@
|
|||||||
package fr.xephi.authme.listener;
|
package fr.xephi.authme.listener;
|
||||||
//Prevent Ghost Players
|
//Prevent Ghost Players
|
||||||
|
|
||||||
|
import fr.xephi.authme.message.MessageKey;
|
||||||
|
import fr.xephi.authme.service.CommonService;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
||||||
public class DoubleLoginFixListener implements Listener {
|
public class DoubleLoginFixListener implements Listener {
|
||||||
private final Plugin plugin;
|
@Inject
|
||||||
|
private CommonService service;
|
||||||
|
|
||||||
|
|
||||||
public DoubleLoginFixListener(Plugin plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
|
|
||||||
|
public DoubleLoginFixListener() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
Collection<? extends Player> PlayerList = Bukkit.getServer().getOnlinePlayers();
|
Collection<? extends Player> PlayerList = Bukkit.getServer().getOnlinePlayers();
|
||||||
HashSet<String> PlayerSet = new HashSet<String>();
|
HashSet<String> PlayerSet = new HashSet<String>();
|
||||||
for (Player ep : PlayerList) {
|
for (Player ep : PlayerList) {
|
||||||
if (PlayerSet.contains(ep.getName().toLowerCase())) {
|
if (PlayerSet.contains(ep.getName().toLowerCase())) {
|
||||||
ep.kickPlayer("You have been disconnected due to doubled login.");
|
ep.kickPlayer(service.retrieveSingleMessage(ep.getPlayer(), MessageKey.DOUBLE_LOGIN_FIX));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
PlayerSet.add(ep.getName().toLowerCase());
|
PlayerSet.add(ep.getName().toLowerCase());
|
||||||
|
|||||||
@@ -239,6 +239,16 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void deleteAuthMePlayerData(UUID playerUUID) {
|
||||||
|
File pluginFolder = plugin.getDataFolder();
|
||||||
|
File path = new File(pluginFolder, File.separator + "playerdata" + File.separator + playerUUID);
|
||||||
|
File dataFile = new File(path, File.separator + "data.json");
|
||||||
|
if (dataFile.exists()) {
|
||||||
|
dataFile.delete();
|
||||||
|
path.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@@ -251,6 +261,7 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
if (!player.isOnline()) {
|
if (!player.isOnline()) {
|
||||||
deletePlayerData(playerUUID);
|
deletePlayerData(playerUUID);
|
||||||
deletePlayerStats(playerUUID);
|
deletePlayerStats(playerUUID);
|
||||||
|
deleteAuthMePlayerData(playerUUID);
|
||||||
}
|
}
|
||||||
}, 100L);
|
}, 100L);
|
||||||
removePacketListeners();
|
removePacketListeners();
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package fr.xephi.authme.listener;
|
package fr.xephi.authme.listener;
|
||||||
|
|
||||||
import fr.xephi.authme.AuthMe;
|
import fr.xephi.authme.AuthMe;
|
||||||
import fr.xephi.authme.api.v3.AuthMeApi;
|
import fr.xephi.authme.api.v3.AuthMeApi;
|
||||||
|
import fr.xephi.authme.message.MessageKey;
|
||||||
|
import fr.xephi.authme.message.Messages;
|
||||||
import fr.xephi.authme.settings.properties.SecuritySettings;
|
import fr.xephi.authme.settings.properties.SecuritySettings;
|
||||||
import fr.xephi.authme.util.TeleportUtils;
|
import fr.xephi.authme.util.TeleportUtils;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -12,15 +15,18 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
|
||||||
public class LoginLocationFixListener implements Listener {
|
public class LoginLocationFixListener implements Listener {
|
||||||
private final Plugin plugin;
|
@Inject
|
||||||
|
private AuthMe plugin;
|
||||||
|
@Inject
|
||||||
|
private Messages messages;
|
||||||
private final AuthMeApi authmeApi = AuthMeApi.getInstance();
|
private final AuthMeApi authmeApi = AuthMeApi.getInstance();
|
||||||
|
|
||||||
public LoginLocationFixListener(Plugin plugin) {
|
public LoginLocationFixListener() {
|
||||||
this.plugin = plugin;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Material materialPortal = Material.matchMaterial("PORTAL");
|
private static Material materialPortal = Material.matchMaterial("PORTAL");
|
||||||
@@ -63,7 +69,7 @@ public class LoginLocationFixListener implements Listener {
|
|||||||
JoinBlock.getRelative(BlockFace.UP).breakNaturally();
|
JoinBlock.getRelative(BlockFace.UP).breakNaturally();
|
||||||
JoinBlock.breakNaturally();
|
JoinBlock.breakNaturally();
|
||||||
}
|
}
|
||||||
player.sendMessage("§a你在登录时卡在了地狱门, 现已修正");
|
messages.send(player, MessageKey.LOCATION_FIX_PORTAL);
|
||||||
} else if (isFixGroundStuck) {
|
} else if (isFixGroundStuck) {
|
||||||
Material UpType = JoinLocation.getBlock().getRelative(BlockFace.UP).getType();
|
Material UpType = JoinLocation.getBlock().getRelative(BlockFace.UP).getType();
|
||||||
World world = player.getWorld();
|
World world = player.getWorld();
|
||||||
@@ -86,7 +92,7 @@ public class LoginLocationFixListener implements Listener {
|
|||||||
} else {
|
} else {
|
||||||
player.teleport(JoinBlock.getLocation().add(0.5, 0.1, 0.5));
|
player.teleport(JoinBlock.getLocation().add(0.5, 0.1, 0.5));
|
||||||
}
|
}
|
||||||
player.sendMessage("§a你被埋住了, 坐标已修正, 下次下线之前请小心!");
|
messages.send(player, MessageKey.LOCATION_FIX_UNDERGROUND);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == MaxHeight) {
|
if (i == MaxHeight) {
|
||||||
@@ -95,7 +101,7 @@ public class LoginLocationFixListener implements Listener {
|
|||||||
} else {
|
} else {
|
||||||
player.teleport(JoinBlock.getLocation().add(0.5, 1.1, 0.5));
|
player.teleport(JoinBlock.getLocation().add(0.5, 1.1, 0.5));
|
||||||
}
|
}
|
||||||
player.sendMessage("§a你被埋住了, 坐标无法修正, 只好送你去了最高点, 自求多福吧少年~");
|
messages.send(player, MessageKey.LOCATION_FIX_UNDERGROUND_CANT_FIX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,31 @@ package fr.xephi.authme.message;
|
|||||||
* Keys for translatable messages managed by {@link Messages}.
|
* Keys for translatable messages managed by {@link Messages}.
|
||||||
*/
|
*/
|
||||||
public enum MessageKey {
|
public enum MessageKey {
|
||||||
|
/**
|
||||||
|
* You have been disconnected due to doubled login.
|
||||||
|
*/
|
||||||
|
DOUBLE_LOGIN_FIX("double_login_fix.fix_message"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* You are stuck in portal during Login.
|
||||||
|
*/
|
||||||
|
LOCATION_FIX_PORTAL("login_location_fix.fix_portal"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* You are stuck underground during Login.
|
||||||
|
*/
|
||||||
|
LOCATION_FIX_UNDERGROUND("login_location_fix.fix_underground"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* You are stuck underground during Login, but we cant fix it.
|
||||||
|
*/
|
||||||
|
LOCATION_FIX_UNDERGROUND_CANT_FIX("login_location_fix.cannot_fix_underground"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bedrock auto login success!
|
||||||
|
*/
|
||||||
|
BEDROCK_AUTO_LOGGED_IN("bedrock_auto_login.success"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* %random Verification
|
* %random Verification
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -150,6 +150,9 @@ public class MessageUpdater {
|
|||||||
.put("time", "Time units")
|
.put("time", "Time units")
|
||||||
.put("two_factor", "Two-factor authentication")
|
.put("two_factor", "Two-factor authentication")
|
||||||
.put("gui_captcha", "3rd party features: GUI Captcha")
|
.put("gui_captcha", "3rd party features: GUI Captcha")
|
||||||
|
.put("bedrock_auto_login", "3rd party features: Bedrock Auto Login")
|
||||||
|
.put("login_location_fix", "3rd party features: Login Location Fix")
|
||||||
|
.put("double_login_fix", "3rd party features: Double Login Fix")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
Set<String> addedKeys = new HashSet<>();
|
Set<String> addedKeys = new HashSet<>();
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class AntiBotService implements SettingsDependent {
|
|||||||
// Delay the schedule on first start
|
// Delay the schedule on first start
|
||||||
if (startup) {
|
if (startup) {
|
||||||
int delay = settings.getProperty(ProtectionSettings.ANTIBOT_DELAY);
|
int delay = settings.getProperty(ProtectionSettings.ANTIBOT_DELAY);
|
||||||
bukkitService.scheduleSyncDelayedTask(enableTask, delay * TICKS_PER_SECOND);
|
bukkitService.scheduleSyncDelayedTask(enableTask, (long) delay * TICKS_PER_SECOND);
|
||||||
startup = false;
|
startup = false;
|
||||||
} else {
|
} else {
|
||||||
enableTask.run();
|
enableTask.run();
|
||||||
@@ -91,7 +91,7 @@ public class AntiBotService implements SettingsDependent {
|
|||||||
disableTask.cancel();
|
disableTask.cancel();
|
||||||
}
|
}
|
||||||
// Schedule auto-disable
|
// Schedule auto-disable
|
||||||
disableTask = bukkitService.runTaskLater(this::stopProtection, duration * TICKS_PER_MINUTE);
|
disableTask = bukkitService.runTaskLater(this::stopProtection, (long) duration * TICKS_PER_MINUTE);
|
||||||
antiBotStatus = AntiBotStatus.ACTIVE;
|
antiBotStatus = AntiBotStatus.ACTIVE;
|
||||||
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> {
|
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> {
|
||||||
// Inform admins
|
// Inform admins
|
||||||
|
|||||||
@@ -166,3 +166,17 @@ gui_captcha:
|
|||||||
denied_message_sending: '&cPlease be verified before chatting!'
|
denied_message_sending: '&cPlease be verified before chatting!'
|
||||||
kick_on_failed: '&cPlease complete the verification!'
|
kick_on_failed: '&cPlease complete the verification!'
|
||||||
kick_on_timeout: '&cVerification timed out!'
|
kick_on_timeout: '&cVerification timed out!'
|
||||||
|
|
||||||
|
# 3rd party features: Bedrock Auto Login
|
||||||
|
bedrock_auto_login:
|
||||||
|
success: '&aBedrock auto login success!'
|
||||||
|
|
||||||
|
# 3rd party features: Login Location Fix
|
||||||
|
login_location_fix:
|
||||||
|
fix_portal: '&aYou are stuck in portal during Login.'
|
||||||
|
fix_underground: '&aYou are stuck underground during Login.'
|
||||||
|
cannot_fix_underground: '&aYou are stuck underground during Login, but we cant fix it.'
|
||||||
|
|
||||||
|
# 3rd party features: Double Login Fix
|
||||||
|
double_login_fix:
|
||||||
|
fix_message: '&cYou have been disconnected due to doubled login.'
|
||||||
|
|||||||
@@ -175,3 +175,19 @@ gui_captcha:
|
|||||||
denied_message_sending: '&c请先完成验证再聊天!'
|
denied_message_sending: '&c请先完成验证再聊天!'
|
||||||
kick_on_failed: '&c请先完成验证!'
|
kick_on_failed: '&c请先完成验证!'
|
||||||
kick_on_timeout: '&c验证超时'
|
kick_on_timeout: '&c验证超时'
|
||||||
|
|
||||||
|
# 3rd party features: Bedrock Auto Login
|
||||||
|
bedrock_auto_login:
|
||||||
|
success: "&a基岩版自动登录完成"
|
||||||
|
|
||||||
|
# 3rd party features: Login Location Fix
|
||||||
|
login_location_fix:
|
||||||
|
fix_portal: '&a你在登录时卡在了地狱门, 现已修正'
|
||||||
|
fix_underground: '&a你被埋住了, 坐标已修正, 下次下线之前请小心!'
|
||||||
|
cannot_fix_underground: '&a你被埋住了, 坐标无法修正, 只好送你去了最高点, 自求多福吧少年~'
|
||||||
|
|
||||||
|
# 3rd party features: Double Login Fix
|
||||||
|
double_login_fix:
|
||||||
|
fix_message: '&a已修复幽灵玩家, 请重新进入'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ authors: [${pluginDescription.authors}]
|
|||||||
website: http://github.com/HaHaWTH/AuthMeReReloaded/
|
website: http://github.com/HaHaWTH/AuthMeReReloaded/
|
||||||
description: A fork of AuthMeReloaded that contains bug fixes
|
description: A fork of AuthMeReloaded that contains bug fixes
|
||||||
main: ${pluginDescription.main}
|
main: ${pluginDescription.main}
|
||||||
version: 5.6.0-FORK-b31
|
version: 5.6.0-FORK-b32
|
||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
softdepend:
|
softdepend:
|
||||||
- Vault
|
- Vault
|
||||||
|
|||||||
Reference in New Issue
Block a user