Add features to delete bot join data
This commit is contained in:
parent
6800356f10
commit
95342ae054
@ -27,9 +27,10 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
@ -53,19 +54,8 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
Random howManyRandom = new Random();
|
Random howManyRandom = new Random();
|
||||||
|
|
||||||
|
|
||||||
// public int tryTimesReset(){
|
int howLongIsRandomString = (howManyRandom.nextInt(3) + 1);
|
||||||
// int tmp = 1;
|
|
||||||
// if (AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_MAX_TRY) < 1){
|
|
||||||
// return tmp;
|
|
||||||
// }
|
|
||||||
// if (AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_MAX_TRY) >= 1){
|
|
||||||
// tmp = AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_MAX_TRY);
|
|
||||||
// return tmp;
|
|
||||||
// }
|
|
||||||
// return 3;
|
|
||||||
// }
|
|
||||||
|
|
||||||
int howLongIsRandomString = (howManyRandom.nextInt(3)+1);
|
|
||||||
public GuiCaptchaHandler(Plugin plugin) {
|
public GuiCaptchaHandler(Plugin plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
@ -77,7 +67,11 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
Player player = (Player) event.getWhoClicked();
|
Player player = (Player) event.getWhoClicked();
|
||||||
// 获取点击事件的容器
|
// 获取点击事件的容器
|
||||||
if (!authmeApi.isRegistered(player.getName()) && !closeReasonMap.containsKey(player)) {
|
if (!authmeApi.isRegistered(player.getName()) && !closeReasonMap.containsKey(player)) {
|
||||||
if(AuthMe.settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_BE_COMPATIBILITY) && org.geysermc.floodgate.api.FloodgateApi.getInstance().isFloodgateId(event.getWhoClicked().getUniqueId()) && ( getServer().getPluginManager().isPluginEnabled("floodgate") || getServer().getPluginManager().getPlugin("floodgate") != null)){
|
if (AuthMe.settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_BE_COMPATIBILITY) && org.geysermc.floodgate.api.FloodgateApi.getInstance().isFloodgateId(event.getWhoClicked().getUniqueId()) && (getServer().getPluginManager().isPluginEnabled("floodgate") || getServer().getPluginManager().getPlugin("floodgate") != null)) {
|
||||||
|
if (!closeReasonMap.containsKey(player)) {
|
||||||
|
closeReasonMap.put(player,"verified");
|
||||||
|
return;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Objects.requireNonNull(event.getCurrentItem()).getType().equals(Material.REDSTONE_BLOCK)) {
|
if (Objects.requireNonNull(event.getCurrentItem()).getType().equals(Material.REDSTONE_BLOCK)) {
|
||||||
@ -89,26 +83,26 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
player.sendMessage("§c验证失败,你还有" + timesLeft + "§c次机会");
|
player.sendMessage("§c验证失败,你还有" + timesLeft + "§c次机会");
|
||||||
timesLeft--;
|
timesLeft--;
|
||||||
}
|
}
|
||||||
//force to string
|
//force to string
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true,priority = EventPriority.HIGHEST)
|
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
randomString="";
|
randomString = "";
|
||||||
Player playerunreg = event.getPlayer();
|
Player playerunreg = event.getPlayer();
|
||||||
String name = playerunreg.getName();
|
String name = playerunreg.getName();
|
||||||
if (!authmeApi.isRegistered(name)) {
|
if (!authmeApi.isRegistered(name)) {
|
||||||
if(AuthMe.settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_BE_COMPATIBILITY) && org.geysermc.floodgate.api.FloodgateApi.getInstance().isFloodgateId(event.getPlayer().getUniqueId()) && (getServer().getPluginManager().isPluginEnabled("floodgate") || getServer().getPluginManager().getPlugin("floodgate") != null)){
|
if (AuthMe.settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_BE_COMPATIBILITY) && org.geysermc.floodgate.api.FloodgateApi.getInstance().isFloodgateId(event.getPlayer().getUniqueId()) && (getServer().getPluginManager().isPluginEnabled("floodgate") || getServer().getPluginManager().getPlugin("floodgate") != null)) {
|
||||||
closeReasonMap.put(playerunreg, "verified");
|
closeReasonMap.put(playerunreg, "verified");
|
||||||
playerunreg.sendMessage("§a基岩版自动验证完成");
|
playerunreg.sendMessage("§a基岩版自动验证完成");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> {
|
Bukkit.getScheduler().runTaskAsynchronously(this.plugin, () -> {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
howLongIsRandomString = (howManyRandom.nextInt(3)+1);
|
howLongIsRandomString = (howManyRandom.nextInt(3) + 1);
|
||||||
for (int i = 0; i < howLongIsRandomString; i++) {
|
for (int i = 0; i < howLongIsRandomString; i++) {
|
||||||
//生成随机索引号
|
//生成随机索引号
|
||||||
int index = randomItemSet.nextInt(randomSet.length());
|
int index = randomItemSet.nextInt(randomSet.length());
|
||||||
@ -124,7 +118,7 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
randomString = sb.toString();
|
randomString = sb.toString();
|
||||||
Random random_blockpos = new Random();
|
Random random_blockpos = new Random();
|
||||||
AtomicInteger random_num = new AtomicInteger(random_blockpos.nextInt(26));
|
AtomicInteger random_num = new AtomicInteger(random_blockpos.nextInt(26));
|
||||||
Inventory menu = Bukkit.createInventory(null, 27, randomString+"请验证你是真人");
|
Inventory menu = Bukkit.createInventory(null, 27, randomString + "请验证你是真人");
|
||||||
ItemStack item = new ItemStack(Material.REDSTONE_BLOCK);
|
ItemStack item = new ItemStack(Material.REDSTONE_BLOCK);
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
try {
|
try {
|
||||||
@ -135,17 +129,17 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
} catch (NullPointerException e) {
|
} catch (NullPointerException e) {
|
||||||
getLogger().log(Level.WARNING, "Unexpected error occurred while setting item meta.");
|
getLogger().log(Level.WARNING, "Unexpected error occurred while setting item meta.");
|
||||||
}
|
}
|
||||||
Bukkit.getScheduler().runTask(this.plugin,()-> {
|
Bukkit.getScheduler().runTask(this.plugin, () -> {
|
||||||
menu.setItem(random_num.get(), item);
|
menu.setItem(random_num.get(), item);
|
||||||
});
|
});
|
||||||
menu.setItem(random_num.get(), item);
|
menu.setItem(random_num.get(), item);
|
||||||
Bukkit.getScheduler().runTask(this.plugin, () -> {
|
Bukkit.getScheduler().runTask(this.plugin, () -> {
|
||||||
playerunreg.openInventory(menu);
|
playerunreg.openInventory(menu);
|
||||||
});
|
});
|
||||||
if (AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT)>0) {
|
if (AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) > 0) {
|
||||||
long timeOut = AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT);
|
long timeOut = AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT);
|
||||||
if (AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) > AuthMe.settings.getProperty(RestrictionSettings.TIMEOUT)){
|
if (AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) > AuthMe.settings.getProperty(RestrictionSettings.TIMEOUT)) {
|
||||||
Bukkit.getScheduler().runTask(this.plugin,() -> {
|
Bukkit.getScheduler().runTask(this.plugin, () -> {
|
||||||
Bukkit.getLogger().warning("AuthMe detected that your GUI captcha timeout seconds(" + AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) + ") is bigger than the Login timeout seconds(" +
|
Bukkit.getLogger().warning("AuthMe detected that your GUI captcha timeout seconds(" + AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) + ") is bigger than the Login timeout seconds(" +
|
||||||
AuthMe.settings.getProperty(RestrictionSettings.TIMEOUT) + "). To prevent issues, we will let the GUI captcha follow the Login timeout seconds, please check and modify your config.");
|
AuthMe.settings.getProperty(RestrictionSettings.TIMEOUT) + "). To prevent issues, we will let the GUI captcha follow the Login timeout seconds, please check and modify your config.");
|
||||||
});
|
});
|
||||||
@ -162,7 +156,7 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Bukkit.getScheduler().runTask(this.plugin,()-> {
|
Bukkit.getScheduler().runTask(this.plugin, () -> {
|
||||||
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this.plugin, ListenerPriority.HIGHEST, PacketType.Play.Client.CLOSE_WINDOW) {
|
ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(this.plugin, ListenerPriority.HIGHEST, PacketType.Play.Client.CLOSE_WINDOW) {
|
||||||
@Override
|
@Override
|
||||||
public void onPacketReceiving(PacketEvent event) {
|
public void onPacketReceiving(PacketEvent event) {
|
||||||
@ -212,16 +206,62 @@ public class GuiCaptchaHandler implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
private boolean shouldDeletePlayerData(Player player) {
|
||||||
public void onPlayerQuit(PlayerQuitEvent event){
|
if (!closeReasonMap.containsKey(player)){
|
||||||
Player player = event.getPlayer();
|
return true;
|
||||||
String name = player.getName();
|
}else {
|
||||||
if (!authmeApi.isRegistered(name)){
|
return false;
|
||||||
closeReasonMap.remove(player);
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
private void deletePlayerData(UUID playerUUID) {
|
||||||
|
// 获取服务器的存储文件夹路径
|
||||||
|
File serverFolder = Bukkit.getServer().getWorldContainer();
|
||||||
|
String worldFolderName = AuthMe.settings.getProperty(SecuritySettings.DELETE_PLAYER_DATA_WORLD);
|
||||||
|
// 构建playerdata文件夹路径
|
||||||
|
File playerDataFolder = new File(serverFolder, worldFolderName+File.separator+"playerdata");
|
||||||
|
|
||||||
|
// 构建玩家数据文件路径
|
||||||
|
File playerDataFile = new File(playerDataFolder, playerUUID + ".dat");
|
||||||
|
|
||||||
|
// 删除玩家数据文件
|
||||||
|
if (playerDataFile.exists()) {
|
||||||
|
playerDataFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void deletePlayerStats(UUID playerUUID) {
|
||||||
|
// 获取服务器的存储文件夹路径
|
||||||
|
File serverFolder = Bukkit.getServer().getWorldContainer();
|
||||||
|
String worldFolderName = AuthMe.settings.getProperty(SecuritySettings.DELETE_PLAYER_DATA_WORLD);
|
||||||
|
// 构建stats文件夹路径
|
||||||
|
File statsFolder = new File(serverFolder, worldFolderName+File.separator+"stats");
|
||||||
|
|
||||||
|
// 构建玩家统计数据文件路径
|
||||||
|
File statsFile = new File(statsFolder, playerUUID + ".json");
|
||||||
|
|
||||||
|
// 删除玩家统计数据文件
|
||||||
|
if (statsFile.exists()) {
|
||||||
|
statsFile.delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
String name = player.getName();
|
||||||
|
UUID playerUUID = event.getPlayer().getUniqueId();
|
||||||
|
if (!authmeApi.isRegistered(name)) {
|
||||||
|
if(shouldDeletePlayerData(player) && AuthMe.settings.getProperty(SecuritySettings.DELETE_UNVERIFIED_PLAYER_DATA)){
|
||||||
|
deletePlayerData(playerUUID);
|
||||||
|
deletePlayerStats(playerUUID);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
closeReasonMap.remove(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,12 @@ public final class SecuritySettings implements SettingsHolder {
|
|||||||
"(Requires floodgate and hookFloodgate: true)"})
|
"(Requires floodgate and hookFloodgate: true)"})
|
||||||
public static final Property<Boolean> GUI_CAPTCHA_BE_COMPATIBILITY = newProperty("3rdPartyFeature.captcha.ignoreBedrock",false);
|
public static final Property<Boolean> GUI_CAPTCHA_BE_COMPATIBILITY = newProperty("3rdPartyFeature.captcha.ignoreBedrock",false);
|
||||||
|
|
||||||
|
@Comment("Should we delete playerdata and stats when they didn't finish the captcha?")
|
||||||
|
public static final Property<Boolean> DELETE_UNVERIFIED_PLAYER_DATA = newProperty("3rdPartyFeature.captcha.delPlayerData",false);
|
||||||
|
|
||||||
|
@Comment("Which world's playerdata should be deleted?(Enter the world *FOLDER* name where your player first logged in)")
|
||||||
|
public static final Property<String> DELETE_PLAYER_DATA_WORLD = newProperty("3rdPartyFeature.captcha.delPlayerData","world");
|
||||||
|
|
||||||
// @Comment({"Should we kick the players when they failed captcha too many times?",
|
// @Comment({"Should we kick the players when they failed captcha too many times?",
|
||||||
// "(Minimum value is 1)(Default: 3)"})
|
// "(Minimum value is 1)(Default: 3)"})
|
||||||
// public static final Property<Integer> GUI_CAPTCHA_MAX_TRY = newProperty("3rdPartyFeature.captcha.maxTryTimes",3);
|
// public static final Property<Integer> GUI_CAPTCHA_MAX_TRY = newProperty("3rdPartyFeature.captcha.maxTryTimes",3);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user