Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add elytra boost event, firework type and firework syntaxes #5956

Closed
wants to merge 11 commits into from
15 changes: 12 additions & 3 deletions src/main/java/ch/njol/skript/classes/data/BukkitClasses.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
import org.bukkit.enchantments.EnchantmentOffer;
import org.bukkit.entity.Cat;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Panda.Gene;
Expand Down Expand Up @@ -1342,14 +1343,14 @@ public String toVariableNameString(final CachedServerIcon o) {
}
}));
}

Classes.registerClass(new EnumClassInfo<>(FireworkEffect.Type.class, "fireworktype", "firework types")
.user("firework ?types?")
.name("Firework Type")
.description("The type of a <a href='#fireworkeffect'>fireworkeffect</a>.")
.since("2.4")
.documentationId("FireworkType"));

Classes.registerClass(new ClassInfo<>(FireworkEffect.class, "fireworkeffect")
.user("firework ?effects?")
.name("Firework Effect")
Expand Down Expand Up @@ -1386,7 +1387,15 @@ public String toVariableNameString(FireworkEffect effect) {
return "firework effect " + effect.toString();
}
}));


Classes.registerClass(new ClassInfo<>(Firework.class, "firework")
.user("fireworks?")
.name("Firework")
.description("Firework entity")
.defaultExpression(new EventValueExpression<>(Firework.class))
.since("INSERT VERSION")
.changer(DefaultChangers.nonLivingEntityChanger));

Classes.registerClass(new EnumClassInfo<>(Difficulty.class, "difficulty", "difficulties")
.user("difficult(y|ies)")
.name("Difficulty")
Expand Down
71 changes: 44 additions & 27 deletions src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,6 @@
import java.util.List;
import java.util.Set;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.Aliases;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.command.CommandEvent;
import ch.njol.skript.events.bukkit.ScriptEvent;
import ch.njol.skript.events.bukkit.SkriptStartEvent;
import ch.njol.skript.events.bukkit.SkriptStopEvent;
import ch.njol.skript.registrations.EventValues;
import ch.njol.skript.util.BlockStateBlock;
import ch.njol.skript.util.BlockUtils;
import ch.njol.skript.util.DelayedChangeBlock;
import ch.njol.skript.util.Direction;
import ch.njol.skript.util.EnchantmentType;
import ch.njol.skript.util.Getter;
import ch.njol.skript.util.slot.InventorySlot;
import ch.njol.skript.util.slot.Slot;
import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
import io.papermc.paper.event.entity.EntityMoveEvent;
import io.papermc.paper.event.player.PlayerInventorySlotChangeEvent;
import io.papermc.paper.event.player.PlayerTradeEvent;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.FireworkEffect;
Expand Down Expand Up @@ -165,9 +143,31 @@
import org.bukkit.potion.PotionEffectType;
import org.eclipse.jdt.annotation.Nullable;

/**
* @author Peter Güttinger
*/
import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
import com.destroystokyo.paper.event.player.PlayerElytraBoostEvent;

import ch.njol.skript.Skript;
import ch.njol.skript.aliases.Aliases;
import ch.njol.skript.aliases.ItemType;
import ch.njol.skript.command.CommandEvent;
import ch.njol.skript.events.bukkit.ScriptEvent;
import ch.njol.skript.events.bukkit.SkriptStartEvent;
import ch.njol.skript.events.bukkit.SkriptStopEvent;
import ch.njol.skript.registrations.EventValues;
import ch.njol.skript.util.BlockStateBlock;
import ch.njol.skript.util.BlockUtils;
import ch.njol.skript.util.DelayedChangeBlock;
import ch.njol.skript.util.Direction;
import ch.njol.skript.util.EnchantmentType;
import ch.njol.skript.util.Getter;
import ch.njol.skript.util.slot.InventorySlot;
import ch.njol.skript.util.slot.Slot;
import io.papermc.paper.event.entity.EntityMoveEvent;
import io.papermc.paper.event.player.PlayerInventorySlotChangeEvent;
import io.papermc.paper.event.player.PlayerTradeEvent;

@SuppressWarnings("deprecation")
public final class BukkitEventValues {

Expand Down Expand Up @@ -1490,8 +1490,8 @@ public SpawnReason get(CreatureSpawnEvent e) {
EventValues.registerEventValue(FireworkExplodeEvent.class, Firework.class, new Getter<Firework, FireworkExplodeEvent>() {
@Override
@Nullable
public Firework get(FireworkExplodeEvent e) {
return e.getEntity();
public Firework get(FireworkExplodeEvent event) {
return event.getEntity();
}
}, 0);
EventValues.registerEventValue(FireworkExplodeEvent.class, FireworkEffect.class, new Getter<FireworkEffect, FireworkExplodeEvent>() {
Expand Down Expand Up @@ -1718,6 +1718,23 @@ public QuitReason get(PlayerQuitEvent event) {
}
}, EventValues.TIME_NOW);

if (Skript.classExists("com.destroystokyo.paper.event.player.PlayerElytraBoostEvent")) {
EventValues.registerEventValue(PlayerElytraBoostEvent.class, Firework.class, new Getter<Firework, PlayerElytraBoostEvent>() {
@Override
@Nullable
public Firework get(PlayerElytraBoostEvent event) {
return event.getFirework();
}
}, EventValues.TIME_NOW);
EventValues.registerEventValue(PlayerElytraBoostEvent.class, ItemStack.class, new Getter<ItemStack, PlayerElytraBoostEvent>() {
@Override
@Nullable
public ItemStack get(PlayerElytraBoostEvent event) {
return event.getItemStack();
}
}, EventValues.TIME_NOW);
}

}

}
27 changes: 18 additions & 9 deletions src/main/java/ch/njol/skript/events/SimpleEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@
*/
package ch.njol.skript.events;

import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
import io.papermc.paper.event.player.PlayerDeepSleepEvent;
import io.papermc.paper.event.player.PlayerInventorySlotChangeEvent;
import org.bukkit.event.block.BlockCanBuildEvent;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockFertilizeEvent;
Expand All @@ -33,9 +30,9 @@
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.block.SpongeAbsorbEvent;
import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.event.enchantment.PrepareItemEnchantEvent;
import org.bukkit.event.block.SpongeAbsorbEvent;
import org.bukkit.event.entity.AreaEffectCloudApplyEvent;
import org.bukkit.event.entity.CreeperPowerEvent;
import org.bukkit.event.entity.EntityBreakDoorEvent;
Expand Down Expand Up @@ -110,19 +107,21 @@
import org.spigotmc.event.entity.EntityDismountEvent;
import org.spigotmc.event.entity.EntityMountEvent;

import com.destroystokyo.paper.event.block.AnvilDamagedEvent;
import com.destroystokyo.paper.event.entity.EntityJumpEvent;
import com.destroystokyo.paper.event.entity.ProjectileCollideEvent;
import com.destroystokyo.paper.event.player.PlayerArmorChangeEvent;
import com.destroystokyo.paper.event.player.PlayerElytraBoostEvent;
import com.destroystokyo.paper.event.player.PlayerJumpEvent;
import com.destroystokyo.paper.event.server.PaperServerListPingEvent;
import com.destroystokyo.paper.event.entity.EntityJumpEvent;
import io.papermc.paper.event.player.PlayerTradeEvent;

import ch.njol.skript.Skript;
import ch.njol.skript.SkriptEventHandler;
import ch.njol.skript.lang.util.SimpleEvent;
import io.papermc.paper.event.player.PlayerDeepSleepEvent;
import io.papermc.paper.event.player.PlayerInventorySlotChangeEvent;
import io.papermc.paper.event.player.PlayerTradeEvent;

/**
* @author Peter Güttinger
*/
public class SimpleEvents {
static {
Skript.registerEvent("Can Build Check", SimpleEvent.class, BlockCanBuildEvent.class, "[block] can build check")
Expand Down Expand Up @@ -731,6 +730,16 @@ public class SimpleEvents {
)
.since("INSERT VERSION");

if (Skript.classExists("com.destroystokyo.paper.event.player.PlayerElytraBoostEvent"))
Skript.registerEvent("Elytra Boost", SimpleEvent.class, PlayerElytraBoostEvent.class, "[player] elytra boost [(with|by) [a] firework]")
.description("Called when a player boosts elytra flight with a firework.")
.examples(
"on player elytra boost:",
"\tsend \"You boosted an elytra with a level %max life of event-firework% firework!\" to player"
)
.requiredPlugins("Paper")
.since("INSERT VERSION");

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package org.skriptlang.skript.elements.fireworks;

import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import com.destroystokyo.paper.event.player.PlayerElytraBoostEvent;

import ch.njol.skript.Skript;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;

@Name("Elytra Boost Will Consume")
@Description("Checks if the firework will be consumed in an <a href='events.html#elytra_boost'>elytra boost event</a>.")
@Examples({
"on player elytra boost:",
"\twill consume firework",
"\tset to consume the firework"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

invalid example

})
@Since("INSERT VERSION")
public class CondElytraBoostConsume extends Condition {

static {
if (Skript.classExists("com.destroystokyo.paper.event.player.PlayerElytraBoostEvent"))
Skript.registerCondition(CondElytraBoostConsume.class, "[event] (will [:not]|not:won't) consume [the] firework");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it should be forced to include what is consuming the firework:

"[the] (event|player) (will [:not]|not:won't) consume [the] firework"

}

private boolean negate;

@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
if (getParser().isCurrentEvent(PlayerElytraBoostEvent.class)) {
Skript.error("You can only use the 'will consume firework' condition in the 'on elytra boost' event!");
TheLimeGlass marked this conversation as resolved.
Show resolved Hide resolved
return false;
}
negate = parseResult.hasTag("not");
return true;
TheLimeGlass marked this conversation as resolved.
Show resolved Hide resolved
}

@Override
public boolean check(Event event) {
if (!(event instanceof PlayerElytraBoostEvent))
return false;
return negate && !((PlayerElytraBoostEvent) event).shouldConsume();
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return "will " + (negate ? " not " : "") + "consume the firework";
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package org.skriptlang.skript.elements.fireworks;

import org.bukkit.event.Event;
import org.eclipse.jdt.annotation.Nullable;

import com.destroystokyo.paper.event.player.PlayerElytraBoostEvent;

import ch.njol.skript.Skript;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Examples;
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.util.Kleenean;

@Name("Elytra Boost Consume")
@Description("Change if the firework will be consumed in an <a href='events.html#elytra_boost'>elytra boost event</a>.")
@Examples({
"on player elytra boost:",
"\twill consume firework",
"\tset to consume the firework"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

invalid example

})
@Since("INSERT VERSION")
public class EffElytraBoostConsume extends Effect {

static {
if (Skript.classExists("com.destroystokyo.paper.event.player.PlayerElytraBoostEvent"))
Skript.registerEffect(EffElytraBoostConsume.class, "(set|change) [[the] event] to [:not] consume [the] firework", "[not:do not] consume firework", "set consume firework to %boolean%");
TheLimeGlass marked this conversation as resolved.
Show resolved Hide resolved
}

@Nullable
private Expression<Boolean> expression;
private boolean consume;

@Override
@SuppressWarnings("unchecked")
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
if (getParser().isCurrentEvent(PlayerElytraBoostEvent.class)) {
Skript.error("You can only use the 'consume firework' effect in the 'on elytra boost' event!");
TheLimeGlass marked this conversation as resolved.
Show resolved Hide resolved
return false;
}
if (matchedPattern == 2) {
expression = (Expression<Boolean>) exprs[0];
} else {
consume = !parseResult.hasTag("not");
}
return true;
}

@Override
protected void execute(Event event) {
if (!(event instanceof PlayerElytraBoostEvent))
return;
PlayerElytraBoostEvent elytraBoostEvent = (PlayerElytraBoostEvent) event;
if (expression != null) {
Boolean consume = expression.getSingle(event);
if (consume == null)
return;
elytraBoostEvent.setShouldConsume(consume);
} else {
elytraBoostEvent.setShouldConsume(consume);
}
}

@Override
public String toString(@Nullable Event event, boolean debug) {
return expression == null ? (consume ? "consume" : "do not consume") + " firework" : "set consume firework to " + expression.toString(event, debug);
}

}
Loading
Loading