fix teleports on folia - untested (#44)
This commit is contained in:
parent
bf071f4028
commit
37a093b037
3 changed files with 28 additions and 2 deletions
|
@ -6,6 +6,7 @@ import lol.pyr.director.common.command.CommandExecutionException;
|
|||
import lol.pyr.znpcsplus.npc.NpcEntryImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcImpl;
|
||||
import lol.pyr.znpcsplus.npc.NpcRegistryImpl;
|
||||
import lol.pyr.znpcsplus.util.FoliaUtil;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -19,7 +20,7 @@ public class TeleportCommand implements CommandHandler {
|
|||
context.setUsage(context.getLabel() + " teleport <npc_id>");
|
||||
Player player = context.ensureSenderIsPlayer();
|
||||
NpcImpl npc = context.parse(NpcEntryImpl.class).getNpc();
|
||||
player.teleport(npc.getLocation().toBukkitLocation(npc.getWorld()));
|
||||
FoliaUtil.teleport(player, npc.getLocation().toBukkitLocation(npc.getWorld()));
|
||||
context.send(Component.text("Teleported to NPC!", NamedTextColor.GREEN));
|
||||
}
|
||||
|
||||
|
|
|
@ -4,9 +4,11 @@ import com.mojang.authlib.GameProfile;
|
|||
import lol.pyr.znpcsplus.reflection.types.ClassReflection;
|
||||
import lol.pyr.znpcsplus.reflection.types.FieldReflection;
|
||||
import lol.pyr.znpcsplus.reflection.types.MethodReflection;
|
||||
import lol.pyr.znpcsplus.util.VersionUtil;
|
||||
import lol.pyr.znpcsplus.util.FoliaUtil;
|
||||
import lol.pyr.znpcsplus.util.VersionUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
@ -89,4 +91,10 @@ public final class Reflections {
|
|||
.withParameterTypes(Plugin.class, Consumer.class, long.class, long.class, TimeUnit.class)
|
||||
.withExpectResult(SCHEDULED_TASK_CLASS)
|
||||
.setStrict(FoliaUtil.isFolia()));
|
||||
|
||||
public static final ReflectionLazyLoader<Method> FOLIA_TELEPORT_ASYNC = new MethodReflection(
|
||||
new ReflectionBuilder(Entity.class)
|
||||
.withMethodName("teleportAsync")
|
||||
.withParameterTypes(Location.class)
|
||||
.setStrict(FoliaUtil.isFolia()));
|
||||
}
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
package lol.pyr.znpcsplus.util;
|
||||
|
||||
import lol.pyr.znpcsplus.ZNpcsPlus;
|
||||
import lol.pyr.znpcsplus.reflection.Reflections;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
public class FoliaUtil {
|
||||
private static final Boolean FOLIA = isFolia();
|
||||
public static boolean isFolia() {
|
||||
|
@ -11,4 +18,14 @@ public class FoliaUtil {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void teleport(Entity entity, Location location) {
|
||||
if (!isFolia()) entity.teleport(location);
|
||||
else try {
|
||||
Reflections.FOLIA_TELEPORT_ASYNC.get().invoke(entity, location);
|
||||
} catch (IllegalAccessException | InvocationTargetException e) {
|
||||
ZNpcsPlus.LOGGER.severe("Error while teleporting entity:");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue