63 lines
1.5 KiB
Java
63 lines
1.5 KiB
Java
package net.citizensnpcs.trait;
|
|
|
|
import net.citizensnpcs.api.persistence.Persist;
|
|
import net.citizensnpcs.api.trait.Trait;
|
|
import net.citizensnpcs.api.trait.TraitName;
|
|
import net.citizensnpcs.util.NMS;
|
|
|
|
/**
|
|
* Enable/disable Minecraft's gravity.
|
|
*/
|
|
@TraitName("gravity")
|
|
public class Gravity extends Trait implements Toggleable {
|
|
@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
|
|
*
|
|
* @param gravitate
|
|
* true = disable gravity, false = enable gravity
|
|
*/
|
|
public void gravitate(boolean gravitate) {
|
|
nogravity = gravitate;
|
|
}
|
|
|
|
public boolean hasGravity() {
|
|
return !nogravity;
|
|
}
|
|
|
|
@Override
|
|
public void onSpawn() {
|
|
applyImmediately();
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
if (!npc.isSpawned())
|
|
return;
|
|
NMS.setNoGravity(npc.getEntity(), nogravity);
|
|
}
|
|
|
|
public void setEnabled(boolean enabled) {
|
|
nogravity = enabled;
|
|
}
|
|
|
|
@Override
|
|
public boolean toggle() {
|
|
nogravity = !nogravity;
|
|
applyImmediately();
|
|
return nogravity;
|
|
}
|
|
} |