From 88a241d76cfb25e1449fa12ada5f7f14575bf580 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sun, 22 Jun 2025 01:43:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BF=A0=E8=AF=9A=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E9=A2=91=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/projectile/BukkitProjectileManager.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java index 991cd262a..4801fabfe 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java @@ -18,6 +18,7 @@ import net.momirealms.craftengine.core.plugin.scheduler.SchedulerTask; import net.momirealms.craftengine.core.util.VersionHelper; import org.bukkit.Bukkit; import org.bukkit.World; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -116,7 +117,7 @@ public class BukkitProjectileManager implements Listener, ProjectileManager { if (meta != null) { BukkitCustomProjectile customProjectile = new BukkitCustomProjectile(meta, projectile, wrapped); this.projectiles.put(projectile.getEntityId(), customProjectile); - new ProjectileInjectTask(projectile); + new ProjectileInjectTask(projectile, !projectileItem.getItemMeta().hasEnchant(Enchantment.LOYALTY)); } }); } @@ -159,11 +160,13 @@ public class BukkitProjectileManager implements Listener, ProjectileManager { public class ProjectileInjectTask implements Runnable { private final Projectile projectile; private final SchedulerTask task; + private final boolean checkInGround; private Object cachedServerEntity; private int lastInjectedInterval = 0; - public ProjectileInjectTask(Projectile projectile) { + public ProjectileInjectTask(Projectile projectile, boolean checkInGround) { this.projectile = projectile; + this.checkInGround = checkInGround; if (VersionHelper.isFolia()) { this.task = new FoliaTask(projectile.getScheduler().runAtFixedRate(plugin.javaPlugin(), (t) -> this.run(), () -> {}, 1, 1)); } else { @@ -188,7 +191,7 @@ public class BukkitProjectileManager implements Listener, ProjectileManager { this.cachedServerEntity = serverEntity; } - if (!CoreReflections.clazz$AbstractArrow.isInstance(nmsEntity)) { + if (!CoreReflections.clazz$AbstractArrow.isInstance(nmsEntity) || !this.checkInGround) { updateProjectileUpdateInterval(1); } else { boolean inGround = FastNMS.INSTANCE.method$AbstractArrow$isInGround(nmsEntity);