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