Support for kick message

This commit is contained in:
HaHaWTH 2024-07-23 01:37:20 +08:00
parent 3b6160c91f
commit 2d10e77b6c

View File

@ -16,18 +16,22 @@ public class MiniMessageUtils {
private static final char SECTION_CHAR = '§';
private static final char AMPERSAND_CHAR = '&';
private static final boolean HEX_SUPPORTED = Utils.MAJOR_VERSION >= 16;
private static Class<?> componentClass;
private static Method methodDisallow;
private static Method methodKick;
static {
try {
Class<?> componentClass = Class.forName("net{}kyori{}adventure{}text{}Component".replace("{}", "."));
componentClass = Class.forName("net{}kyori{}adventure{}text{}Component".replace("{}", "."));
} catch (Exception e) {
componentClass = null;
}
try {
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;
@ -54,10 +58,17 @@ public class MiniMessageUtils {
return miniMessage.deserialize(convertLegacyToMiniMessage(message, false, SECTION_CHAR, HEX_SUPPORTED));
}
/**
* Kicks a player with the given message.
*
* @param player the player to kick
* @param message the message to send
*/
@SuppressWarnings("all")
public static void kickPlayer(Player player, Component message) {
if (methodKick != null) {
try {
methodKick.invoke(player, message);
methodKick.invoke(player, componentClass.cast((Object) message));
} catch (Exception e) {
player.kickPlayer(LegacyComponentSerializer.legacySection().serialize(message));
}
@ -73,11 +84,12 @@ public class MiniMessageUtils {
* @param result the event result to set
* @param message the denial message
*/
@SuppressWarnings("all")
public static void disallowPreLoginEvent(AsyncPlayerPreLoginEvent event,
AsyncPlayerPreLoginEvent.Result result, Component message) {
if (methodDisallow != null) {
try {
methodDisallow.invoke(event, result, message);
methodDisallow.invoke(event, result, componentClass.cast((Object) message));
} catch (Exception e) {
event.disallow(result, LegacyComponentSerializer.legacySection().serialize(message));
}