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:",