Skip to content

Commit 5cdcbab

Browse files
authored
Respawn Reason (#8323)
1 parent 5b6ed52 commit 5cdcbab

File tree

5 files changed

+61
-1
lines changed

5 files changed

+61
-1
lines changed

src/main/java/ch/njol/skript/classes/data/BukkitClasses.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason;
4040
import org.bukkit.event.player.PlayerQuitEvent.QuitReason;
4141
import org.bukkit.event.player.PlayerResourcePackStatusEvent.Status;
42+
import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason;
4243
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
4344
import org.bukkit.inventory.BlockInventoryHolder;
4445
import org.bukkit.inventory.EquipmentSlot;
@@ -697,6 +698,12 @@ protected boolean canBeInstantiated() {
697698
.description("The spawn reason in a <a href='#spawn'>spawn</a> event.")
698699
.since("2.3"));
699700

701+
Classes.registerClass(new EnumClassInfo<>(RespawnReason.class, "respawnreason", "respawn reasons")
702+
.user("respawn(ing)? ?reasons?")
703+
.name("Respawn Reason")
704+
.description("The respawn reason in a <a href='#respawn'>respawn</a> event.")
705+
.since("INSERT VERSION"));
706+
700707
if (Skript.classExists("com.destroystokyo.paper.event.server.PaperServerListPingEvent")) {
701708
Classes.registerClass(new ClassInfo<>(CachedServerIcon.class, "cachedservericon")
702709
.user("server ?icons?")

src/main/java/ch/njol/skript/classes/data/BukkitEventValues.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import org.bukkit.event.player.*;
5151
import org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason;
5252
import org.bukkit.event.player.PlayerQuitEvent.QuitReason;
53+
import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason;
5354
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
5455
import org.bukkit.event.server.ServerCommandEvent;
5556
import org.bukkit.event.vehicle.*;
@@ -62,6 +63,7 @@
6263
import org.jetbrains.annotations.Nullable;
6364
import org.skriptlang.skript.lang.converter.Converter;
6465

66+
import java.lang.reflect.Method;
6567
import java.util.ArrayList;
6668
import java.util.HashSet;
6769
import java.util.List;
@@ -540,6 +542,21 @@ else if (hand == EquipmentSlot.OFF_HAND)
540542
}
541543
//CreatureSpawnEvent
542544
EventValues.registerEventValue(CreatureSpawnEvent.class, SpawnReason.class, CreatureSpawnEvent::getSpawnReason);
545+
//PlayerRespawnEvent - 1.21.5+ added AbstractRespawnEvent as a base class, where prior to that, getRespawnReason was in PlayerRespawnEvent
546+
if (Skript.classExists("org.bukkit.event.player.AbstractRespawnEvent")) {
547+
EventValues.registerEventValue(PlayerRespawnEvent.class, RespawnReason.class, PlayerRespawnEvent::getRespawnReason);
548+
} else {
549+
try {
550+
Method method = PlayerRespawnEvent.class.getMethod("getRespawnReason");
551+
EventValues.registerEventValue(PlayerRespawnEvent.class, RespawnReason.class, event -> {
552+
try {
553+
return (RespawnReason) method.invoke(event);
554+
} catch (Exception e) {
555+
return null;
556+
}
557+
});
558+
} catch (NoSuchMethodException ignored) {}
559+
}
543560
//FireworkExplodeEvent
544561
EventValues.registerEventValue(FireworkExplodeEvent.class, Firework.class, FireworkExplodeEvent::getEntity);
545562
EventValues.registerEventValue(FireworkExplodeEvent.class, FireworkEffect.class, event -> {

src/main/java/ch/njol/skript/events/SimpleEvents.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public class SimpleEvents {
205205
"on disconnect:")
206206
.since("1.0 (simple disconnection)");
207207
Skript.registerEvent("Respawn", SimpleEvent.class, PlayerRespawnEvent.class, "[player] respawn[ing]")
208-
.description("Called when a player respawns. You should prefer this event over the <a href='#death'>death event</a> as the player is technically alive when this event is called.")
208+
.description("Called when a player respawns via death or entering the end portal in the end. You should prefer this event over the <a href='#death'>death event</a> as the player is technically alive when this event is called.")
209209
.examples("on respawn:")
210210
.since("1.0");
211211
Skript.registerEvent("Sneak Toggle", SimpleEvent.class, PlayerToggleSneakEvent.class, "[player] toggl(e|ing) sneak", "[player] sneak toggl(e|ing)")
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package ch.njol.skript.expressions;
2+
3+
import org.bukkit.event.player.PlayerRespawnEvent.RespawnReason;
4+
5+
import ch.njol.skript.doc.Description;
6+
import ch.njol.skript.doc.Example;
7+
import ch.njol.skript.doc.Name;
8+
import ch.njol.skript.doc.Since;
9+
import ch.njol.skript.expressions.base.EventValueExpression;
10+
11+
@Name("Respawn Reason")
12+
@Description("The <a href='#respawnreason'>respawn reason</a> in a <a href='#respawn'>respawn</a> event.")
13+
@Example("""
14+
on respawn:
15+
if respawn reason is end portal:
16+
broadcast "%player% took the end portal to the overworld!"
17+
""")
18+
@Since("INSERT VERSION")
19+
public class ExprRespawnReason extends EventValueExpression<RespawnReason> {
20+
21+
static {
22+
register(ExprRespawnReason.class, RespawnReason.class, "respawn[ing] reason");
23+
}
24+
25+
public ExprRespawnReason() {
26+
super(RespawnReason.class);
27+
}
28+
29+
}

src/main/resources/lang/default.lang

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2559,6 +2559,12 @@ spawn reasons:
25592559
rehydration: rehydration, rehydrated
25602560
build_coppergolem: build copper golem, built copper golem
25612561

2562+
# -- Respawn Reasons --
2563+
respawn reasons:
2564+
death: death
2565+
end_portal: end portal
2566+
plugin: plugin
2567+
25622568
# -- Difficulties --
25632569
difficulties:
25642570
easy: easy
@@ -3124,6 +3130,7 @@ types:
31243130
inventorytype: inventory type¦s @an
31253131
metadataholder: metadata holder¦s @a
31263132
spawnreason: spawn reason¦s @a
3133+
respawnreason: respawn reason¦s @a
31273134
cachedservericon: server icon¦s @a
31283135
difficulty: difficult¦y¦ies @a
31293136
fireworkeffect: firework effect¦s @a

0 commit comments

Comments
 (0)