Skip to content

Commit 469dcb9

Browse files
committed
Utiliser snapTo seulement sur la même region
Petite explication: Sur Folia, un déplacement d'entité effectué via snapTo déclenche une mise à jour des sections qui necessite d'être exécutée sur le thread propriétaire de la région initiale. Cependant, il est possible que ce dernier ne soit pas dans la même region initiale, de ce fait Folia rejette la demande en générant l'erreur: Cannot move entity off-main qu'on se mette sur le thread de l'entité, ou le thread de la future localisation. De ce fait, je fais une vérification au préalable si c'est le même monde et que la region tické pour l'entité et la future localisation est le même, et si c'est le cas, snapTo fonctionne, sinon il faut lancer une teleportation async. De ce fait, quand tout est réuni, je garde le fonctionnement initial, sinon on est obligé de teleporter l'entité
1 parent 60bbf5f commit 469dcb9

File tree

3 files changed

+24
-4
lines changed
  • v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util
  • v1_21_R5/src/main/java/net/citizensnpcs/nms/v1_21_R5/util
  • v1_21_R6/src/main/java/net/citizensnpcs/nms/v1_21_R6/util

3 files changed

+24
-4
lines changed

v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/util/NMSImpl.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,9 +1618,15 @@ public void setKnockbackResistance(org.bukkit.entity.LivingEntity entity, double
16181618

16191619
@Override
16201620
public void setLocationDirectly(org.bukkit.entity.Entity entity, Location location) {
1621-
// Todo temp teleport
16221621
if (net.citizensnpcs.api.util.SpigotUtil.isFoliaServer()) {
1623-
net.citizensnpcs.api.util.SpigotUtil.teleportAsync(entity, location);
1622+
if (location.getWorld() == entity.getWorld()
1623+
&& CitizensAPI.getScheduler().isOnOwnerThread(entity)
1624+
&& CitizensAPI.getScheduler().isOnOwnerThread(location)) {
1625+
getHandle(entity).moveTo(location.getX(), location.getY(), location.getZ(), location.getYaw(),
1626+
location.getPitch());
1627+
} else {
1628+
net.citizensnpcs.api.util.SpigotUtil.teleportAsync(entity, location);
1629+
}
16241630
return;
16251631
}
16261632
getHandle(entity).moveTo(location.getX(), location.getY(), location.getZ(), location.getYaw(),

v1_21_R5/src/main/java/net/citizensnpcs/nms/v1_21_R5/util/NMSImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1611,7 +1611,14 @@ public void setHeadYaw(org.bukkit.entity.Entity entity, float yaw) {
16111611
@Override
16121612
public void setLocationDirectly(org.bukkit.entity.Entity entity, Location location) {
16131613
if (net.citizensnpcs.api.util.SpigotUtil.isFoliaServer()) {
1614-
net.citizensnpcs.api.util.SpigotUtil.teleportAsync(entity, location);
1614+
if (location.getWorld() == entity.getWorld()
1615+
&& CitizensAPI.getScheduler().isOnOwnerThread(entity)
1616+
&& CitizensAPI.getScheduler().isOnOwnerThread(location)) {
1617+
getHandle(entity).snapTo(location.getX(), location.getY(), location.getZ(), location.getYaw(),
1618+
location.getPitch());
1619+
} else {
1620+
net.citizensnpcs.api.util.SpigotUtil.teleportAsync(entity, location);
1621+
}
16151622
return;
16161623
}
16171624
getHandle(entity).snapTo(location.getX(), location.getY(), location.getZ(), location.getYaw(),

v1_21_R6/src/main/java/net/citizensnpcs/nms/v1_21_R6/util/NMSImpl.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1647,7 +1647,14 @@ public void setHeadYaw(org.bukkit.entity.Entity entity, float yaw) {
16471647
public void setLocationDirectly(org.bukkit.entity.Entity entity, Location location) {
16481648
// Todo - temp teleport
16491649
if (net.citizensnpcs.api.util.SpigotUtil.isFoliaServer()) {
1650-
net.citizensnpcs.api.util.SpigotUtil.teleportAsync(entity, location);
1650+
if (location.getWorld() == entity.getWorld()
1651+
&& CitizensAPI.getScheduler().isOnOwnerThread(entity)
1652+
&& CitizensAPI.getScheduler().isOnOwnerThread(location)) {
1653+
getHandle(entity).snapTo(location.getX(), location.getY(), location.getZ(), location.getYaw(),
1654+
location.getPitch());
1655+
} else {
1656+
net.citizensnpcs.api.util.SpigotUtil.teleportAsync(entity, location);
1657+
}
16511658
return;
16521659
}
16531660
getHandle(entity).snapTo(location.getX(), location.getY(), location.getZ(), location.getYaw(),

0 commit comments

Comments
 (0)