From 1ab44055eac8380e6bb992d3bc7eadf460f9c287 Mon Sep 17 00:00:00 2001 From: Martin Sulikowski Date: Wed, 16 Apr 2025 21:24:55 +0200 Subject: [PATCH] GH-930 Add private chat toggle placeholder. --- .../PrivateChatPlaceholderSetup.java | 62 +++++++++++++++++++ .../messages/ENPrivateMessages.java | 3 + .../messages/PLPrivateChatMessages.java | 3 + .../messages/PrivateChatMessages.java | 4 ++ .../placeholder/AsyncPlaceholderValue.java | 29 +++++++++ 5 files changed, 101 insertions(+) create mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/PrivateChatPlaceholderSetup.java create mode 100644 eternalcore-core/src/main/java/com/eternalcode/core/placeholder/AsyncPlaceholderValue.java diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/PrivateChatPlaceholderSetup.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/PrivateChatPlaceholderSetup.java new file mode 100644 index 000000000..5d2df27d3 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/PrivateChatPlaceholderSetup.java @@ -0,0 +1,62 @@ +package com.eternalcode.core.feature.privatechat; + +import com.eternalcode.core.feature.privatechat.toggle.PrivateChatState; +import com.eternalcode.core.feature.privatechat.toggle.PrivateChatStateService; +import com.eternalcode.core.injector.annotations.Inject; +import com.eternalcode.core.injector.annotations.component.Controller; +import com.eternalcode.core.placeholder.AsyncPlaceholderValue; +import com.eternalcode.core.placeholder.PlaceholderRegistry; +import com.eternalcode.core.placeholder.PlaceholderReplacer; +import com.eternalcode.core.publish.Subscribe; +import com.eternalcode.core.publish.event.EternalInitializeEvent; +import com.eternalcode.core.translation.Translation; +import com.eternalcode.core.translation.TranslationManager; + +import java.util.concurrent.CompletableFuture; +import java.util.UUID; + +@Controller +public class PrivateChatPlaceholderSetup { + + private final PrivateChatStateService privateChatStateService; + private final TranslationManager translationManager; + + @Inject + public PrivateChatPlaceholderSetup( + PrivateChatStateService privateChatStateService, + TranslationManager translationManager + ) { + this.privateChatStateService = privateChatStateService; + this.translationManager = translationManager; + } + + @Subscribe(EternalInitializeEvent.class) + void setUp(PlaceholderRegistry placeholderRegistry) { + placeholderRegistry.registerPlaceholder( + PlaceholderReplacer.of("eternalcore_msgtoggle", (text, targetPlayer) -> { + UUID playerId = targetPlayer.getUniqueId(); + CompletableFuture stateFuture = this.privateChatStateService.getChatState(playerId); + + return new AsyncPlaceholderValue<>( + stateFuture, + state -> state == PrivateChatState.ENABLE ? "true" : "false" + ).toString(); + }) + ); + + placeholderRegistry.registerPlaceholder( + PlaceholderReplacer.of("eternalcore_msgtoggle_formatted", (text, targetPlayer) -> { + UUID playerId = targetPlayer.getUniqueId(); + Translation messages = this.translationManager.getMessages(playerId); + CompletableFuture stateFuture = this.privateChatStateService.getChatState(playerId); + + return new AsyncPlaceholderValue<>( + stateFuture, + state -> state == PrivateChatState.ENABLE + ? messages.privateChat().privateMessageEnabledPlaceholder() + : messages.privateChat().privateMessageDisabledPlaceholder() + ).toString(); + }) + ); + } +} diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/ENPrivateMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/ENPrivateMessages.java index af806b828..273c145c4 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/ENPrivateMessages.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/ENPrivateMessages.java @@ -57,4 +57,7 @@ public class ENPrivateMessages implements PrivateChatMessages { @Description({" ", "# {PLAYER} - Ignored player"}) public Notice notIgnorePlayer = Notice.chat("You don't ignore this player, so you can unignore him!"); + + public String privateMessageEnabledPlaceholder = "Enabled"; + public String privateMessageDisabledPlaceholder = "Disabled"; } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PLPrivateChatMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PLPrivateChatMessages.java index 80f5b24b6..de9067ff2 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PLPrivateChatMessages.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PLPrivateChatMessages.java @@ -58,4 +58,7 @@ public class PLPrivateChatMessages implements PrivateChatMessages { @Description({" ", "# {PLAYER} - Gracz który jest zignorowany"}) public Notice notIgnorePlayer = Notice.chat( "Gracz {PLAYER} nie jest przez Ciebie zignorowany. Nie możesz go od ignorować!"); + + public String privateMessageEnabledPlaceholder = "Włączone"; + public String privateMessageDisabledPlaceholder = "Wyłączone"; } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PrivateChatMessages.java b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PrivateChatMessages.java index 87af6faf8..c62502935 100644 --- a/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PrivateChatMessages.java +++ b/eternalcore-core/src/main/java/com/eternalcode/core/feature/privatechat/messages/PrivateChatMessages.java @@ -25,4 +25,8 @@ public interface PrivateChatMessages { Notice notIgnorePlayer(); Notice cantIgnoreYourself(); Notice cantUnIgnoreYourself(); + + String privateMessageEnabledPlaceholder(); + + String privateMessageDisabledPlaceholder(); } diff --git a/eternalcore-core/src/main/java/com/eternalcode/core/placeholder/AsyncPlaceholderValue.java b/eternalcore-core/src/main/java/com/eternalcode/core/placeholder/AsyncPlaceholderValue.java new file mode 100644 index 000000000..f4a4c28b6 --- /dev/null +++ b/eternalcore-core/src/main/java/com/eternalcode/core/placeholder/AsyncPlaceholderValue.java @@ -0,0 +1,29 @@ +package com.eternalcode.core.placeholder; + +import java.util.concurrent.CompletableFuture; +import java.util.function.Function; + +public class AsyncPlaceholderValue { + private final CompletableFuture future; + private final Function formatter; + + public AsyncPlaceholderValue(CompletableFuture future, Function formatter) { + this.future = future; + this.formatter = formatter; + } + + @Override + public String toString() { + if (!future.isDone()) { + return "Loading..."; + } + + try { + T value = future.getNow(null); + return value != null ? formatter.apply(value) : "Unknown"; + } + catch (Exception e) { + return "Error: " + e.getMessage(); + } + } +}