Skip to content

Commit b594358

Browse files
authored
Fix VanishStatusChangeEvent NPE and document parameter inversion (#6510)
The affected/controller parameters are swapped in Commandvanish (#2604) but cannot be fixed without breaking the public API. Fix BukkitListener to use getController() (the actual vanished player) instead of getAffected() (the sender, null for console), and add inversion warning javadoc matching the NickChangeEvent pattern. Fixes #6388
1 parent e9f3677 commit b594358

2 files changed

Lines changed: 11 additions & 3 deletions

File tree

Essentials/src/main/java/net/ess3/api/events/VanishStatusChangeEvent.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88
* <p>
99
* For other cases where the player's vanish status changes, you should listen on PlayerJoinEvent and
1010
* check with {@link IUser#isVanished()}.
11+
*
12+
* <b>WARNING: The values of {@link #getAffected()} and {@link #getController()} are inverted due to
13+
* a long-standing parameter swap. {@link #getAffected()} returns the command sender (null for console),
14+
* and {@link #getController()} returns the player whose vanish status changed.</b>
15+
*
16+
* @see <a href="https://github.com/EssentialsX/Essentials/issues/2604">#2604</a>
1117
*/
1218
public class VanishStatusChangeEvent extends StatusChangeEvent {
1319
private static final HandlerList handlers = new HandlerList();

EssentialsDiscord/src/main/java/net/essentialsx/discord/listeners/BukkitListener.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,16 @@ public boolean isSilentJoinQuit(final IUser user, final String type) {
126126

127127
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
128128
public void onVanishStatusChange(VanishStatusChangeEvent event) {
129-
if (!jda.getSettings().isVanishFakeJoinLeave() || event.getAffected().isLeavingHidden()) {
129+
// Note: getController() returns the vanished player due to a long-standing parameter swap in Commandvanish.
130+
final IUser vanished = event.getController();
131+
if (vanished == null || !jda.getSettings().isVanishFakeJoinLeave() || vanished.isLeavingHidden()) {
130132
return;
131133
}
132134
if (event.getValue()) {
133-
sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " left the game", MessageType.DefaultTypes.LEAVE);
135+
sendJoinQuitMessage(vanished.getBase(), ChatColor.YELLOW + vanished.getName() + " left the game", MessageType.DefaultTypes.LEAVE);
134136
return;
135137
}
136-
sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " joined the game", MessageType.DefaultTypes.JOIN);
138+
sendJoinQuitMessage(vanished.getBase(), ChatColor.YELLOW + vanished.getName() + " joined the game", MessageType.DefaultTypes.JOIN);
137139
}
138140

139141
public void sendJoinQuitMessage(final Player player, final String message, MessageType type) {

0 commit comments

Comments
 (0)