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(); + } + +} +