From b1d5ae7c0990ab61678e381f809c3d1779977610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jozef=20Steinh=C3=BCbl?= Date: Mon, 30 Oct 2023 16:08:31 +0100 Subject: [PATCH] feat(pay): send message to target (#6) * feat(pay): send message for target * fix: set audience on enable --- api/build.gradle.kts | 6 ++++++ .../dev/xhyrom/lighteco/api/model/user/User.java | 9 +++++++++ .../lighteco/bukkit/BukkitLightEcoBootstrap.java | 10 ++++++++++ .../xhyrom/lighteco/common/api/impl/ApiUser.java | 6 ++++++ .../config/message/CurrencyMessageConfig.java | 2 ++ .../manager/command/AbstractCommandManager.java | 15 +++++++++++++++ .../xhyrom/lighteco/common/model/user/User.java | 5 +++++ .../plugin/bootstrap/LightEcoBootstrap.java | 2 ++ .../lighteco/sponge/SpongeLightEcoBootstrap.java | 6 ++++++ 9 files changed, 61 insertions(+) diff --git a/api/build.gradle.kts b/api/build.gradle.kts index 5c0dfcb..23c986e 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -3,6 +3,12 @@ plugins { } dependencies { + api("net.kyori:adventure-api:4.12.0") { + exclude(module = "adventure-bom") + exclude(module = "checker-qual") + exclude(module = "annotations") + } + compileOnly("org.projectlombok:lombok:1.18.28") annotationProcessor("org.projectlombok:lombok:1.18.28") diff --git a/api/src/main/java/dev/xhyrom/lighteco/api/model/user/User.java b/api/src/main/java/dev/xhyrom/lighteco/api/model/user/User.java index 715dada..5bf88fe 100644 --- a/api/src/main/java/dev/xhyrom/lighteco/api/model/user/User.java +++ b/api/src/main/java/dev/xhyrom/lighteco/api/model/user/User.java @@ -1,6 +1,7 @@ package dev.xhyrom.lighteco.api.model.user; import dev.xhyrom.lighteco.api.model.currency.Currency; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -59,4 +60,12 @@ public interface User { * @throws IllegalArgumentException if the amount is negative */ void withdraw(@NonNull Currency currency, @NonNull BigDecimal amount) throws IllegalArgumentException; + + /** + * Send a message to this user. + * Message will be silently dropped if the user is offline. + * + * @param message the message + */ + void sendMessage(Component message); } diff --git a/bukkit/src/main/java/dev/xhyrom/lighteco/bukkit/BukkitLightEcoBootstrap.java b/bukkit/src/main/java/dev/xhyrom/lighteco/bukkit/BukkitLightEcoBootstrap.java index eafc476..a94bf72 100644 --- a/bukkit/src/main/java/dev/xhyrom/lighteco/bukkit/BukkitLightEcoBootstrap.java +++ b/bukkit/src/main/java/dev/xhyrom/lighteco/bukkit/BukkitLightEcoBootstrap.java @@ -8,6 +8,8 @@ import dev.xhyrom.lighteco.common.plugin.bootstrap.LoaderBootstrap; import dev.xhyrom.lighteco.common.plugin.logger.PluginLogger; import dev.xhyrom.lighteco.common.plugin.scheduler.SchedulerAdapter; import lombok.Getter; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.platform.bukkit.BukkitAudiences; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -27,6 +29,7 @@ public class BukkitLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstr private final PluginLogger logger; @Getter private final SchedulerAdapter scheduler; + private BukkitAudiences audience; public BukkitLightEcoBootstrap(JavaPlugin loader) { this.loader = loader; @@ -46,6 +49,8 @@ public class BukkitLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstr public void onEnable() { CommandAPI.onEnable(); this.plugin.enable(); + + this.audience = BukkitAudiences.create(loader); } @Override @@ -76,4 +81,9 @@ public class BukkitLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstr public InputStream getResourceStream(String filename) { return this.loader.getResource(filename); } + + @Override + public Audience getPlayerAudience(UUID uniqueId) { + return audience.player(uniqueId); + } } diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/api/impl/ApiUser.java b/common/src/main/java/dev/xhyrom/lighteco/common/api/impl/ApiUser.java index afc0f5c..a3d01d4 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/api/impl/ApiUser.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/api/impl/ApiUser.java @@ -2,6 +2,7 @@ package dev.xhyrom.lighteco.common.api.impl; import dev.xhyrom.lighteco.api.model.currency.Currency; import dev.xhyrom.lighteco.api.model.user.User; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -60,4 +61,9 @@ public class ApiUser implements User { this.handler.withdraw(internal, amount); } + + @Override + public void sendMessage(Component message) { + this.handler.sendMessage(message); + } } diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/config/message/CurrencyMessageConfig.java b/common/src/main/java/dev/xhyrom/lighteco/common/config/message/CurrencyMessageConfig.java index 7d6d645..00380ce 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/config/message/CurrencyMessageConfig.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/config/message/CurrencyMessageConfig.java @@ -14,6 +14,8 @@ public class CurrencyMessageConfig extends OkaeriConfig { public String pay = " | Paid to "; public String payWithTax = " | Paid to ( after tax)"; + public String payReceived = " | Received from "; + public String payReceivedWithTax = " | Received from ( after tax)"; public String wait = "Please wait a moment before using this command again."; public String notEnoughMoney = "You don't have enough money!"; diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/manager/command/AbstractCommandManager.java b/common/src/main/java/dev/xhyrom/lighteco/common/manager/command/AbstractCommandManager.java index 5853b0a..dec658f 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/manager/command/AbstractCommandManager.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/manager/command/AbstractCommandManager.java @@ -242,6 +242,9 @@ public abstract class AbstractCommandManager implements CommandManager { ? this.getConfig(currency).payWithTax : this.getConfig(currency).pay; + String templateReceived = tax.compareTo(BigDecimal.ZERO) > 0 + ? this.getConfig(currency).payReceivedWithTax + : this.getConfig(currency).payReceived; sender.sendMessage( miniMessage.deserialize( @@ -255,6 +258,18 @@ public abstract class AbstractCommandManager implements CommandManager { ) ); + target.sendMessage( + miniMessage.deserialize( + templateReceived, + Placeholder.parsed("currency", currency.getIdentifier()), + Placeholder.parsed("sender", user.getUsername()), + Placeholder.parsed("amount", amount.toPlainString()), + Placeholder.parsed("taxed_amount", taxedAmount.toPlainString()), + Placeholder.parsed("sender_balance", user.getBalance(currency).toPlainString()), + Placeholder.parsed("receiver_balance", target.getBalance(currency).toPlainString()) + ) + ); + removeFromMustWait(target.getUniqueId(), sender.getUniqueId()); } } diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/model/user/User.java b/common/src/main/java/dev/xhyrom/lighteco/common/model/user/User.java index 4280c2d..83069dc 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/model/user/User.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/model/user/User.java @@ -8,6 +8,7 @@ import dev.xhyrom.lighteco.common.model.currency.Currency; import dev.xhyrom.lighteco.common.plugin.LightEcoPlugin; import lombok.Getter; import lombok.Setter; +import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.NonNull; import java.math.BigDecimal; @@ -96,4 +97,8 @@ public class User { this.setBalance(currency, this.getBalance(currency).subtract(amount)); } + + public void sendMessage(@NonNull Component message) { + this.plugin.getBootstrap().getPlayerAudience(this.getUniqueId()).sendMessage(message); + } } diff --git a/common/src/main/java/dev/xhyrom/lighteco/common/plugin/bootstrap/LightEcoBootstrap.java b/common/src/main/java/dev/xhyrom/lighteco/common/plugin/bootstrap/LightEcoBootstrap.java index ac16413..07b053a 100644 --- a/common/src/main/java/dev/xhyrom/lighteco/common/plugin/bootstrap/LightEcoBootstrap.java +++ b/common/src/main/java/dev/xhyrom/lighteco/common/plugin/bootstrap/LightEcoBootstrap.java @@ -2,6 +2,7 @@ package dev.xhyrom.lighteco.common.plugin.bootstrap; import dev.xhyrom.lighteco.common.plugin.logger.PluginLogger; import dev.xhyrom.lighteco.common.plugin.scheduler.SchedulerAdapter; +import net.kyori.adventure.audience.Audience; import java.io.InputStream; import java.nio.file.Path; @@ -16,4 +17,5 @@ public interface LightEcoBootstrap { boolean isPlayerOnline(UUID uniqueId); List getOnlinePlayers(); InputStream getResourceStream(String filename); + Audience getPlayerAudience(UUID uniqueId); } diff --git a/sponge-8/src/main/java/dev/xhyrom/lighteco/sponge/SpongeLightEcoBootstrap.java b/sponge-8/src/main/java/dev/xhyrom/lighteco/sponge/SpongeLightEcoBootstrap.java index 469ab9f..ab281f0 100644 --- a/sponge-8/src/main/java/dev/xhyrom/lighteco/sponge/SpongeLightEcoBootstrap.java +++ b/sponge-8/src/main/java/dev/xhyrom/lighteco/sponge/SpongeLightEcoBootstrap.java @@ -5,6 +5,7 @@ import dev.xhyrom.lighteco.common.plugin.bootstrap.LightEcoBootstrap; import dev.xhyrom.lighteco.common.plugin.bootstrap.LoaderBootstrap; import dev.xhyrom.lighteco.common.plugin.logger.PluginLogger; import dev.xhyrom.lighteco.common.plugin.scheduler.SchedulerAdapter; +import net.kyori.adventure.audience.Audience; import org.apache.logging.log4j.Logger; import org.spongepowered.plugin.builtin.jvm.Plugin; @@ -73,4 +74,9 @@ public class SpongeLightEcoBootstrap implements LightEcoBootstrap, LoaderBootstr public InputStream getResourceStream(String filename) { return null; } + + @Override + public Audience getPlayerAudience(UUID uniqueId) { + return null; + } }