Support for kick message

This commit is contained in:
HaHaWTH 2024-07-23 00:51:48 +08:00
parent 8df6a008c8
commit 3b6160c91f
10 changed files with 73 additions and 11 deletions

View File

@ -12,6 +12,7 @@ import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.CommonService; import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.ValidationService; import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.service.ValidationService.ValidationResult; import fr.xephi.authme.service.ValidationService.ValidationResult;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -79,7 +80,7 @@ public class RegisterAdminCommand implements ExecutableCommand {
if (player != null) { if (player != null) {
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() ->
// AuthMeReReloaded - Folia compatibility // AuthMeReReloaded - Folia compatibility
bukkitService.runTaskIfFolia(player, () -> player.kickPlayer(commonService.retrieveSingleMessage(player, MessageKey.KICK_FOR_ADMIN_REGISTER)))); bukkitService.runTaskIfFolia(player, () -> MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(commonService.retrieveSingleMessage(player, MessageKey.KICK_FOR_ADMIN_REGISTER)))));
} }
}); });
} }

View File

@ -9,6 +9,7 @@ import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.SecuritySettings; import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import fr.xephi.authme.util.expiring.TimedCounter; import fr.xephi.authme.util.expiring.TimedCounter;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.inject.Inject; import javax.inject.Inject;
@ -106,7 +107,7 @@ public class TempbanManager implements SettingsDependent, HasCleanup {
bukkitService.runTask(player,() -> { // AuthMeReReloaded - Folia compatibility bukkitService.runTask(player,() -> { // AuthMeReReloaded - Folia compatibility
if (customCommand.isEmpty()) { if (customCommand.isEmpty()) {
bukkitService.banIp(ip, reason, expires, "AuthMe"); bukkitService.banIp(ip, reason, expires, "AuthMe");
player.kickPlayer(reason); MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(reason));
} else { } else {
String command = customCommand String command = customCommand
.replace("%player%", name) .replace("%player%", name)

View File

@ -3,6 +3,7 @@ package fr.xephi.authme.listener;
import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.service.CommonService; import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.util.message.MiniMessageUtils;
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;
@ -26,7 +27,7 @@ public class DoubleLoginFixListener implements Listener {
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(service.retrieveSingleMessage(ep.getPlayer(), MessageKey.DOUBLE_LOGIN_FIX)); MiniMessageUtils.kickPlayer(ep, MiniMessageUtils.parseMiniMessage(service.retrieveSingleMessage(ep.getPlayer(), MessageKey.DOUBLE_LOGIN_FIX)));
break; break;
} }
PlayerSet.add(ep.getName().toLowerCase()); PlayerSet.add(ep.getName().toLowerCase());

View File

@ -18,6 +18,7 @@ import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.StringUtils; import fr.xephi.authme.util.StringUtils;
import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.Utils;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent;
@ -140,7 +141,7 @@ public class OnJoinVerifier implements Reloadable {
Player nonVipPlayer = generateKickPlayer(onlinePlayers); Player nonVipPlayer = generateKickPlayer(onlinePlayers);
if (nonVipPlayer != null) { if (nonVipPlayer != null) {
// AuthMeReReloaded - Folia compatibility // AuthMeReReloaded - Folia compatibility
bukkitService.runTaskIfFolia(nonVipPlayer, () -> nonVipPlayer.kickPlayer(messages.retrieveSingle(player, MessageKey.KICK_FOR_VIP))); bukkitService.runTaskIfFolia(nonVipPlayer, () -> MiniMessageUtils.kickPlayer(nonVipPlayer, MiniMessageUtils.parseMiniMessage(messages.retrieveSingle(player, MessageKey.KICK_FOR_VIP))));
event.allow(); event.allow();
return false; return false;
} else { } else {

View File

@ -21,6 +21,7 @@ import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.TeleportUtils; import fr.xephi.authme.util.TeleportUtils;
import fr.xephi.authme.util.message.I18NUtils; import fr.xephi.authme.util.message.I18NUtils;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
@ -323,7 +324,7 @@ public class PlayerListener implements Listener {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
if (!quickCommandsProtectionManager.isAllowed(player.getName())) { if (!quickCommandsProtectionManager.isAllowed(player.getName())) {
event.setCancelled(true); event.setCancelled(true);
bukkitService.runTaskIfFolia(player, () -> player.kickPlayer(messages.retrieveSingle(player, MessageKey.QUICK_COMMAND_PROTECTION_KICK))); bukkitService.runTaskIfFolia(player, () -> MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(messages.retrieveSingle(player, MessageKey.QUICK_COMMAND_PROTECTION_KICK))));
// AuthMeReReloaded - Folia compatibility // AuthMeReReloaded - Folia compatibility
return; return;
} }

View File

@ -26,6 +26,7 @@ import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.InternetProtocolUtils; import fr.xephi.authme.util.InternetProtocolUtils;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -177,7 +178,7 @@ public class AsynchronousJoin implements AsynchronousProcess {
private void handlePlayerWithUnmetNameRestriction(Player player, String ip) { private void handlePlayerWithUnmetNameRestriction(Player player, String ip) {
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> { bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> {
player.kickPlayer(service.retrieveSingleMessage(player, MessageKey.NOT_OWNER_ERROR)); MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(service.retrieveSingleMessage(player, MessageKey.NOT_OWNER_ERROR)));
if (service.getProperty(RestrictionSettings.BAN_UNKNOWN_IP)) { if (service.getProperty(RestrictionSettings.BAN_UNKNOWN_IP)) {
server.banIP(ip); server.banIP(ip);
} }
@ -228,7 +229,7 @@ public class AsynchronousJoin implements AsynchronousProcess {
&& countOnlinePlayersByIp(ip) > service.getProperty(RestrictionSettings.MAX_JOIN_PER_IP)) { && countOnlinePlayersByIp(ip) > service.getProperty(RestrictionSettings.MAX_JOIN_PER_IP)) {
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask( bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(
() -> player.kickPlayer(service.retrieveSingleMessage(player, MessageKey.SAME_IP_ONLINE))); () -> MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(service.retrieveSingleMessage(player, MessageKey.SAME_IP_ONLINE))));
return false; return false;
} }
return true; return true;

View File

@ -36,6 +36,7 @@ import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.InternetProtocolUtils; import fr.xephi.authme.util.InternetProtocolUtils;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.Utils;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -249,7 +250,7 @@ public class AsynchronousLogin implements AsynchronousProcess {
tempbanManager.tempbanPlayer(player); tempbanManager.tempbanPlayer(player);
} else if (service.getProperty(RestrictionSettings.KICK_ON_WRONG_PASSWORD)) { } else if (service.getProperty(RestrictionSettings.KICK_ON_WRONG_PASSWORD)) {
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask( bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(
() -> player.kickPlayer(service.retrieveSingleMessage(player, MessageKey.WRONG_PASSWORD))); () -> MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(service.retrieveSingleMessage(player, MessageKey.WRONG_PASSWORD))));
} else { } else {
service.send(player, MessageKey.WRONG_PASSWORD); service.send(player, MessageKey.WRONG_PASSWORD);

View File

@ -15,6 +15,7 @@ import fr.xephi.authme.settings.commandconfig.CommandManager;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.inject.Inject; import javax.inject.Inject;
@ -77,7 +78,7 @@ public class ProcessSyncPasswordRegister implements SynchronousProcess {
// Kick Player after Registration is enabled, kick the player // Kick Player after Registration is enabled, kick the player
if (service.getProperty(RegistrationSettings.FORCE_KICK_AFTER_REGISTER)) { if (service.getProperty(RegistrationSettings.FORCE_KICK_AFTER_REGISTER)) {
player.kickPlayer(service.retrieveSingleMessage(player, MessageKey.REGISTER_SUCCESS)); MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(service.retrieveSingleMessage(player, MessageKey.REGISTER_SUCCESS)));
return; return;
} }

View File

@ -1,6 +1,7 @@
package fr.xephi.authme.task; package fr.xephi.authme.task;
import fr.xephi.authme.data.auth.PlayerCache; import fr.xephi.authme.data.auth.PlayerCache;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
/** /**
@ -28,7 +29,7 @@ public class TimeoutTask implements Runnable {
@Override @Override
public void run() { public void run() {
if (!playerCache.isAuthenticated(player.getName())) { if (!playerCache.isAuthenticated(player.getName())) {
player.kickPlayer(message); MiniMessageUtils.kickPlayer(player, MiniMessageUtils.parseMiniMessage(message));
} }
} }
} }

View File

@ -1,9 +1,13 @@
package fr.xephi.authme.util.message; package fr.xephi.authme.util.message;
import fr.xephi.authme.util.Utils;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import java.lang.reflect.Method;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -11,7 +15,24 @@ public class MiniMessageUtils {
private static final MiniMessage miniMessage = MiniMessage.miniMessage(); private static final MiniMessage miniMessage = MiniMessage.miniMessage();
private static final char SECTION_CHAR = '§'; private static final char SECTION_CHAR = '§';
private static final char AMPERSAND_CHAR = '&'; private static final char AMPERSAND_CHAR = '&';
private static final boolean HEX_SUPPORTED = Utils.MAJOR_VERSION >= 16;
private static Method methodDisallow;
private static Method methodKick;
static {
try {
Class<?> componentClass = Class.forName("net{}kyori{}adventure{}text{}Component".replace("{}", "."));
methodDisallow = AsyncPlayerPreLoginEvent.class.getMethod("disallow", AsyncPlayerPreLoginEvent.Result.class, componentClass);
} catch (Exception e) {
methodDisallow = null;
}
try {
Class<?> componentClass = Class.forName("net{}kyori{}adventure{}text{}Component".replace("{}", "."));
methodKick = Player.class.getMethod("kick", componentClass);
} catch (Exception e) {
methodKick = null;
}
}
/** /**
* Parse a MiniMessage string into a legacy string. * Parse a MiniMessage string into a legacy string.
* *
@ -30,7 +51,39 @@ public class MiniMessageUtils {
* @return The parsed message. * @return The parsed message.
*/ */
public static Component parseMiniMessage(String message) { public static Component parseMiniMessage(String message) {
return miniMessage.deserialize(convertLegacyToMiniMessage(message, false, SECTION_CHAR, true)); return miniMessage.deserialize(convertLegacyToMiniMessage(message, false, SECTION_CHAR, HEX_SUPPORTED));
}
public static void kickPlayer(Player player, Component message) {
if (methodKick != null) {
try {
methodKick.invoke(player, message);
} catch (Exception e) {
player.kickPlayer(LegacyComponentSerializer.legacySection().serialize(message));
}
} else {
player.kickPlayer(LegacyComponentSerializer.legacySection().serialize(message));
}
}
/**
* Disallows the login event with the given result and reason.
*
* @param event the event
* @param result the event result to set
* @param message the denial message
*/
public static void disallowPreLoginEvent(AsyncPlayerPreLoginEvent event,
AsyncPlayerPreLoginEvent.Result result, Component message) {
if (methodDisallow != null) {
try {
methodDisallow.invoke(event, result, message);
} catch (Exception e) {
event.disallow(result, LegacyComponentSerializer.legacySection().serialize(message));
}
} else {
event.disallow(result, LegacyComponentSerializer.legacySection().serialize(message));
}
} }
@SuppressWarnings("all") @SuppressWarnings("all")