From 1f1cbf5a2d62ca5c1967c804698781c65bcbed48 Mon Sep 17 00:00:00 2001
From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com>
Date: Fri, 19 Sep 2025 16:59:39 +0800
Subject: [PATCH 1/5] Add setters for event-location of move events
---
.../classes/data/BukkitEventValues.java | 50 ++++++++++++++++---
1 file changed, 44 insertions(+), 6 deletions(-)
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..723f23a17da 100644
--- a/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java
+++ b/src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java
@@ -342,8 +342,28 @@ else if (hand == EquipmentSlot.OFF_HAND)
// PlayerMoveEvent
EventValues.registerEventValue(PlayerMoveEvent.class, Block.class,
event -> event.getTo().clone().subtract(0, 0.5, 0).getBlock());
- EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, PlayerMoveEvent::getFrom, TIME_PAST);
- EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, PlayerMoveEvent::getTo);
+ EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, new EventConverter<>() {
+ @Override
+ public void set(PlayerMoveEvent event, Location value) {
+ event.setFrom(value.clone());
+ }
+
+ @Override
+ public Location convert(PlayerMoveEvent event) {
+ return event.getFrom();
+ }
+ }, TIME_PAST);
+ EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, new EventConverter<>() {
+ @Override
+ public void set(PlayerMoveEvent event, Location value) {
+ event.setTo(value.clone());
+ }
+
+ @Override
+ public Location convert(PlayerMoveEvent event) {
+ return event.getTo();
+ }
+ });
EventValues.registerEventValue(PlayerMoveEvent.class, Chunk.class, event -> event.getFrom().getChunk(), TIME_PAST);
EventValues.registerEventValue(PlayerMoveEvent.class, Chunk.class, event -> event.getTo().getChunk());
// PlayerItemDamageEvent
@@ -547,10 +567,28 @@ else if (hand == EquipmentSlot.OFF_HAND)
//PlayerTeleportEvent
EventValues.registerEventValue(PlayerTeleportEvent.class, TeleportCause.class, PlayerTeleportEvent::getCause);
//EntityMoveEvent
- if (Skript.classExists("io.papermc.paper.event.entity.EntityMoveEvent")) {
- EventValues.registerEventValue(EntityMoveEvent.class, Location.class, EntityMoveEvent::getFrom);
- EventValues.registerEventValue(EntityMoveEvent.class, Location.class, EntityMoveEvent::getTo, TIME_FUTURE);
- }
+ EventValues.registerEventValue(EntityMoveEvent.class, Location.class, new EventConverter<>() {
+ @Override
+ public void set(EntityMoveEvent event, Location value) {
+ event.setFrom(value.clone());
+ }
+
+ @Override
+ public Location convert(EntityMoveEvent event) {
+ return event.getFrom();
+ }
+ });
+ EventValues.registerEventValue(EntityMoveEvent.class, Location.class, new EventConverter<>() {
+ @Override
+ public void set(EntityMoveEvent event, Location value) {
+ event.setTo(value.clone());
+ }
+
+ @Override
+ public Location convert(EntityMoveEvent event) {
+ return event.getTo();
+ }
+ }, TIME_FUTURE);
//CreatureSpawnEvent
EventValues.registerEventValue(CreatureSpawnEvent.class, SpawnReason.class, CreatureSpawnEvent::getSpawnReason);
//FireworkExplodeEvent
From b86d9d411ecfe7c85d4f84035bdd554e7424297e Mon Sep 17 00:00:00 2001
From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com>
Date: Fri, 19 Sep 2025 17:43:12 +0800
Subject: [PATCH 2/5] Merge player and entity portal events
---
.../java/ch/njol/skript/events/EvtPortal.java | 49 +++++++++++++++++++
.../ch/njol/skript/events/SimpleEvents.java | 8 ---
2 files changed, 49 insertions(+), 8 deletions(-)
create mode 100644 src/main/java/ch/njol/skript/events/EvtPortal.java
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..12010f9ded8
--- /dev/null
+++ b/src/main/java/ch/njol/skript/events/EvtPortal.java
@@ -0,0 +1,49 @@
+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. Cancel the event to prevent the entity from teleporting."
+ ).keywords(
+ "player", "entity"
+ ).examples(
+ "on portal:",
+ "\tbroadcast \"%player% has entered a portal!\"",
+ "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/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:",
From 388dfa2484b256a2247b5c8ace2aef9951a446ae Mon Sep 17 00:00:00 2001
From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com>
Date: Fri, 19 Sep 2025 18:08:32 +0800
Subject: [PATCH 3/5] Added more details on event desc
---
src/main/java/ch/njol/skript/events/EvtPortal.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/ch/njol/skript/events/EvtPortal.java b/src/main/java/ch/njol/skript/events/EvtPortal.java
index 12010f9ded8..5b20aa2614e 100644
--- a/src/main/java/ch/njol/skript/events/EvtPortal.java
+++ b/src/main/java/ch/njol/skript/events/EvtPortal.java
@@ -16,7 +16,8 @@ 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. Cancel the event to prevent the entity from teleporting."
+ "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(
From ccd2079d9520146a1e014739ebe8ebee96326ee1 Mon Sep 17 00:00:00 2001
From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com>
Date: Fri, 19 Sep 2025 18:18:22 +0800
Subject: [PATCH 4/5] Added more details on examples
---
src/main/java/ch/njol/skript/events/EvtPortal.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/main/java/ch/njol/skript/events/EvtPortal.java b/src/main/java/ch/njol/skript/events/EvtPortal.java
index 5b20aa2614e..6a2eb2d04b2 100644
--- a/src/main/java/ch/njol/skript/events/EvtPortal.java
+++ b/src/main/java/ch/njol/skript/events/EvtPortal.java
@@ -23,6 +23,12 @@ public class EvtPortal extends SkriptEvent {
).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)");
From 8cbbcf90e8cb7b2c20fc25fb6f00cca465289f30 Mon Sep 17 00:00:00 2001
From: NotSoDelayed <72163224+NotSoDelayed@users.noreply.github.com>
Date: Sat, 20 Sep 2025 17:44:11 +0800
Subject: [PATCH 5/5] Moved setters to teleport events
---
.../classes/data/BukkitEventValues.java | 54 +++----------------
.../java/ch/njol/skript/events/EvtPortal.java | 1 +
.../ch/njol/skript/events/EvtTeleport.java | 53 ++++++++++++++++++
3 files changed, 60 insertions(+), 48 deletions(-)
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 723f23a17da..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);
@@ -342,28 +338,8 @@ else if (hand == EquipmentSlot.OFF_HAND)
// PlayerMoveEvent
EventValues.registerEventValue(PlayerMoveEvent.class, Block.class,
event -> event.getTo().clone().subtract(0, 0.5, 0).getBlock());
- EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, new EventConverter<>() {
- @Override
- public void set(PlayerMoveEvent event, Location value) {
- event.setFrom(value.clone());
- }
-
- @Override
- public Location convert(PlayerMoveEvent event) {
- return event.getFrom();
- }
- }, TIME_PAST);
- EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, new EventConverter<>() {
- @Override
- public void set(PlayerMoveEvent event, Location value) {
- event.setTo(value.clone());
- }
-
- @Override
- public Location convert(PlayerMoveEvent event) {
- return event.getTo();
- }
- });
+ EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, PlayerMoveEvent::getFrom, TIME_PAST);
+ EventValues.registerEventValue(PlayerMoveEvent.class, Location.class, PlayerMoveEvent::getTo);
EventValues.registerEventValue(PlayerMoveEvent.class, Chunk.class, event -> event.getFrom().getChunk(), TIME_PAST);
EventValues.registerEventValue(PlayerMoveEvent.class, Chunk.class, event -> event.getTo().getChunk());
// PlayerItemDamageEvent
@@ -567,28 +543,10 @@ public Location convert(PlayerMoveEvent event) {
//PlayerTeleportEvent
EventValues.registerEventValue(PlayerTeleportEvent.class, TeleportCause.class, PlayerTeleportEvent::getCause);
//EntityMoveEvent
- EventValues.registerEventValue(EntityMoveEvent.class, Location.class, new EventConverter<>() {
- @Override
- public void set(EntityMoveEvent event, Location value) {
- event.setFrom(value.clone());
- }
-
- @Override
- public Location convert(EntityMoveEvent event) {
- return event.getFrom();
- }
- });
- EventValues.registerEventValue(EntityMoveEvent.class, Location.class, new EventConverter<>() {
- @Override
- public void set(EntityMoveEvent event, Location value) {
- event.setTo(value.clone());
- }
-
- @Override
- public Location convert(EntityMoveEvent event) {
- return event.getTo();
- }
- }, TIME_FUTURE);
+ if (Skript.classExists("io.papermc.paper.event.entity.EntityMoveEvent")) {
+ EventValues.registerEventValue(EntityMoveEvent.class, Location.class, EntityMoveEvent::getFrom);
+ EventValues.registerEventValue(EntityMoveEvent.class, Location.class, EntityMoveEvent::getTo, TIME_FUTURE);
+ }
//CreatureSpawnEvent
EventValues.registerEventValue(CreatureSpawnEvent.class, SpawnReason.class, CreatureSpawnEvent::getSpawnReason);
//FireworkExplodeEvent
diff --git a/src/main/java/ch/njol/skript/events/EvtPortal.java b/src/main/java/ch/njol/skript/events/EvtPortal.java
index 6a2eb2d04b2..4055e0fd7f5 100644
--- a/src/main/java/ch/njol/skript/events/EvtPortal.java
+++ b/src/main/java/ch/njol/skript/events/EvtPortal.java
@@ -53,4 +53,5 @@ public boolean check(Event event) {
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