Don't forward advancements if the gamerule is disabled

This commit is contained in:
Vankka 2025-01-09 23:42:28 +02:00
parent 5688e2ca62
commit ce561416e8
No known key found for this signature in database
GPG Key ID: 62E48025ED4E7EBB
3 changed files with 30 additions and 6 deletions

View File

@ -74,6 +74,12 @@ public class BukkitLegacyAdvancementListener extends AbstractBukkitListener<Play
return;
}
String gameRuleValue = event.getPlayer().getWorld().getGameRuleValue("announceAdvancements");
if ("false".equals(gameRuleValue)) {
logger().trace("Skipping forwarding advancement, disabled by gamerule");
return;
}
try {
ReturnData data = nms.getData(event.getAdvancement());
if (data == null) {
@ -82,7 +88,7 @@ public class BukkitLegacyAdvancementListener extends AbstractBukkitListener<Play
MinecraftComponent title = MinecraftComponent.fromJson(data.titleJson);
IPlayer srvPlayer = discordSRV.playerProvider().player(event.getPlayer());
discordSRV.scheduler().run(() -> discordSRV.eventBus().publish(
discordSRV.eventBus().publish(
new AwardMessageReceiveEvent(
event,
srvPlayer,
@ -91,7 +97,7 @@ public class BukkitLegacyAdvancementListener extends AbstractBukkitListener<Play
null,
false
)
));
);
} catch (ReflectiveOperationException e) {
logger().debug("Failed to get advancement data", e);
}

View File

@ -26,12 +26,15 @@ import com.discordsrv.bukkit.debug.EventObserver;
import com.discordsrv.common.abstraction.player.IPlayer;
import com.discordsrv.common.core.logging.NamedLogger;
import io.papermc.paper.advancement.AdvancementDisplay;
import org.bukkit.GameRule;
import org.bukkit.advancement.Advancement;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
import org.jetbrains.annotations.ApiStatus;
import java.util.Objects;
@ApiStatus.AvailableSince("Paper 1.17.1")
public class PaperAdvancementListener extends AbstractBukkitListener<PlayerAdvancementDoneEvent> {
@ -51,6 +54,12 @@ public class PaperAdvancementListener extends AbstractBukkitListener<PlayerAdvan
@Override
protected void handleEvent(PlayerAdvancementDoneEvent event, Void __) {
Boolean gameRuleValue = event.getPlayer().getWorld().getGameRuleValue(GameRule.ANNOUNCE_ADVANCEMENTS);
if (Objects.equals(gameRuleValue, false)) {
logger().trace("Skipping displaying advancement, disabled by gamerule");
return;
}
Advancement advancement = event.getAdvancement();
AdvancementDisplay display = advancement.getDisplay();
if (display == null || !display.doesAnnounceToChat()) {
@ -63,7 +72,7 @@ public class PaperAdvancementListener extends AbstractBukkitListener<PlayerAdvan
MinecraftComponent displayName = ADVANCEMENT_DISPLAY_NAME_HANDLE.getAPI(advancement);
IPlayer player = discordSRV.playerProvider().player(event.getPlayer());
discordSRV.scheduler().run(() -> discordSRV.eventBus().publish(
discordSRV.eventBus().publish(
new AwardMessageReceiveEvent(
event,
player,
@ -72,7 +81,7 @@ public class PaperAdvancementListener extends AbstractBukkitListener<PlayerAdvan
null,
message == null
)
));
);
}
private EventObserver<PlayerAdvancementDoneEvent, Boolean> observer;

View File

@ -25,6 +25,7 @@ import com.discordsrv.common.abstraction.player.IPlayer;
import com.discordsrv.common.core.logging.NamedLogger;
import com.discordsrv.common.util.ComponentUtil;
import net.kyori.adventure.platform.bukkit.BukkitComponentSerializer;
import org.bukkit.GameRule;
import org.bukkit.advancement.Advancement;
import org.bukkit.advancement.AdvancementDisplay;
import org.bukkit.event.EventHandler;
@ -32,6 +33,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerAdvancementDoneEvent;
import org.jetbrains.annotations.ApiStatus;
import java.util.Objects;
@ApiStatus.AvailableSince("Spigot 1.19")
public class SpigotAdvancementListener extends AbstractBukkitListener<PlayerAdvancementDoneEvent> {
@ -46,6 +49,12 @@ public class SpigotAdvancementListener extends AbstractBukkitListener<PlayerAdva
@Override
protected void handleEvent(PlayerAdvancementDoneEvent event, Void __) {
Boolean gameRuleValue = event.getPlayer().getWorld().getGameRuleValue(GameRule.ANNOUNCE_ADVANCEMENTS);
if (Objects.equals(gameRuleValue, false)) {
logger().trace("Skipping forwarding advancement, disabled by gamerule");
return;
}
Advancement advancement = event.getAdvancement();
AdvancementDisplay display = advancement.getDisplay();
if (display == null || !display.shouldAnnounceChat()) {
@ -56,7 +65,7 @@ public class SpigotAdvancementListener extends AbstractBukkitListener<PlayerAdva
MinecraftComponent title = ComponentUtil.toAPI(BukkitComponentSerializer.legacy().deserialize(display.getTitle())) ;
IPlayer srvPlayer = discordSRV.playerProvider().player(event.getPlayer());
discordSRV.scheduler().run(() -> discordSRV.eventBus().publish(
discordSRV.eventBus().publish(
new AwardMessageReceiveEvent(
event,
srvPlayer,
@ -65,7 +74,7 @@ public class SpigotAdvancementListener extends AbstractBukkitListener<PlayerAdva
null,
false
)
));
);
}
// Event is not cancellable