Skip to content

Commit 869a5de

Browse files
authored
🛠 Fix keep inv/exp and other bugs related to death event (#5658)
1 parent b722cc3 commit 869a5de

File tree

3 files changed

+19
-15
lines changed

3 files changed

+19
-15
lines changed

src/main/java/ch/njol/skript/effects/EffKeepInventory.java

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package ch.njol.skript.effects;
2020

2121
import org.bukkit.event.Event;
22+
import org.bukkit.event.entity.EntityDeathEvent;
2223
import org.bukkit.event.entity.PlayerDeathEvent;
2324
import org.eclipse.jdt.annotation.Nullable;
2425

@@ -35,17 +36,19 @@
3536

3637
@Name("Keep Inventory / Experience")
3738
@Description("Keeps the inventory or/and experiences of the dead player in a death event.")
38-
@Examples({"on death of a player:",
39+
@Examples({
40+
"on death of a player:",
3941
"\tif the victim is an op:",
40-
"\t\tkeep the inventory and experiences"})
42+
"\t\tkeep the inventory and experiences"
43+
})
4144
@Since("2.4")
4245
@Events("death")
4346
public class EffKeepInventory extends Effect {
4447

4548
static {
4649
Skript.registerEffect(EffKeepInventory.class,
47-
"keep [the] (inventory|items) [(1¦and [e]xp[erience][s] [point[s]])]",
48-
"keep [the] [e]xp[erience][s] [point[s]] [(1¦and (inventory|items))]");
50+
"keep [the] (inventory|items) [(1:and [e]xp[erience][s] [point[s]])]",
51+
"keep [the] [e]xp[erience][s] [point[s]] [(1:and (inventory|items))]");
4952
}
5053

5154
private boolean keepItems, keepExp;
@@ -54,7 +57,7 @@ public class EffKeepInventory extends Effect {
5457
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
5558
keepItems = matchedPattern == 0 || parseResult.mark == 1;
5659
keepExp = matchedPattern == 1 || parseResult.mark == 1;
57-
if (!getParser().isCurrentEvent(PlayerDeathEvent.class)) {
60+
if (!getParser().isCurrentEvent(EntityDeathEvent.class)) {
5861
Skript.error("The keep inventory/experience effect can't be used outside of a death event");
5962
return false;
6063
}
@@ -66,18 +69,18 @@ public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelaye
6669
}
6770

6871
@Override
69-
protected void execute(Event e) {
70-
if (e instanceof PlayerDeathEvent) {
71-
PlayerDeathEvent event = (PlayerDeathEvent) e;
72+
protected void execute(Event event) {
73+
if (event instanceof PlayerDeathEvent) {
74+
PlayerDeathEvent deathEvent = (PlayerDeathEvent) event;
7275
if (keepItems)
73-
event.setKeepInventory(true);
76+
deathEvent.setKeepInventory(true);
7477
if (keepExp)
75-
event.setKeepLevel(true);
78+
deathEvent.setKeepLevel(true);
7679
}
7780
}
7881

7982
@Override
80-
public String toString(@Nullable Event e, boolean debug) {
83+
public String toString(@Nullable Event event, boolean debug) {
8184
if (keepItems && !keepExp)
8285
return "keep the inventory";
8386
else

src/main/java/ch/njol/skript/effects/EffRespawn.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
import org.bukkit.entity.Player;
2222
import org.bukkit.event.Event;
23-
import org.bukkit.event.entity.PlayerDeathEvent;
23+
import org.bukkit.event.entity.EntityDeathEvent;
2424
import org.bukkit.event.player.PlayerRespawnEvent;
2525
import org.bukkit.scheduler.BukkitRunnable;
2626
import org.eclipse.jdt.annotation.Nullable;
@@ -62,7 +62,7 @@ public boolean init(final Expression<?>[] exprs, final int matchedPattern, final
6262
players = (Expression<Player>) exprs[0];
6363
// Force a delay before respawning the player if we're in the death event and there isn't already a delay
6464
// Unexpected behavior may occur if we don't do this
65-
forceDelay = getParser().isCurrentEvent(PlayerDeathEvent.class) && isDelayed.isFalse();
65+
forceDelay = getParser().isCurrentEvent(EntityDeathEvent.class) && isDelayed.isFalse();
6666
return true;
6767
}
6868

src/main/java/ch/njol/skript/expressions/ExprLevel.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import org.bukkit.entity.Player;
2222
import org.bukkit.event.Event;
23+
import org.bukkit.event.entity.EntityDeathEvent;
2324
import org.bukkit.event.entity.PlayerDeathEvent;
2425
import org.bukkit.event.player.PlayerLevelChangeEvent;
2526
import org.bukkit.event.player.PlayerRespawnEvent;
@@ -80,11 +81,11 @@ public Class<?>[] acceptChange(final ChangeMode mode) {
8081
Skript.error("Cannot change a player's level in a respawn event. Add a delay of 1 tick or change the 'new level' in a death event.");
8182
return null;
8283
}
83-
if (getParser().isCurrentEvent(PlayerDeathEvent.class) && getTime() == 0 && getExpr().isDefault() && !getParser().getHasDelayBefore().isTrue()) {
84+
if (getParser().isCurrentEvent(EntityDeathEvent.class) && getTime() == 0 && getExpr().isDefault() && !getParser().getHasDelayBefore().isTrue()) {
8485
Skript.warning("Changing the player's level in a death event will change the player's level before he dies. " +
8586
"Use either 'past level of player' or 'new level of player' to clearly state whether to change the level before or after he dies.");
8687
}
87-
if (getTime() == -1 && !getParser().isCurrentEvent(PlayerDeathEvent.class))
88+
if (getTime() == -1 && !getParser().isCurrentEvent(EntityDeathEvent.class))
8889
return null;
8990
return new Class[] {Number.class};
9091
}

0 commit comments

Comments
 (0)