diff --git a/src/main/java/fr/xephi/authme/util/message/MiniMessageUtils.java b/src/main/java/fr/xephi/authme/util/message/MiniMessageUtils.java index 5362f23b..80ee635b 100644 --- a/src/main/java/fr/xephi/authme/util/message/MiniMessageUtils.java +++ b/src/main/java/fr/xephi/authme/util/message/MiniMessageUtils.java @@ -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) { + 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)); }