diff --git a/src/main/java/ch/njol/skript/events/SimpleEvents.java b/src/main/java/ch/njol/skript/events/SimpleEvents.java
index 1da15c26671..9fb9bf2df62 100644
--- a/src/main/java/ch/njol/skript/events/SimpleEvents.java
+++ b/src/main/java/ch/njol/skript/events/SimpleEvents.java
@@ -311,11 +311,6 @@ public class SimpleEvents {
}
}
- Skript.registerEvent("Gliding State Change", SimpleEvent.class, EntityToggleGlideEvent.class, "(gliding state change|toggl(e|ing) gliding)")
- .description("Called when an entity toggles glider on or off, or when server toggles gliding state of an entity forcibly.")
- .examples("on toggling gliding:",
- " cancel the event # bad idea, but you CAN do it!")
- .since("2.2-dev21");
Skript.registerEvent("AoE Cloud Effect", SimpleEvent.class, AreaEffectCloudApplyEvent.class, "(area|AoE) [cloud] effect")
.description("Called when area effect cloud applies its potion effect. This happens every 5 ticks by default.")
.examples("on area cloud effect:")
diff --git a/src/main/java/ch/njol/skript/expressions/ExprGlidingState.java b/src/main/java/ch/njol/skript/expressions/ExprGlidingState.java
index fc3dfee01ae..859e29657c3 100644
--- a/src/main/java/ch/njol/skript/expressions/ExprGlidingState.java
+++ b/src/main/java/ch/njol/skript/expressions/ExprGlidingState.java
@@ -1,27 +1,35 @@
package ch.njol.skript.expressions;
+import ch.njol.skript.lang.Expression;
+import ch.njol.skript.lang.SkriptParser;
+import ch.njol.util.Kleenean;
import org.bukkit.entity.LivingEntity;
import org.bukkit.event.Event;
import org.jetbrains.annotations.Nullable;
-import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Example;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.expressions.base.SimplePropertyExpression;
+import org.skriptlang.skript.lang.script.ScriptWarning;
@Name("Gliding State")
@Description("Sets of gets gliding state of player. It allows you to set gliding state of entity even if they do not have an Elytra equipped.")
@Example("set gliding of player to off")
@Since("2.2-dev21")
+@Deprecated(since = "INSERT VERSION", forRemoval = true)
public class ExprGlidingState extends SimplePropertyExpression {
static {
register(ExprGlidingState.class, Boolean.class, "(gliding|glider) [state]", "livingentities");
}
-
+ @Override
+ public boolean init(Expression>[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
+ ScriptWarning.printDeprecationWarning("This expression is deprecated. Consider using the glide effect instead.");
+ return super.init(expressions, matchedPattern, isDelayed, parseResult);
+ }
@Override
public Boolean convert(final LivingEntity e) {
return e.isGliding();
diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/EntityModule.java b/src/main/java/org/skriptlang/skript/bukkit/entity/EntityModule.java
index 5e07c604ed6..2c522d10738 100644
--- a/src/main/java/org/skriptlang/skript/bukkit/entity/EntityModule.java
+++ b/src/main/java/org/skriptlang/skript/bukkit/entity/EntityModule.java
@@ -2,16 +2,21 @@
import ch.njol.skript.Skript;
import ch.njol.skript.entity.SimpleEntityData;
+import ch.njol.skript.lang.util.SimpleEvent;
import org.bukkit.entity.AbstractNautilus;
+import org.bukkit.event.entity.EntityToggleGlideEvent;
import org.skriptlang.skript.addon.AddonModule;
import org.skriptlang.skript.addon.HierarchicalAddonModule;
import org.skriptlang.skript.addon.SkriptAddon;
import org.skriptlang.skript.bukkit.entity.displays.DisplayModule;
+import org.skriptlang.skript.bukkit.entity.elements.effects.EffGlide;
import org.skriptlang.skript.bukkit.entity.interactions.InteractionModule;
import org.skriptlang.skript.bukkit.entity.elements.expressions.ExprDeathMessage;
import org.skriptlang.skript.bukkit.entity.entitydata.NautilusData;
import org.skriptlang.skript.bukkit.entity.entitydata.ZombieNautilusData;
import org.skriptlang.skript.bukkit.entity.player.PlayerModule;
+import org.skriptlang.skript.bukkit.registration.BukkitSyntaxInfos;
+import org.skriptlang.skript.registration.SyntaxRegistry;
import java.util.List;
@@ -36,9 +41,25 @@ protected void loadSelf(SkriptAddon addon) {
ZombieNautilusData.register();
SimpleEntityData.addSuperEntity("any nautilus", AbstractNautilus.class);
}
-
+ SyntaxRegistry syntaxRegistry = moduleRegistry(addon);
+ syntaxRegistry.register(BukkitSyntaxInfos.Event.KEY, BukkitSyntaxInfos.Event.builder(SimpleEvent.class, "Toggle Glide")
+ .addDescription("Called when an entity starts or stops gliding, or when the server toggles the gliding state of an entity forcibly.")
+ .addExample("""
+ on toggling gliding:
+ cancel the event # bad idea, but you CAN do it!
+ """)
+ .addSince("2.2-dev21")
+ .addSince("INSERT VERSION (Pattern changed)")
+ .addPatterns(
+ "gliding state change[d]",
+ "(toggle|toggling) glid(e|ing)",
+ "glid(e|ing) toggle[d]"
+ )
+ .addEvent(EntityToggleGlideEvent.class)
+ .build());
register(addon,
- ExprDeathMessage::register
+ ExprDeathMessage::register,
+ EffGlide::register
);
}
diff --git a/src/main/java/org/skriptlang/skript/bukkit/entity/elements/effects/EffGlide.java b/src/main/java/org/skriptlang/skript/bukkit/entity/elements/effects/EffGlide.java
new file mode 100644
index 00000000000..9a06cf1c785
--- /dev/null
+++ b/src/main/java/org/skriptlang/skript/bukkit/entity/elements/effects/EffGlide.java
@@ -0,0 +1,66 @@
+package org.skriptlang.skript.bukkit.entity.elements.effects;
+
+import ch.njol.skript.doc.Description;
+import ch.njol.skript.doc.Example;
+import ch.njol.skript.doc.Name;
+import ch.njol.skript.doc.Since;
+import ch.njol.skript.lang.Effect;
+import ch.njol.skript.lang.Expression;
+import ch.njol.skript.lang.SkriptParser.ParseResult;
+import ch.njol.skript.lang.SyntaxStringBuilder;
+import ch.njol.util.Kleenean;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.event.Event;
+import org.jetbrains.annotations.Nullable;
+import org.skriptlang.skript.registration.SyntaxInfo;
+import org.skriptlang.skript.registration.SyntaxRegistry;
+
+@Name("Make Entity Glide")
+@Description("""
+ Makes an entity start/stop gliding if they have an elytra or a chestplate with a glider component. If the entity has neither, the state of the entity will flicker for 1 tick.
+ """)
+@Example("make last spawned zombie start gliding")
+@Since("INSERT VERSION")
+public class EffGlide extends Effect {
+
+ public static void register(SyntaxRegistry registry) {
+ registry.register(
+ SyntaxRegistry.EFFECT,
+ SyntaxInfo.builder(EffGlide.class)
+ .addPatterns(
+ "make %livingentities% ((start|begin) gliding|glide)",
+ "make %livingentities% (stop gliding|no longer glide)"
+ )
+ .supplier(EffGlide::new)
+ .build()
+ );
+ }
+
+ private Expression entities;
+ private boolean negated;
+
+ @Override
+ public boolean init(Expression>[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
+ entities = (Expression) expressions[0];
+ negated = matchedPattern == 1;
+ return true;
+ }
+
+ @Override
+ protected void execute(Event event) {
+ for (LivingEntity entity : entities.getArray(event)) {
+ entity.setGliding(!negated);
+ }
+ }
+
+ @Override
+ public String toString(@Nullable Event event, boolean debug) {
+ return new SyntaxStringBuilder(event, debug)
+ .append("make", entities)
+ .appendIf(negated, "not")
+ .append("glide")
+ .toString();
+ }
+
+}
+