diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 5f5bd92fd..e0534d7d8 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -877,8 +877,8 @@ public class NPCCommands { max = 1, permission = "citizens.npc.gravity") public void gravity(CommandContext args, CommandSender sender, NPC npc) { - boolean enabled = npc.getOrAddTrait(Gravity.class).toggle(); - String key = !enabled ? Messages.GRAVITY_ENABLED : Messages.GRAVITY_DISABLED; + boolean nogravity = npc.getOrAddTrait(Gravity.class).toggle(); + String key = !nogravity ? Messages.GRAVITY_ENABLED : Messages.GRAVITY_DISABLED; Messaging.sendTr(sender, key, npc.getName()); } diff --git a/main/src/main/java/net/citizensnpcs/trait/Gravity.java b/main/src/main/java/net/citizensnpcs/trait/Gravity.java index 34f09e52d..60748fe48 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Gravity.java +++ b/main/src/main/java/net/citizensnpcs/trait/Gravity.java @@ -10,13 +10,20 @@ import net.citizensnpcs.util.NMS; */ @TraitName("gravity") public class Gravity extends Trait implements Toggleable { - @Persist - private boolean enabled; + @Persist("enabled") + private boolean nogravity; public Gravity() { super("gravity"); } + private void applyImmediately() { + if (nogravity && npc.getEntity() != null) { + npc.getEntity().setVelocity(npc.getEntity().getVelocity().setY(0)); + NMS.setNoGravity(npc.getEntity(), nogravity); + } + } + /** * Set whether to disable gravity or not * @@ -24,26 +31,33 @@ public class Gravity extends Trait implements Toggleable { * true = disable gravity, false = enable gravity */ public void gravitate(boolean gravitate) { - enabled = gravitate; + nogravity = gravitate; } public boolean hasGravity() { - return !enabled; + return !nogravity; + } + + @Override + public void onSpawn() { + applyImmediately(); } @Override public void run() { if (!npc.isSpawned()) return; - NMS.setNoGravity(npc.getEntity(), enabled); + NMS.setNoGravity(npc.getEntity(), nogravity); } public void setEnabled(boolean enabled) { - this.enabled = enabled; + this.nogravity = enabled; } @Override public boolean toggle() { - return enabled = !enabled; + nogravity = !nogravity; + applyImmediately(); + return nogravity; } } \ No newline at end of file diff --git a/main/src/main/java/net/citizensnpcs/util/NMS.java b/main/src/main/java/net/citizensnpcs/util/NMS.java index 9bb67a277..74bc12568 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMS.java +++ b/main/src/main/java/net/citizensnpcs/util/NMS.java @@ -538,8 +538,8 @@ public class NMS { BRIDGE.setNavigationTarget(handle, target, speed); } - public static void setNoGravity(Entity entity, boolean enabled) { - BRIDGE.setNoGravity(entity, enabled); + public static void setNoGravity(Entity entity, boolean nogravity) { + BRIDGE.setNoGravity(entity, nogravity); } public static void setPandaSitting(Entity entity, boolean sitting) { diff --git a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java index 17c7ce386..f95b02737 100644 --- a/main/src/main/java/net/citizensnpcs/util/NMSBridge.java +++ b/main/src/main/java/net/citizensnpcs/util/NMSBridge.java @@ -149,7 +149,7 @@ public interface NMSBridge { public void setNavigationTarget(Entity handle, Entity target, float speed); - public void setNoGravity(Entity entity, boolean enabled); + public void setNoGravity(Entity entity, boolean nogravity); public void setPandaSitting(Entity entity, boolean sitting); diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java index d48d86f63..3744f4ea3 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/NMSImpl.java @@ -1200,9 +1200,9 @@ public class NMSImpl implements NMSBridge { } @Override - public void setNoGravity(org.bukkit.entity.Entity entity, boolean enabled) { + public void setNoGravity(org.bukkit.entity.Entity entity, boolean nogravity) { Entity handle = getHandle(entity); - handle.setNoGravity(enabled); + handle.setNoGravity(nogravity); if (!(handle instanceof Mob) || !(entity instanceof NPCHolder)) return; Mob mob = (Mob) handle; @@ -1210,7 +1210,7 @@ public class NMSImpl implements NMSBridge { if (!(mob.getMoveControl() instanceof FlyingMoveControl) || npc.data().has("flying-nogravity-float")) return; try { - if (enabled) { + if (nogravity) { boolean old = (boolean) FLYING_MOVECONTROL_FLOAT_GETTER.invoke(mob.getMoveControl()); FLYING_MOVECONTROL_FLOAT_SETTER.invoke(mob.getMoveControl(), true); npc.data().set("flying-nogravity-float", old);