Merge branch 'master' into feat/i18n
This commit is contained in:
@@ -10,7 +10,7 @@ public final class PlayerUtils {
|
||||
// Utility class
|
||||
private PlayerUtils() {
|
||||
}
|
||||
private static final boolean IS_LEAVES_SERVER = Utils.isClassLoaded("top.leavesmc.leaves.LeavesConfig");
|
||||
private static final boolean isLeavesServer = Utils.isClassLoaded("top.leavesmc.leaves.LeavesConfig") || Utils.isClassLoaded("org.leavesmc.leaves.LeavesConfig");
|
||||
|
||||
/**
|
||||
* Returns the IP of the given player.
|
||||
@@ -29,7 +29,7 @@ public final class PlayerUtils {
|
||||
* @return True if the player is an NPC, false otherwise
|
||||
*/
|
||||
public static boolean isNpc(Player player) {
|
||||
if (IS_LEAVES_SERVER) {
|
||||
if (isLeavesServer) {
|
||||
return player.hasMetadata("NPC") || player.getAddress() == null;
|
||||
} else {
|
||||
return player.hasMetadata("NPC");
|
||||
|
||||
@@ -3,24 +3,24 @@ package fr.xephi.authme.util;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.invoke.MethodHandle;
|
||||
import java.lang.invoke.MethodHandles;
|
||||
import java.lang.invoke.MethodType;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
/**
|
||||
* This class is a utility class for handling async teleportation of players in game.
|
||||
*/
|
||||
public class TeleportUtils {
|
||||
private static Method teleportAsyncMethod;
|
||||
private static MethodHandle teleportAsyncMethodHandle;
|
||||
|
||||
static {
|
||||
try {//Detect Paper class
|
||||
Class<?> paperClass = Class.forName("com.destroystokyo.paper.PaperConfig");
|
||||
teleportAsyncMethod = Player.class.getMethod("teleportAsync", Location.class);
|
||||
teleportAsyncMethod.setAccessible(true);
|
||||
// if detected,use teleportAsync()
|
||||
} catch (ClassNotFoundException | NoSuchMethodException e) {
|
||||
teleportAsyncMethod = null;
|
||||
//if not, set method to null
|
||||
try {
|
||||
MethodHandles.Lookup lookup = MethodHandles.lookup();
|
||||
teleportAsyncMethodHandle = lookup.findVirtual(Player.class, "teleportAsync", MethodType.methodType(CompletableFuture.class, Location.class));
|
||||
} catch (NoSuchMethodException | IllegalAccessException e) {
|
||||
teleportAsyncMethodHandle = null;
|
||||
// if not, set method handle to null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,10 +31,10 @@ public class TeleportUtils {
|
||||
* @param location Where should the player be teleported
|
||||
*/
|
||||
public static void teleport(Player player, Location location) {
|
||||
if (teleportAsyncMethod != null) {
|
||||
if (teleportAsyncMethodHandle != null) {
|
||||
try {
|
||||
teleportAsyncMethod.invoke(player, location);
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
teleportAsyncMethodHandle.invoke(player, location);
|
||||
} catch (Throwable throwable) {
|
||||
player.teleport(location);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package fr.xephi.authme.util.message;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
|
||||
public class MiniMessageUtils {
|
||||
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
|
||||
|
||||
/**
|
||||
* Parse a MiniMessage string into a legacy string.
|
||||
*
|
||||
* @param message The message to parse.
|
||||
* @return The parsed message.
|
||||
*/
|
||||
public static String parseMiniMessageToLegacy(String message) {
|
||||
Component component = miniMessage.deserialize(message);
|
||||
return LegacyComponentSerializer.legacyAmpersand().serialize(component);
|
||||
}
|
||||
|
||||
private MiniMessageUtils() {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user