From 02f59b99f0357b8f69e5e73521d99c1eb571646c Mon Sep 17 00:00:00 2001 From: carm Date: Fri, 16 Dec 2022 04:31:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(msg):=20=E6=B7=BB=E5=8A=A0=20sendToEach=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/pom.xml | 2 +- .../common/value/BaseMessage.java | 127 ++++++++++++++++++ .../common/value/ConfigMessage.java | 43 +++--- .../common/value/ConfigMessageList.java | 43 +++--- platform/bukkit/base/pom.xml | 2 +- .../bukkit/value/ConfiguredMessage.java | 16 ++- .../bukkit/value/ConfiguredMessageList.java | 17 ++- platform/bukkit/general/pom.xml | 2 +- platform/bukkit/pom.xml | 2 +- platform/bungee/pom.xml | 2 +- .../bungee/value/ConfiguredMessage.java | 13 +- .../bungee/value/ConfiguredMessageList.java | 12 +- platform/spigot/pom.xml | 2 +- pom.xml | 2 +- 14 files changed, 205 insertions(+), 80 deletions(-) create mode 100644 common/src/main/java/cc/carm/lib/mineconfiguration/common/value/BaseMessage.java diff --git a/common/pom.xml b/common/pom.xml index d6c4656..616108c 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.2.0 + 2.2.1 4.0.0 diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/BaseMessage.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/BaseMessage.java new file mode 100644 index 0000000..befe3db --- /dev/null +++ b/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/BaseMessage.java @@ -0,0 +1,127 @@ +package cc.carm.lib.mineconfiguration.common.value; + +import cc.carm.lib.mineconfiguration.common.builder.message.MessageValueBuilder; +import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; + +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; +import java.util.function.Predicate; + +public interface BaseMessage { + + /** + * 得到所有的接收者 + * + * @return 全部可能的接收者 + */ + @Unmodifiable + @NotNull Iterable getAllReceivers(); + + /** + * 得到消息中的通过 {@link MessageValueBuilder#params(String...)}已定变量名(按定义顺序) + * + * @return 已定变量 + */ + @NotNull String[] getParams(); + + /** + * 向接收者发送消息的根方法。 + * + * @param receiver 接收者 + * @param message 消息内容 + */ + @ApiStatus.OverrideOnly + void apply(@NotNull R receiver, @NotNull M message); + + /** + * 为某位接收者解析此消息。 + * + * @param sender 接收者 + * @param placeholders 消息中的变量与对应参数 + * @return 解析变量后的消息内容 + */ + @Nullable M parse(@Nullable R sender, @NotNull Map placeholders); + + /** + * 为某位接收者解析此消息。 + * + * @param sender 接收者 + * @param values 已定变量的对应参数 + * @return 解析变量后的消息内容 + */ + default @Nullable M parse(@Nullable R sender, @Nullable Object... values) { + return parse(sender, ParamsUtils.buildParams(getParams(), values)); + } + + /** + * 向某位接收者发送消息 + * + * @param receiver 消息的接收者 + * @param values 已定变量的对应参数 + */ + default void send(@Nullable R receiver, @Nullable Object... values) { + send(receiver, ParamsUtils.buildParams(getParams(), values)); + } + + /** + * 向某位接收者发送消息 + * + * @param receiver 消息的接收者 + * @param placeholders 消息中的变量与对应参数 + */ + default void send(@Nullable R receiver, @NotNull Map placeholders) { + if (receiver == null) return; + M parsed = parse(receiver, placeholders); + if (parsed == null) return; + apply(receiver, parsed); + } + + /** + * 向全部接收者(包括后台)发送不同参数的消息 + * + * @param eachValues 每位接收者将收到已定变量的对应参数(按定义顺序) + */ + default void sendToEach(@NotNull Function<@NotNull R, Object[]> eachValues) { + sendToEach(null, eachValues); + } + + /** + * 向特定接收者发送不同参数的消息 + * + * @param limiter 接收者限定器,为空则不限定接收者。 + * @param eachValues 每位接收者将收到已定变量的对应参数(按定义顺序) + */ + default void sendToEach(@Nullable Predicate limiter, + @NotNull Function<@NotNull R, Object[]> eachValues) { + Predicate predicate = Optional.ofNullable(limiter).orElse(r -> true); + for (R r : getAllReceivers()) { + if (predicate.test(r)) { + send(r, ParamsUtils.buildParams(getParams(), eachValues.apply(r))); + } + } + } + + /** + * 广播此消息(包括后台) + * + * @param values 已定变量的对应参数(按定义顺序) + */ + default void broadcast(@Nullable Object... values) { + broadcast(ParamsUtils.buildParams(getParams(), values)); + } + + /** + * 广播此消息(包括后台) + * + * @param placeholders 消息中的变量与对应参数 + */ + default void broadcast(@NotNull Map placeholders) { + getAllReceivers().forEach(r -> send(r, placeholders)); + } + +} diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessage.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessage.java index 46aad87..9c07ce7 100644 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessage.java +++ b/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessage.java @@ -1,10 +1,9 @@ package cc.carm.lib.mineconfiguration.common.value; -import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; import cc.carm.lib.configuration.core.function.ConfigValueParser; import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.configuration.core.value.type.ConfiguredValue; +import cc.carm.lib.mineconfiguration.common.data.AbstractText; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -15,11 +14,11 @@ import java.util.function.BiFunction; import java.util.function.Function; public abstract class ConfigMessage, R> - extends ConfiguredValue { + extends ConfiguredValue implements BaseMessage { protected final @NotNull String[] params; protected final @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> messageParser; - protected final @NotNull BiConsumer<@NotNull R, @NotNull M> messageConsumer; + protected final @NotNull BiConsumer<@NotNull R, @NotNull M> sendFunction; protected final @NotNull Function textBuilder; @@ -27,44 +26,35 @@ public abstract class ConfigMessage, R> @Nullable List headerComments, @Nullable String inlineComments, @NotNull Class textClazz, @NotNull T defaultMessage, @NotNull String[] params, @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull R, @NotNull M> messageConsumer, + @NotNull BiConsumer<@NotNull R, @NotNull M> sendFunction, @NotNull Function textBuilder) { - super(provider, sectionPath, headerComments, inlineComments, textClazz, defaultMessage, + super( + provider, sectionPath, headerComments, inlineComments, textClazz, defaultMessage, ConfigValueParser.castToString().andThen((s, d) -> textBuilder.apply(s)), AbstractText::getMessage ); this.params = params; this.messageParser = messageParser; - this.messageConsumer = messageConsumer; + this.sendFunction = sendFunction; this.textBuilder = textBuilder; } - public @Nullable M parse(@Nullable R sender, @Nullable Object... values) { - return parse(sender, ParamsUtils.buildParams(params, values)); + @Override + public String[] getParams() { + return params; } + @Override + public void apply(@NotNull R receiver, @NotNull M message) { + sendFunction.accept(receiver, message); + } + + @Override public @Nullable M parse(@Nullable R sender, @NotNull Map placeholders) { T value = get(); if (value == null || value.getMessage().isEmpty()) return null; else return value.parse(this.messageParser, sender, placeholders); } - public void send(@Nullable R receiver, @Nullable Object... values) { - send(receiver, ParamsUtils.buildParams(params, values)); - } - - public void send(@Nullable R receiver, @NotNull Map placeholders) { - if (receiver == null) return; - M parsed = parse(receiver, placeholders); - if (parsed == null) return; - messageConsumer.accept(receiver, parsed); - } - - public void broadcast(@Nullable Object... values) { - broadcast(ParamsUtils.buildParams(params, values)); - } - - public abstract void broadcast(@NotNull Map placeholders); - public void set(@Nullable String value) { this.set(value == null ? null : buildText(value)); } @@ -72,4 +62,5 @@ public abstract class ConfigMessage, R> protected T buildText(String value) { return textBuilder.apply(value); } + } diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessageList.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessageList.java index 7c51851..c56a910 100644 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessageList.java +++ b/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessageList.java @@ -4,7 +4,6 @@ import cc.carm.lib.configuration.core.function.ConfigDataFunction; import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.configuration.core.value.type.ConfiguredList; import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -16,7 +15,8 @@ import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; -public abstract class ConfigMessageList, R> extends ConfiguredList { +public abstract class ConfigMessageList, R> + extends ConfiguredList implements BaseMessage> { protected final @NotNull String[] params; protected final @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> messageParser; @@ -40,38 +40,34 @@ public abstract class ConfigMessageList, R> extends this.textBuilder = textBuilder; } - public @Nullable List parse(@Nullable R sender, @Nullable Object... values) { - return parse(sender, ParamsUtils.buildParams(params, values)); + @Override + public String[] getParams() { + return params; } - public @Nullable List parse(@Nullable R sender, @NotNull Map placeholders) { + @Override + public void apply(@NotNull R receiver, @NotNull List message) { + sendFunction.accept(receiver, message); + } + + /** + * 为某位接收者解析消息 + * + * @param receiver 消息的接收者 + * @param placeholders 消息中的变量与对应参数 + */ + @Override + public @Nullable List parse(@Nullable R receiver, @NotNull Map placeholders) { List list = get(); if (list.isEmpty()) return null; List messages = list.stream().map(T::getMessage).collect(Collectors.toList()); if (String.join("", messages).isEmpty()) return null; - return list.stream().map(value -> value.parse(this.messageParser, sender, placeholders)) + return list.stream().map(value -> value.parse(this.messageParser, receiver, placeholders)) .collect(Collectors.toList()); } - public void send(@Nullable R receiver, @Nullable Object... values) { - send(receiver, ParamsUtils.buildParams(params, values)); - } - - public void send(@Nullable R receiver, @NotNull Map placeholders) { - if (receiver == null) return; - List parsed = parse(receiver, placeholders); - if (parsed == null) return; - sendFunction.accept(receiver, parsed); - } - - public void broadcast(@Nullable Object... values) { - broadcast(ParamsUtils.buildParams(params, values)); - } - - public abstract void broadcast(@NotNull Map placeholders); - public void setMessages(@NotNull String... values) { setMessages(values.length == 0 ? null : Arrays.asList(values)); } @@ -82,7 +78,6 @@ public abstract class ConfigMessageList, R> extends } else { set(buildText(values)); } - } protected List buildText(List values) { diff --git a/platform/bukkit/base/pom.xml b/platform/bukkit/base/pom.xml index b0022a8..0f7f3a4 100644 --- a/platform/bukkit/base/pom.xml +++ b/platform/bukkit/base/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-bukkit-parent cc.carm.lib - 2.2.0 + 2.2.1 4.0.0 diff --git a/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java b/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java index da9f874..787c071 100644 --- a/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java +++ b/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java @@ -1,17 +1,18 @@ package cc.carm.lib.mineconfiguration.bukkit.value; +import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.mineconfiguration.bukkit.CraftConfigValue; +import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageValueBuilder; import cc.carm.lib.mineconfiguration.bukkit.data.TextConfig; import cc.carm.lib.mineconfiguration.common.value.ConfigMessage; -import cc.carm.lib.configuration.core.source.ConfigurationProvider; -import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageValueBuilder; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Map; import java.util.function.BiConsumer; import java.util.function.BiFunction; @@ -43,10 +44,11 @@ public class ConfiguredMessage extends ConfigMessage placeholders) { - Bukkit.getOnlinePlayers().forEach(pl -> send(pl, placeholders)); - send(Bukkit.getConsoleSender(), placeholders); + public @NotNull Collection getAllReceivers() { + List senders = new ArrayList<>(); + senders.add(Bukkit.getConsoleSender()); + senders.addAll(Bukkit.getOnlinePlayers()); + return senders; } - } diff --git a/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessageList.java b/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessageList.java index 4d3a847..d915cd0 100644 --- a/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessageList.java +++ b/platform/bukkit/base/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessageList.java @@ -1,17 +1,18 @@ package cc.carm.lib.mineconfiguration.bukkit.value; +import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.mineconfiguration.bukkit.CraftConfigValue; +import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageListBuilder; import cc.carm.lib.mineconfiguration.bukkit.data.TextConfig; import cc.carm.lib.mineconfiguration.common.value.ConfigMessageList; -import cc.carm.lib.configuration.core.source.ConfigurationProvider; -import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageListBuilder; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Map; import java.util.function.BiConsumer; import java.util.function.BiFunction; @@ -38,9 +39,11 @@ public class ConfiguredMessageList extends ConfigMessageList placeholders) { - Bukkit.getOnlinePlayers().forEach(pl -> send(pl, placeholders)); - send(Bukkit.getConsoleSender(), placeholders); + @Override + public @NotNull Collection getAllReceivers() { + List senders = new ArrayList<>(); + senders.add(Bukkit.getConsoleSender()); + senders.addAll(Bukkit.getOnlinePlayers()); + return senders; } - } diff --git a/platform/bukkit/general/pom.xml b/platform/bukkit/general/pom.xml index c3fdbf6..3c7183e 100644 --- a/platform/bukkit/general/pom.xml +++ b/platform/bukkit/general/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-bukkit-parent cc.carm.lib - 2.2.0 + 2.2.1 4.0.0 diff --git a/platform/bukkit/pom.xml b/platform/bukkit/pom.xml index a383b00..9a9214a 100644 --- a/platform/bukkit/pom.xml +++ b/platform/bukkit/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.2.0 + 2.2.1 ../../pom.xml 4.0.0 diff --git a/platform/bungee/pom.xml b/platform/bungee/pom.xml index 69902af..f796d05 100644 --- a/platform/bungee/pom.xml +++ b/platform/bungee/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.2.0 + 2.2.1 ../../pom.xml 4.0.0 diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessage.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessage.java index d7a60b1..7407ceb 100644 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessage.java +++ b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessage.java @@ -1,17 +1,18 @@ package cc.carm.lib.mineconfiguration.bungee.value; +import cc.carm.lib.configuration.core.source.ConfigurationProvider; import cc.carm.lib.mineconfiguration.bungee.BungeeConfigValue; import cc.carm.lib.mineconfiguration.bungee.builder.message.BungeeMessageValueBuilder; import cc.carm.lib.mineconfiguration.bungee.data.MessageText; import cc.carm.lib.mineconfiguration.common.value.ConfigMessage; -import cc.carm.lib.configuration.core.source.ConfigurationProvider; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; -import java.util.Map; import java.util.function.BiConsumer; import java.util.function.BiFunction; @@ -43,9 +44,11 @@ public class ConfiguredMessage extends ConfigMessage placeholders) { - ProxyServer.getInstance().getPlayers().forEach(pl -> send(pl, placeholders)); - send(ProxyServer.getInstance().getConsole(), placeholders); + public @NotNull Collection getAllReceivers() { + List senders = new ArrayList<>(); + senders.add(ProxyServer.getInstance().getConsole()); + senders.addAll(ProxyServer.getInstance().getPlayers()); + return senders; } diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessageList.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessageList.java index 7a31e59..a30cd17 100644 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessageList.java +++ b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessageList.java @@ -10,6 +10,8 @@ import net.md_5.bungee.api.ProxyServer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.function.BiConsumer; @@ -38,9 +40,11 @@ public class ConfiguredMessageList extends ConfigMessageList placeholders) { - ProxyServer.getInstance().getPlayers().forEach(pl -> send(pl, placeholders)); - send(ProxyServer.getInstance().getConsole(), placeholders); + @Override + public @NotNull Collection getAllReceivers() { + List senders = new ArrayList<>(); + senders.add(ProxyServer.getInstance().getConsole()); + senders.addAll(ProxyServer.getInstance().getPlayers()); + return senders; } - } diff --git a/platform/spigot/pom.xml b/platform/spigot/pom.xml index 3d9b804..f1dddf2 100644 --- a/platform/spigot/pom.xml +++ b/platform/spigot/pom.xml @@ -5,7 +5,7 @@ cc.carm.lib mineconfiguration-parent - 2.2.0 + 2.2.1 ../../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 41cfad6..237ecf3 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ cc.carm.lib mineconfiguration-parent - 2.2.0 + 2.2.1 pom common