From cad9362b1ad969e7ca20f49a023378f995b07775 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Mon, 17 Aug 2026 21:03:53 +0200 Subject: [PATCH 1/2] Add opponent placeholder to combat tag chat message --- .../combat/fight/event/FightTagEvent.java | 23 +++++++++++++++++++ .../implementation/MessagesSettings.java | 6 +++-- .../combat/fight/FightManagerImpl.java | 2 +- .../controller/FightMessageController.java | 13 +++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/FightTagEvent.java b/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/FightTagEvent.java index 0871c195..2b2ac9d1 100644 --- a/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/FightTagEvent.java +++ b/eternalcombat-api/src/main/java/com/eternalcode/combat/fight/event/FightTagEvent.java @@ -5,7 +5,9 @@ import org.bukkit.event.HandlerList; import java.util.UUID; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * This event is triggered when a player is tagged in a fight. @@ -15,14 +17,25 @@ public class FightTagEvent extends Event implements Cancellable { private static final HandlerList HANDLER_LIST = new HandlerList(); private final UUID player; private final CauseOfTag cause; + private final UUID tagger; private boolean cancelled = false; private CancelTagReason cancelReason; + /** + * @deprecated use {@link #FightTagEvent(UUID, CauseOfTag, UUID)} instead, which also carries the tagger. + */ + @Deprecated + @ApiStatus.ScheduledForRemoval public FightTagEvent(UUID player, CauseOfTag cause) { + this(player, cause, null); + } + + public FightTagEvent(UUID player, CauseOfTag cause, @Nullable UUID tagger) { super(false); this.player = player; this.cause = cause; + this.tagger = tagger; } /** @@ -43,6 +56,16 @@ public CauseOfTag getCause() { return this.cause; } + /** + * Gets the UUID of the player who caused this tag, if any. + * + * @return The UUID of the tagger, or {@code null} if the tag was not caused by another player. + */ + @Nullable + public UUID getTagger() { + return this.tagger; + } + @Override public boolean isCancelled() { return this.cancelled; diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/config/implementation/MessagesSettings.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/config/implementation/MessagesSettings.java index 62ddefc2..0f8f75b6 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/config/implementation/MessagesSettings.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/config/implementation/MessagesSettings.java @@ -50,10 +50,12 @@ public class MessagesSettings extends OkaeriConfig { @Comment({ "# Message displayed when a player enters combat.", - "# This message warns the player not to leave the server while in combat." + "# This message warns the player not to leave the server while in combat.", + "# The {OPPONENT} placeholder is replaced with the name of the player who caused the tag,", + "# or the 'unknownPlayerPlaceholder' variable if the tag was not caused by a player." }) public Notice playerTagged = Notice.chat( - "You are in combat! Do not leave the server!"); + "You are in combat with {OPPONENT}! Do not leave the server!"); @Comment({ "# Message displayed when a player leaves combat.", diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightManagerImpl.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightManagerImpl.java index a7cdb65f..a7eac2b9 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightManagerImpl.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/FightManagerImpl.java @@ -55,7 +55,7 @@ public FightTagEvent tag(UUID target, Duration delay, CauseOfTag causeOfTag) { @ApiStatus.Experimental @Override public FightTagEvent tag(UUID target, Duration delay, CauseOfTag causeOfTag, @Nullable UUID tagger) { - FightTagEvent event = this.eventManager.publishEvent(new FightTagEvent(target, causeOfTag)); + FightTagEvent event = this.eventManager.publishEvent(new FightTagEvent(target, causeOfTag, tagger)); if (event.isCancelled()) { return event; diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightMessageController.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightMessageController.java index 5c22d8be..fc51a798 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightMessageController.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/fight/controller/FightMessageController.java @@ -5,6 +5,8 @@ import com.eternalcode.combat.fight.event.FightTagEvent; import com.eternalcode.combat.fight.event.FightUntagEvent; import com.eternalcode.combat.notification.NoticeService; +import java.util.Optional; +import java.util.UUID; import org.bukkit.Server; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -37,12 +39,23 @@ void onTag(FightTagEvent event) { return; } + String opponent = this.resolveOpponentName(event.getTagger(), player.getUniqueId()); + this.noticeService.create() .player(player.getUniqueId()) .notice(this.config.messagesSettings.playerTagged) + .placeholder("{OPPONENT}", opponent) .send(); } + private String resolveOpponentName(UUID tagger, UUID taggedPlayer) { + return Optional.ofNullable(tagger) + .filter(uuid -> !uuid.equals(taggedPlayer)) + .map(this.server::getPlayer) + .map(Player::getName) + .orElse(this.config.messagesSettings.unknownPlayerPlaceholder); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) void onUnTag(FightUntagEvent event) { Player player = this.server.getPlayer(event.getPlayer()); From 17376ae62d5ea211cd939a7c2e98271d7066ee47 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Mon, 17 Aug 2026 21:35:10 +0200 Subject: [PATCH 2/2] Pass opponent UUID when tagging for combat --- .../eternalcode/combat/crystalpvp/CrystalPvpConstants.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/crystalpvp/CrystalPvpConstants.java b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/crystalpvp/CrystalPvpConstants.java index b60ea813..ffc43743 100644 --- a/eternalcombat-plugin/src/main/java/com/eternalcode/combat/crystalpvp/CrystalPvpConstants.java +++ b/eternalcombat-plugin/src/main/java/com/eternalcode/combat/crystalpvp/CrystalPvpConstants.java @@ -66,12 +66,14 @@ static void handleCombatTag( fightManager.tag( damagerUniqueId, pluginConfig.settings.combatTimerDuration, - CauseOfTag.CRYSTAL + CauseOfTag.CRYSTAL, + victimUniqueId ); fightManager.tag( victimUniqueId, pluginConfig.settings.combatTimerDuration, - CauseOfTag.CRYSTAL + CauseOfTag.CRYSTAL, + damagerUniqueId ); } }