Skip to content

Commit c3e62c8

Browse files
committed
Add a new event for when an entity's scoreboard tags are changed
This adds a new event, `ScoreboardTagsChangeEvent`, which is called when an entity gets their scoreboard tags changed, through plugins calling `Entity#addScoreboardTag`, `/tag`, `/data`, etc. It is fired before the change happens and can be cancelled. It contains the affected entity, which change it is happening (add, remove or replace), and which tags are part of the change.
1 parent 29c8822 commit c3e62c8

File tree

2 files changed

+88
-1
lines changed

2 files changed

+88
-1
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package io.papermc.paper.event.entity;
2+
3+
import org.bukkit.entity.Entity;
4+
import org.bukkit.event.Cancellable;
5+
import org.bukkit.event.HandlerList;
6+
import org.bukkit.event.entity.EntityEvent;
7+
import org.jetbrains.annotations.ApiStatus;
8+
import org.jspecify.annotations.NullMarked;
9+
import java.util.List;
10+
11+
/**
12+
*
13+
*/
14+
@NullMarked
15+
public class ScoreboardTagsChangeEvent extends EntityEvent implements Cancellable {
16+
17+
private static final HandlerList HANDLER_LIST = new HandlerList();
18+
19+
private boolean cancelled;
20+
21+
private final List<String> tags;
22+
private final Change change;
23+
24+
@ApiStatus.Internal
25+
public ScoreboardTagsChangeEvent(final Entity entity, final List<String> tags, final Change change) {
26+
super(entity);
27+
this.tags = tags;
28+
this.change = change;
29+
}
30+
31+
/**
32+
* @return
33+
*/
34+
public List<String> getTags() {
35+
return this.tags;
36+
}
37+
38+
/**
39+
* @return
40+
*/
41+
public Change getChange() {
42+
return this.change;
43+
}
44+
45+
@Override
46+
public boolean isCancelled() {
47+
return this.cancelled;
48+
}
49+
50+
@Override
51+
public void setCancelled(final boolean cancel) {
52+
this.cancelled = cancel;
53+
}
54+
55+
@Override
56+
public HandlerList getHandlers() {
57+
return HANDLER_LIST;
58+
}
59+
60+
public static HandlerList getHandlerList() {
61+
return HANDLER_LIST;
62+
}
63+
64+
/**
65+
* Represents the possible changes made to the entity's tags.
66+
*/
67+
public enum Change {
68+
/** The tags were added to the entity. */
69+
ADD,
70+
/** The tags were removed from the entity. */
71+
REMOVE,
72+
/** The tags replaced the entity's tags. */
73+
SET,
74+
}
75+
}

paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import io.papermc.paper.connection.HorriblePlayerLoginEventHack;
1919
import io.papermc.paper.connection.PlayerConnection;
2020
import io.papermc.paper.event.connection.PlayerConnectionValidateLoginEvent;
21+
import io.papermc.paper.event.entity.ScoreboardTagsChangeEvent;
2122
import net.minecraft.core.BlockPos;
2223
import net.minecraft.core.Direction;
2324
import net.minecraft.network.Connection;
2425
import net.minecraft.network.chat.Component;
2526
import net.minecraft.network.protocol.game.ServerboundContainerClosePacket;
26-
import net.minecraft.resources.ResourceLocation;
2727
import net.minecraft.server.MinecraftServer;
2828
import net.minecraft.server.level.ServerLevel;
2929
import net.minecraft.server.level.ServerPlayer;
@@ -2115,4 +2115,16 @@ public static Component handleLoginResult(PlayerList.LoginResult result, PlayerC
21152115

21162116
return disconnectReason;
21172117
}
2118+
2119+
// Paper start - add ScoreboardTagsChangeEvent
2120+
public static ScoreboardTagsChangeEvent callScoreboardTagsChangeEvent(Entity entity, List<String> tags, ScoreboardTagsChangeEvent.Change change) {
2121+
final var event = new ScoreboardTagsChangeEvent(entity.getBukkitEntity(), tags, change);
2122+
Bukkit.getPluginManager().callEvent(event);
2123+
return event;
2124+
}
2125+
2126+
public static ScoreboardTagsChangeEvent callScoreboardTagsChangeEvent(Entity entity, String tag, ScoreboardTagsChangeEvent.Change change) {
2127+
return callScoreboardTagsChangeEvent(entity, List.of(tag), change);
2128+
}
2129+
// Paper end - add ScoreboardTagsChangeEvent
21182130
}

0 commit comments

Comments
 (0)