diff --git a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java index f0c72d75a70..81e3ad5762e 100644 --- a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java +++ b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java @@ -229,10 +229,6 @@ public final class BukkitEventValues { // EntityTameEvent EventValues.registerEventValue(EntityTameEvent.class, Entity.class, EntityTameEvent::getEntity); - // EntityTeleportEvent - EventValues.registerEventValue(EntityTeleportEvent.class, Location.class, EntityTeleportEvent::getFrom, TIME_PAST); - EventValues.registerEventValue(EntityTeleportEvent.class, Location.class, EntityTeleportEvent::getTo); - // EntityChangeBlockEvent EventValues.registerEventValue(EntityChangeBlockEvent.class, Block.class, EntityChangeBlockEvent::getBlock, TIME_PAST); EventValues.registerEventValue(EntityChangeBlockEvent.class, Block.class, EntityChangeBlockEvent::getBlock); diff --git a/src/main/java/ch/njol/skript/events/EvtPortal.java b/src/main/java/ch/njol/skript/events/EvtPortal.java new file mode 100644 index 00000000000..4055e0fd7f5 --- /dev/null +++ b/src/main/java/ch/njol/skript/events/EvtPortal.java @@ -0,0 +1,57 @@ +package ch.njol.skript.events; + +import org.bukkit.event.Event; +import org.bukkit.event.entity.EntityPortalEvent; +import org.bukkit.event.player.PlayerPortalEvent; +import org.jetbrains.annotations.Nullable; + +import ch.njol.skript.Skript; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.util.coll.CollectionUtils; + +public class EvtPortal extends SkriptEvent { + + static { + Skript.registerEvent("Portal", EvtPortal.class, CollectionUtils.array(PlayerPortalEvent.class, EntityPortalEvent.class), "[player] portal", "entity portal") + .description( + "Called when a player or an entity uses a nether or end portal. Note that 'on entity portal' event does not apply to players.", + "Cancel the event to prevent the entity from teleporting." + ).keywords( + "player", "entity" + ).examples( + "on portal:", + "\tbroadcast \"%player% has entered a portal!\"", + "", + "on player portal:", + "\tplayer's world is world(\"wilderness\")", + "\tset world of event-location to player's world", + "\tadd 9000 to x-pos of event-location", + "", + "on entity portal:", + "\tbroadcast \"A %type of event-entity% has entered a portal!" + ).since("1.0, 2.5.3 (entities), INSERT VERSION (location changers)"); + } + + private boolean isPlayer; + + @Override + public boolean init(Literal[] args, int matchedPattern, ParseResult parseResult) { + isPlayer = matchedPattern == 0; + return true; + } + + @Override + public boolean check(Event event) { + if (isPlayer) + return event instanceof PlayerPortalEvent; + return event instanceof EntityPortalEvent; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return (isPlayer ? "player" : "entity") + " portal"; + } + +} diff --git a/src/main/java/ch/njol/skript/events/EvtTeleport.java b/src/main/java/ch/njol/skript/events/EvtTeleport.java index 1855182c8e3..7c85221a8d3 100644 --- a/src/main/java/ch/njol/skript/events/EvtTeleport.java +++ b/src/main/java/ch/njol/skript/events/EvtTeleport.java @@ -5,13 +5,19 @@ import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.entity.EntityType; +import ch.njol.skript.registrations.EventConverter; +import ch.njol.skript.registrations.EventValues; import ch.njol.util.coll.CollectionUtils; + +import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.jetbrains.annotations.Nullable; +import static ch.njol.skript.registrations.EventValues.TIME_PAST; + public class EvtTeleport extends SkriptEvent { static { @@ -26,6 +32,53 @@ public class EvtTeleport extends SkriptEvent { "on creeper teleport:" ) .since("1.0, 2.9.0 (entity teleport)"); + + EventValues.registerEventValue(PlayerTeleportEvent.class, Location.class, new EventConverter<>() { + @Override + public void set(PlayerTeleportEvent event, Location value) { + event.setFrom(value.clone()); + } + + @Override + public Location convert(PlayerTeleportEvent event) { + return event.getFrom(); + } + }, TIME_PAST); + EventValues.registerEventValue(PlayerTeleportEvent.class, Location.class, new EventConverter<>() { + @Override + public void set(PlayerTeleportEvent event, Location value) { + event.setTo(value.clone()); + } + + @Override + public Location convert(PlayerTeleportEvent event) { + return event.getTo(); + } + }); + + EventValues.registerEventValue(EntityTeleportEvent.class, Location.class, new EventConverter<>() { + @Override + public void set(EntityTeleportEvent event, Location value) { + event.setFrom(value.clone()); + } + + @Override + public Location convert(EntityTeleportEvent event) { + return event.getFrom(); + } + }, TIME_PAST); + EventValues.registerEventValue(EntityTeleportEvent.class, Location.class, new EventConverter<>() { + @Override + public void set(EntityTeleportEvent event, Location value) { + event.setTo(value.clone()); + } + + @Override + public Location convert(EntityTeleportEvent event) { + return event.getTo(); + } + }); + } @Nullable diff --git a/src/main/java/ch/njol/skript/events/SimpleEvents.java b/src/main/java/ch/njol/skript/events/SimpleEvents.java index 993b9316d4e..e06163052c0 100644 --- a/src/main/java/ch/njol/skript/events/SimpleEvents.java +++ b/src/main/java/ch/njol/skript/events/SimpleEvents.java @@ -199,14 +199,6 @@ public class SimpleEvents { .description("Called when a player is kicked from the server. You can change the kick message or cancel the event entirely.") .examples("on kick:") .since("1.0"); - Skript.registerEvent("Entity Portal", SimpleEvent.class, EntityPortalEvent.class, "entity portal") - .description("Called when an entity uses a nether or end portal. Cancel the event to prevent the entity from teleporting.") - .examples("on entity portal:", "\tbroadcast \"A %type of event-entity% has entered a portal!") - .since("2.5.3"); - Skript.registerEvent("Portal", SimpleEvent.class, PlayerPortalEvent.class, "[player] portal") - .description("Called when a player uses a nether or end portal. Cancel the event to prevent the player from teleporting.") - .examples("on player portal:") - .since("1.0"); Skript.registerEvent("Quit", SimpleEvent.class, PlayerQuitEvent.class, "(quit[ting]|disconnect[ing]|log[ ]out|logging out|leav(e|ing))") .description("Called when a player leaves the server.") .examples("on quit:",