diff --git a/common/pom.xml b/common/pom.xml index 4e4ea71..9adb3f2 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.9.3 + 3.0.0 4.0.0 @@ -28,6 +28,27 @@ compile + + cc.carm.lib + easyconfiguration-feature-commentable + ${deps.easyconfifuration.version} + compile + + + + cc.carm.lib + easyconfiguration-feature-file + ${deps.easyconfifuration.version} + compile + + + + cc.carm.lib + easyconfiguration-feature-text + ${deps.easyconfifuration.version} + compile + + cc.carm.lib easyplugin-color diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/AbstractConfiguration.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/AbstractConfiguration.java index ce2a561..8f694f2 100644 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/AbstractConfiguration.java +++ b/common/src/main/java/cc/carm/lib/mineconfiguration/common/AbstractConfiguration.java @@ -1,51 +1,51 @@ package cc.carm.lib.mineconfiguration.common; -import cc.carm.lib.configuration.core.Configuration; -import cc.carm.lib.configuration.core.source.ConfigurationProvider; +import cc.carm.lib.configuration.Configuration; +import cc.carm.lib.configuration.source.ConfigurationHolder; import org.jetbrains.annotations.NotNull; -public abstract class AbstractConfiguration

> { +public abstract class AbstractConfiguration> { - private final P configProvider; - private final P messageProvider; + private final HOLDER config; + private final HOLDER message; - protected AbstractConfiguration(@NotNull P configProvider, @NotNull P messageProvider) { - this.configProvider = configProvider; - this.messageProvider = messageProvider; + protected AbstractConfiguration(@NotNull HOLDER config, @NotNull HOLDER message) { + this.config = config; + this.message = message; } public void initializeConfig(@NotNull Configuration configRoot) { - this.configProvider.initialize(configRoot); + this.config.initialize(configRoot); } public void initializeMessage(@NotNull Configuration messageRoot) { - this.messageProvider.initialize(messageRoot); + this.message.initialize(messageRoot); } public void initializeConfig(@NotNull Class configRoot) { - this.configProvider.initialize(configRoot); + this.config.initialize(configRoot); } public void initializeMessage(@NotNull Class messageRoot) { - this.messageProvider.initialize(messageRoot); + this.message.initialize(messageRoot); } - public P getConfigProvider() { - return configProvider; + public HOLDER getConfig() { + return config; } - public P getMessageProvider() { - return messageProvider; + public HOLDER getMessage() { + return message; } public void reload() throws Exception { - getConfigProvider().reload(); - getMessageProvider().reload(); + getConfig().reload(); + getMessage().reload(); } public void save() throws Exception { - getConfigProvider().save(); - getMessageProvider().save(); + getConfig().save(); + getMessage().save(); } } diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageConfigBuilder.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageConfigBuilder.java deleted file mode 100644 index 0cb450e..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageConfigBuilder.java +++ /dev/null @@ -1,39 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.builder.message; - -import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.BiFunction; - -public abstract class MessageConfigBuilder> { - - protected final @NotNull Class receiverClazz; - protected final @NotNull Class textClazz; - - public MessageConfigBuilder(@NotNull Class receiverClazz, - @NotNull Class textClazz) { - this.receiverClazz = receiverClazz; - this.textClazz = textClazz; - } - - /** - * 以单条消息为目标,构建一个消息配置。 - * - * @param parser 消息解析器,负责将String转换为目标消息类型。 - * @param 消息类型 - * @return 单条消息构建器 - */ - public abstract @NotNull MessageValueBuilder asValue(@NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> parser); - - /** - * 以多行消息为目标,构建一个消息配置。 - * - * @param parser 消息解析器 - * @param 消息类型 - * @return 多行消息构建器 - */ - public abstract @NotNull MessageListBuilder asList(@NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> parser); - - -} diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageListBuilder.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageListBuilder.java deleted file mode 100644 index 47193c2..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageListBuilder.java +++ /dev/null @@ -1,79 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.builder.message; - - -import cc.carm.lib.configuration.core.builder.CommonConfigBuilder; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import cc.carm.lib.mineconfiguration.common.value.ConfigMessageList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; -import java.util.function.Function; -import java.util.stream.Collectors; - -public abstract class MessageListBuilder, B extends MessageListBuilder> - extends CommonConfigBuilder, B> { - - protected final @NotNull Class receiverClazz; - - protected @NotNull String[] params; - protected @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> messageParser; - protected @NotNull BiConsumer<@NotNull R, @NotNull List> sendFunction; - - protected @NotNull Function<@NotNull String, @NotNull String> paramFormatter; - protected final @NotNull Function textBuilder; - - public MessageListBuilder(@NotNull Class receiverClazz, - @NotNull Function textBuilder, - @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> parser) { - this.receiverClazz = receiverClazz; - this.textBuilder = textBuilder; - this.params = new String[0]; - this.messageParser = parser; - this.paramFormatter = ParamsUtils.DEFAULT_PARAM_FORMATTER; - this.sendFunction = (sender, M) -> { - }; - } - - public B defaults(@NotNull String... messages) { - return defaults(new ArrayList<>(Arrays.stream(messages).map(textBuilder).collect(Collectors.toList()))); - } - - public B params(@NotNull String... params) { - this.params = params; - return getThis(); - } - - public B params(@NotNull List params) { - this.params = params.toArray(new String[0]); - return getThis(); - } - - public B formatParam(@NotNull Function<@NotNull String, @NotNull String> paramFormatter) { - this.paramFormatter = paramFormatter; - return getThis(); - } - - public B whenSend(@NotNull BiConsumer<@NotNull R, @NotNull List> sendFunction) { - this.sendFunction = sendFunction; - return getThis(); - } - - @Override - public abstract @NotNull ConfigMessageList build(); - - protected @NotNull ValueManifest> buildManifest(@NotNull List emptyValue) { - return new ValueManifest<>( - this.provider, this.path, this.headerComments, this.inlineComment, - Optional.ofNullable(this.defaultValue).orElse(emptyValue) - ); - } - -} diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageValueBuilder.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageValueBuilder.java deleted file mode 100644 index 87f5032..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/builder/message/MessageValueBuilder.java +++ /dev/null @@ -1,75 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.builder.message; - -import cc.carm.lib.configuration.core.builder.CommonConfigBuilder; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import cc.carm.lib.mineconfiguration.common.value.ConfigMessage; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Optional; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; -import java.util.function.Function; - -public abstract class MessageValueBuilder, B extends MessageValueBuilder> - extends CommonConfigBuilder { - - - protected final @NotNull Class receiverClazz; - protected @NotNull String[] params; - protected @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> messageParser; - protected @NotNull BiConsumer<@NotNull R, @NotNull M> sendHandler; - - protected @NotNull Function<@NotNull String, @NotNull String> paramFormatter; - - protected final @NotNull Function textBuilder; - - public MessageValueBuilder(@NotNull Class receiverClazz, - @NotNull Function textBuilder, - @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> parser) { - this.receiverClazz = receiverClazz; - this.params = new String[0]; - this.paramFormatter = ParamsUtils.DEFAULT_PARAM_FORMATTER; - this.textBuilder = textBuilder; - this.messageParser = parser; - this.sendHandler = (receiver, M) -> { - }; - } - - public B defaults(@NotNull String message) { - return defaults(this.textBuilder.apply(message)); - } - - public B params(@NotNull String... params) { - this.params = params; - return getThis(); - } - - public B params(@NotNull List params) { - this.params = params.toArray(new String[0]); - return getThis(); - } - - public B formatParam(@NotNull Function<@NotNull String, @NotNull String> paramFormatter) { - this.paramFormatter = paramFormatter; - return getThis(); - } - - public B whenSend(@NotNull BiConsumer<@NotNull R, @NotNull M> sendFunction) { - this.sendHandler = sendFunction; - return getThis(); - } - - @Override - public abstract @NotNull ConfigMessage build(); - - protected @NotNull ValueManifest buildManifest(@NotNull T emptyValue) { - return new ValueManifest<>( - this.provider, this.path, this.headerComments, this.inlineComment, - Optional.ofNullable(this.defaultValue).orElse(emptyValue) - ); - } -} diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/data/AbstractText.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/data/AbstractText.java deleted file mode 100644 index 1f6d063..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/data/AbstractText.java +++ /dev/null @@ -1,42 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.data; - -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; -import java.util.function.BiFunction; - -/** - * @param Receiver type - */ -public abstract class AbstractText { - - private final @NotNull Class receiverClazz; - protected @NotNull String message; - - public AbstractText(@NotNull Class receiverClazz, @NotNull String message) { - this.receiverClazz = receiverClazz; - this.message = message; - } - - public @NotNull Class getReceiverClazz() { - return receiverClazz; - } - - public @NotNull String getMessage() { - return this.message; - } - - public @NotNull M parse(@NotNull BiFunction<@Nullable R, @NotNull String, @NotNull M> parser, - @Nullable R receiver, @Nullable String[] params, @Nullable Object[] values) { - return parse(parser, receiver, ParamsUtils.buildParams(params, values)); - } - - public @NotNull M parse(@NotNull BiFunction<@Nullable R, @NotNull String, @NotNull M> parser, - @Nullable R receiver, @NotNull Map placeholders) { - return parser.apply(receiver, ParamsUtils.setPlaceholders(message, placeholders)); - } - - -} diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/utils/ParamsUtils.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/utils/ParamsUtils.java deleted file mode 100644 index 65ff207..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/utils/ParamsUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.utils; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -public class ParamsUtils { - - /** - * 默认的变量格式为 {@code %(变量名)}。 - */ - public static Function<@NotNull String, @NotNull String> DEFAULT_PARAM_FORMATTER = (s) -> "%(" + s + ")"; - - public static String[] formatParams(@NotNull Function formatter, @NotNull String[] params) { - return Arrays.stream(params).map(formatter).toArray(String[]::new); - } - - public static Map buildParams(@Nullable String[] params, @Nullable Object[] values) { - Map map = new HashMap<>(); - if (params == null || params.length == 0) return map; - for (int i = 0; i < params.length; i++) { - map.put(params[i], values.length > i ? values[i] : "?"); - } - return map; - } - - public static String setPlaceholders(@NotNull String messages, @NotNull Map placeholders) { - if (messages.isEmpty()) return messages; - - String parsed = messages; - for (Map.Entry entry : placeholders.entrySet()) { - Object value = entry.getValue(); - parsed = parsed.replace(entry.getKey(), value == null ? "" : value.toString()); - } - - return parsed; - } - -} 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 deleted file mode 100644 index ac43dc6..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/BaseMessage.java +++ /dev/null @@ -1,157 +0,0 @@ -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 values 变量值 - * @return 准备好待发送的消息 - */ - default @NotNull PreparedMessage prepare(@NotNull Object... values) { - return new PreparedMessage<>(this, values); - } - - /** - * 为某位接收者解析此消息。 - * - * @param receiver 接收者 - * @param placeholders 消息中的变量与对应参数 - * @return 解析变量后的消息内容 - */ - @Nullable M parse(@Nullable R receiver, @NotNull Map placeholders); - - /** - * 为某位接收者解析此消息。 - * - * @param receiver 接收者 - * @param values 已定变量的对应参数 - * @return 解析变量后的消息内容 - */ - default @Nullable M parse(@Nullable R receiver, @Nullable Object... values) { - return parse(receiver, 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 sendToAll(@Nullable Object... values) { - broadcast(values); - } - - /** - * 广播此消息(包括后台) - * - * @param placeholders 消息中的变量与对应参数 - */ - default void sendToAll(@NotNull Map placeholders) { - broadcast(placeholders); - } - - - /** - * 广播此消息(包括后台) - * - * @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 deleted file mode 100644 index f4aa1d0..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessage.java +++ /dev/null @@ -1,99 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.value; - -import cc.carm.lib.configuration.core.function.ConfigValueParser; -import cc.carm.lib.configuration.core.value.ValueManifest; -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; - -import java.util.Collection; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; -import java.util.function.Function; - -public abstract class ConfigMessage, R> - 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> sendFunction; - - protected final @NotNull Function textBuilder; - - public ConfigMessage(@NotNull ValueManifest manifest, - @NotNull Class textClazz, @NotNull String[] params, - @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull R, @NotNull M> sendFunction, - @NotNull Function textBuilder) { - super( - manifest, textClazz, - ConfigValueParser.castToString().andThen((s, d) -> textBuilder.apply(s)), - AbstractText::getMessage - ); - this.params = params; - this.messageParser = messageParser; - this.sendFunction = sendFunction; - this.textBuilder = textBuilder; - } - - @Override - public String[] getParams() { - return params; - } - - @Override - public void apply(@NotNull R receiver, @NotNull M message) { - sendFunction.accept(receiver, message); - } - - protected @Nullable N parseTo(@Nullable R sender, @NotNull Map placeholders, - @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable N> parser) { - T value = get(); - if (value == null || value.getMessage().isEmpty()) return null; - else return value.parse(parser, sender, placeholders); - } - - public @Nullable String parseString(@Nullable R sender, @NotNull Map placeholders) { - return parseTo(sender, placeholders, (r, s) -> s); - } - - @Override - public @Nullable M parse(@Nullable R sender, @NotNull Map placeholders) { - return parseTo(sender, placeholders, this.messageParser); - } - - public void set(@Nullable String value) { - this.set(value == null ? null : buildText(value)); - } - - protected T buildText(String value) { - return textBuilder.apply(value); - } - - public abstract class PreparedMessage { - - protected final @NotNull Object[] values; - - protected PreparedMessage(@NotNull Object[] values) { - this.values = values; - } - - public Object[] getValues() { - return values; - } - - public abstract void to(P receiver); - - public void to(Collection

receivers) { - receivers.forEach(this::to); - } - - public N get(P receiver) { - return null; - } - - } - -} 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 deleted file mode 100644 index af4bd86..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/ConfigMessageList.java +++ /dev/null @@ -1,109 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.value; - -import cc.carm.lib.configuration.core.function.ConfigDataFunction; -import cc.carm.lib.configuration.core.value.ValueManifest; -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; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.function.BiConsumer; -import java.util.function.BiFunction; -import java.util.function.Function; -import java.util.stream.Collectors; - -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; - protected final @NotNull BiConsumer<@NotNull R, @NotNull List> sendFunction; - - protected final @NotNull Function textBuilder; - - public ConfigMessageList(@NotNull ValueManifest> manifest, - @NotNull Class textClazz, @NotNull String[] params, - @NotNull BiFunction<@Nullable R, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull R, @NotNull List> sendFunction, - @NotNull Function textBuilder) { - super( - manifest, textClazz, - ConfigDataFunction.castToString().andThen(textBuilder::apply), - AbstractText::getMessage - ); - this.params = params; - this.messageParser = messageParser; - this.sendFunction = sendFunction; - this.textBuilder = textBuilder; - } - - @Override - public String[] getParams() { - return params; - } - - @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, receiver, placeholders)) - .collect(Collectors.toList()); - } - - public @Nullable M parseToLine(@Nullable R receiver, @NotNull Object... values) { - return parseToLine(receiver, "\n", ParamsUtils.buildParams(this.params, values)); - } - - public @Nullable M parseToLine(@Nullable R receiver, @NotNull Map placeholders) { - return parseToLine(receiver, "\n", placeholders); - } - - public @Nullable M parseToLine(@Nullable R receiver, @NotNull String delimiter, @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; - - String combined = String.join(delimiter, messages); - T text = textBuilder.apply(combined); - - return text.parse(this.messageParser, receiver, placeholders); - } - - public void setMessages(@NotNull String... values) { - setMessages(values.length == 0 ? null : Arrays.asList(values)); - } - - public void setMessages(@Nullable List values) { - if (values == null) { - set(null); - } else { - set(buildText(values)); - } - } - - protected List buildText(List values) { - return values.stream().map(textBuilder).collect(Collectors.toList()); - } - -} diff --git a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/PreparedMessage.java b/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/PreparedMessage.java deleted file mode 100644 index d40ceb8..0000000 --- a/common/src/main/java/cc/carm/lib/mineconfiguration/common/value/PreparedMessage.java +++ /dev/null @@ -1,48 +0,0 @@ -package cc.carm.lib.mineconfiguration.common.value; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class PreparedMessage { - - protected final @NotNull BaseMessage message; - protected final @NotNull Object[] values; - - protected PreparedMessage(@NotNull BaseMessage message, @NotNull Object[] values) { - this.message = message; - this.values = values; - } - - /** - * 为某位接收者解析此消息。 - * - * @param receiver 接收者 - * @return 解析变量后的消息内容 - */ - public @Nullable M parse(@Nullable R receiver) { - return message.parse(receiver, values); - } - - /** - * 向某位接收者发送消息 - * - * @param receiver 消息的接收者 - */ - public void to(@Nullable R receiver) { - message.send(receiver, values); - } - - /** - * 向某位接收者发送消息 - * - * @param receivers 消息的接收者们 - */ - public void to(@NotNull Iterable receivers) { - receivers.forEach(this::to); - } - - public void toAll() { - to(message.getAllReceivers()); - } - -} diff --git a/platform/bukkit/pom.xml b/platform/bukkit/pom.xml index 8d0e273..546a765 100644 --- a/platform/bukkit/pom.xml +++ b/platform/bukkit/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.9.3 + 3.0.0 ../../pom.xml 4.0.0 @@ -19,7 +19,7 @@ jar MineConfiguration-Bukkit - 轻松(做)配置,适用于Bukkit系服务端的版本。 + EasyConfiguration for Bukkit. diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/CraftConfigValue.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/CraftConfigValue.java deleted file mode 100644 index 6828c85..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/CraftConfigValue.java +++ /dev/null @@ -1,26 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit; - -import cc.carm.lib.configuration.core.source.ConfigurationProvider; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.configuration.core.value.impl.CachedConfigValue; -import cc.carm.lib.mineconfiguration.bukkit.source.CraftConfigProvider; -import cc.carm.lib.mineconfiguration.bukkit.source.CraftSectionWrapper; -import org.jetbrains.annotations.NotNull; - -public abstract class CraftConfigValue extends CachedConfigValue { - - protected CraftConfigValue(@NotNull ValueManifest manifest) { - super(manifest); - } - - public CraftConfigProvider getBukkitProvider() { - ConfigurationProvider provider = getProvider(); - if (provider instanceof CraftConfigProvider) return (CraftConfigProvider) getProvider(); - else throw new IllegalStateException("Provider is not a CraftConfigProvider"); - } - - public CraftSectionWrapper getBukkitConfig() { - return getBukkitProvider().getConfiguration(); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/MineConfiguration.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/MineConfiguration.java index 6249eab..c4d0ec3 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/MineConfiguration.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/MineConfiguration.java @@ -1,47 +1,24 @@ package cc.carm.lib.mineconfiguration.bukkit; -import cc.carm.lib.configuration.core.Configuration; -import cc.carm.lib.configuration.core.ConfigurationRoot; -import cc.carm.lib.mineconfiguration.bukkit.source.BukkitConfigProvider; +import cc.carm.lib.configuration.Configuration; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.mineconfiguration.bukkit.source.BukkitConfigFactory; +import cc.carm.lib.mineconfiguration.bukkit.source.BukkitSource; import cc.carm.lib.mineconfiguration.common.AbstractConfiguration; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import java.io.File; -import java.io.IOException; -public class MineConfiguration extends AbstractConfiguration { +public class MineConfiguration extends AbstractConfiguration> { - public static BukkitConfigProvider from(File file, String source) { - BukkitConfigProvider provider = new BukkitConfigProvider(file); - try { - provider.initializeFile(source); - provider.initializeConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - return provider; + public static ConfigurationHolder from(File file, String source) { + return BukkitConfigFactory.from(file).resourcePath(source).build(); } - public static BukkitConfigProvider from(File file) { - return from(file, file.getName()); - } - - public static BukkitConfigProvider from(String fileName) { - return from(fileName, fileName); - } - - public static BukkitConfigProvider from(String fileName, String source) { - return from(new File(fileName), source); - } - - public static BukkitConfigProvider from(Plugin plugin, String fileName) { - return from(plugin, fileName, fileName); - } - - public static BukkitConfigProvider from(Plugin plugin, String fileName, String source) { - return from(new File(plugin.getDataFolder(), fileName), source); + public static ConfigurationHolder from(Plugin plugin, String fileName) { + return from(new File(plugin.getDataFolder(), fileName), fileName); } public MineConfiguration(@NotNull JavaPlugin plugin) { diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/AbstractCraftBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/AbstractCraftBuilder.java deleted file mode 100644 index 35b1349..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/AbstractCraftBuilder.java +++ /dev/null @@ -1,13 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder; - -import cc.carm.lib.mineconfiguration.bukkit.source.CraftConfigProvider; -import cc.carm.lib.configuration.core.builder.AbstractConfigBuilder; - -public abstract class AbstractCraftBuilder> - extends AbstractConfigBuilder { - - public AbstractCraftBuilder() { - super(CraftConfigProvider.class); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/item/ItemConfigBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/item/ItemConfigBuilder.java deleted file mode 100644 index b3ae3f5..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/item/ItemConfigBuilder.java +++ /dev/null @@ -1,139 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.item; - -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.bukkit.builder.AbstractCraftBuilder; -import cc.carm.lib.mineconfiguration.bukkit.value.item.ConfiguredItem; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import org.bukkit.Material; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.function.Function; -import java.util.function.UnaryOperator; - -public class ItemConfigBuilder extends AbstractCraftBuilder { - - protected Material type; - protected short data = 0; - protected String name = null; - protected List lore = new ArrayList<>(); - - protected Map enchants = new LinkedHashMap<>(); - protected Set flags = new LinkedHashSet<>(); - - protected @NotNull String[] params = new String[0]; - protected @NotNull Function<@NotNull String, @NotNull String> paramFormatter = ParamsUtils.DEFAULT_PARAM_FORMATTER; - - public ItemConfigBuilder defaults(@NotNull Material type, - @Nullable String name, @NotNull String... lore) { - return defaults(type, (short) 0, name, Arrays.asList(lore)); - } - - public ItemConfigBuilder defaults(@NotNull Material type, short data, - @Nullable String name, @NotNull String... lore) { - return defaults(type, data, name, Arrays.asList(lore)); - } - - public ItemConfigBuilder defaults(@NotNull Material type, short data, - @Nullable String name, @NotNull List lore) { - return defaultType(type).defaultDataID(data).defaultName(name).defaultLore(lore); - } - - public ItemConfigBuilder defaultType(@NotNull Material type) { - this.type = type; - return this; - } - - public ItemConfigBuilder defaultName(@Nullable String name) { - this.name = name; - return this; - } - - public ItemConfigBuilder defaultDataID(short dataID) { - this.data = dataID; - return this; - } - - public ItemConfigBuilder defaultLore(@NotNull String... lore) { - return defaultLore(Arrays.asList(lore)); - } - - public ItemConfigBuilder defaultLore(@NotNull List lore) { - this.lore = new ArrayList<>(lore); - return this; - } - - public ItemConfigBuilder defaultEnchants(@NotNull Map enchants) { - this.enchants = new LinkedHashMap<>(enchants); - return this; - } - - public ItemConfigBuilder defaultEnchant(@NotNull Enchantment enchant, int level) { - return defaultEnchants(Collections.singletonMap(enchant, level)); - } - - public ItemConfigBuilder defaultFlags(@NotNull Set flags) { - this.flags = new LinkedHashSet<>(flags); - return this; - } - - public ItemConfigBuilder defaultFlags(@NotNull ItemFlag... flags) { - return defaultFlags(new LinkedHashSet<>(Arrays.asList(flags))); - } - - public ItemConfigBuilder formatParam(@NotNull UnaryOperator paramFormatter) { - this.paramFormatter = paramFormatter; - return getThis(); - } - - public ItemConfigBuilder params(@NotNull String... params) { - this.params = params; - return getThis(); - } - - public ItemConfigBuilder params(@NotNull List params) { - this.params = params.toArray(new String[0]); - return getThis(); - } - - @Override - protected @NotNull ItemConfigBuilder getThis() { - return this; - } - - protected @Nullable ItemStack buildDefault() { - if (this.type == null) return null; - - ItemStack item = new ItemStack(type, 1, data); - ItemMeta meta = item.getItemMeta(); - if (meta == null) return item; - - Optional.ofNullable(this.name).ifPresent(meta::setDisplayName); - Optional.ofNullable(this.lore).ifPresent(meta::setLore); - enchants.forEach((enchant, level) -> meta.addEnchant(enchant, level, true)); - flags.forEach(meta::addItemFlags); - item.setItemMeta(meta); - - return item; - } - - @Override - public @NotNull ConfiguredItem build() { - return new ConfiguredItem( - new ValueManifest<>( - this.provider, this.path, this.headerComments, this.inlineComment, - Optional.ofNullable(this.defaultValue).orElse(buildDefault()) - ), buildParams() - ); - } - - protected final String[] buildParams() { - return Arrays.stream(params).map(param -> paramFormatter.apply(param)).toArray(String[]::new); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageBuilder.java deleted file mode 100644 index 3e7ccc2..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageBuilder.java +++ /dev/null @@ -1,44 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.message; - -import cc.carm.lib.mineconfiguration.bukkit.data.TextConfig; -import cc.carm.lib.mineconfiguration.bukkit.utils.TextParser; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageConfigBuilder; -import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.HashMap; -import java.util.function.BiFunction; - -public class CraftMessageBuilder extends MessageConfigBuilder { - - - public CraftMessageBuilder() { - super(CommandSender.class, TextConfig.class); - } - - @Override - public @NotNull CraftMessageValueBuilder asValue(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - return new CraftMessageValueBuilder<>(parser); - } - - @Override - public @NotNull CraftMessageListBuilder asList(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - return new CraftMessageListBuilder<>(parser); - } - - public @NotNull - CraftMessageValueBuilder asStringValue() { - return asValue(defaultParser()).whenSend(CommandSender::sendMessage); - } - - public @NotNull - CraftMessageListBuilder asStringList() { - return asList(defaultParser()).whenSend((r, m) -> m.forEach(r::sendMessage)); - } - - protected static @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable String> defaultParser() { - return (receiver, message) -> TextParser.parseText(receiver, message, new HashMap<>()); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageListBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageListBuilder.java deleted file mode 100644 index 6306c4c..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageListBuilder.java +++ /dev/null @@ -1,34 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.message; - -import cc.carm.lib.mineconfiguration.bukkit.data.TextConfig; -import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessageList; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageListBuilder; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.function.BiFunction; - -public class CraftMessageListBuilder - extends MessageListBuilder> { - - public CraftMessageListBuilder(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - super(CommandSender.class, TextConfig::of, parser); - } - - @Override - protected @NotNull CraftMessageListBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredMessageList build() { - return new ConfiguredMessageList<>( - buildManifest(TextConfig.of(new ArrayList<>())), - ParamsUtils.formatParams(this.paramFormatter, this.params), - this.messageParser, this.sendFunction - ); - } -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageValueBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageValueBuilder.java deleted file mode 100644 index a93bb17..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/message/CraftMessageValueBuilder.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.message; - -import cc.carm.lib.mineconfiguration.bukkit.data.TextConfig; -import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessage; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageValueBuilder; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.BiFunction; - -public class CraftMessageValueBuilder - extends MessageValueBuilder> { - - public CraftMessageValueBuilder(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - super(CommandSender.class, TextConfig::new, parser); - } - - @Override - protected @NotNull CraftMessageValueBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredMessage build() { - return new ConfiguredMessage<>( - buildManifest(TextConfig.of("")), - ParamsUtils.formatParams(this.paramFormatter, this.params), - this.messageParser, this.sendHandler - ); - } - - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/notify/NotifyConfigBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/notify/NotifyConfigBuilder.java deleted file mode 100644 index b08e35d..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/notify/NotifyConfigBuilder.java +++ /dev/null @@ -1,110 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.notify; - -import cc.carm.lib.configuration.core.builder.CommonConfigBuilder; -import cc.carm.lib.mineconfiguration.bukkit.data.NotifyConfig; -import cc.carm.lib.mineconfiguration.bukkit.data.SoundConfig; -import cc.carm.lib.mineconfiguration.bukkit.data.TitleConfig; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.ConfiguredNotify; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.DefaultNotifyTypes; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import org.bukkit.Sound; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.Range; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.function.Function; -import java.util.function.UnaryOperator; - -public class NotifyConfigBuilder extends CommonConfigBuilder, NotifyConfigBuilder> { - - protected final @NotNull List notifications = new ArrayList<>(); - - protected @NotNull String[] params = new String[0]; - protected @NotNull Function<@NotNull String, @NotNull String> paramFormatter; - - public NotifyConfigBuilder() { - this.paramFormatter = ParamsUtils.DEFAULT_PARAM_FORMATTER; - } - - public NotifyConfigBuilder defaultMessages(@NotNull String... messages) { - return defaultMessages(Arrays.asList(messages)); - } - - public NotifyConfigBuilder defaultMessages(@NotNull List messages) { - for (String message : messages) { - notifications.add(NotifyConfig.of(DefaultNotifyTypes.MESSAGE, message)); - } - return defaults(this.notifications); - } - - public NotifyConfigBuilder defaultActionBar(@NotNull String message) { - notifications.add(NotifyConfig.of(DefaultNotifyTypes.ACTIONBAR, message)); - return defaults(this.notifications); - } - - public NotifyConfigBuilder defaultSound(@NotNull Sound sound, float volume, float pitch) { - return defaultSound(sound.name(), volume, pitch); - } - - public NotifyConfigBuilder defaultSound(@NotNull Sound sound, float volume) { - return defaultSound(sound, volume, 1.0f); - } - - public NotifyConfigBuilder defaultSound(@NotNull Sound sound) { - return defaultSound(sound, 1.0f); - } - - public NotifyConfigBuilder defaultSound(@NotNull String soundName, float volume, float pitch) { - notifications.add(NotifyConfig.of(DefaultNotifyTypes.SOUND, new SoundConfig(soundName, volume, pitch))); - return defaults(this.notifications); - } - - public NotifyConfigBuilder defaultSound(@NotNull String soundName, float volume) { - return defaultSound(soundName, volume, 1.0f); - } - - public NotifyConfigBuilder defaultSound(@NotNull String soundName) { - return defaultSound(soundName, 1.0f); - } - - public NotifyConfigBuilder defaultTitle(@Nullable String line1, @Nullable String line2, - @Range(from = 0L, to = Integer.MAX_VALUE) int fadeIn, - @Range(from = 0L, to = Integer.MAX_VALUE) int stay, - @Range(from = 0L, to = Integer.MAX_VALUE) int fadeOut) { - notifications.add(NotifyConfig.of(DefaultNotifyTypes.TITLE, TitleConfig.of(line1, line2, fadeIn, stay, fadeOut))); - return defaults(this.notifications); - } - - public NotifyConfigBuilder defaultTitle(@Nullable String line1, @Nullable String line2) { - return defaultTitle(line1, line2, 10, 60, 10); - } - - public NotifyConfigBuilder params(String... params) { - this.params = params; - return this; - } - - public NotifyConfigBuilder params(@NotNull List params) { - return params(params.toArray(new String[0])); - } - - - public NotifyConfigBuilder formatParam(UnaryOperator paramFormatter) { - this.paramFormatter = paramFormatter; - return this; - } - - @Override - protected @NotNull NotifyConfigBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredNotify build() { - return new ConfiguredNotify(buildManifest(), ParamsUtils.formatParams(this.paramFormatter, this.params)); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/serializable/SerializableBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/serializable/SerializableBuilder.java deleted file mode 100644 index 5f5d3a4..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/serializable/SerializableBuilder.java +++ /dev/null @@ -1,28 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.serializable; - -import cc.carm.lib.mineconfiguration.bukkit.builder.AbstractCraftBuilder; -import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredSerializable; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.jetbrains.annotations.NotNull; - -public class SerializableBuilder - extends AbstractCraftBuilder> { - - protected final @NotNull Class valueClass; - - public SerializableBuilder(@NotNull Class valueClass) { - this.valueClass = valueClass; - } - - @Override - protected @NotNull SerializableBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredSerializable build() { - return new ConfiguredSerializable<>(buildManifest(), valueClass); - } - -} - diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/sound/SoundConfigBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/sound/SoundConfigBuilder.java deleted file mode 100644 index 8cfed5c..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/sound/SoundConfigBuilder.java +++ /dev/null @@ -1,46 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.sound; - -import cc.carm.lib.mineconfiguration.bukkit.builder.AbstractCraftBuilder; -import cc.carm.lib.mineconfiguration.bukkit.data.SoundConfig; -import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredSound; -import org.bukkit.Sound; -import org.jetbrains.annotations.NotNull; - -public class SoundConfigBuilder extends AbstractCraftBuilder { - - - public @NotNull SoundConfigBuilder defaults(@NotNull Sound sound, float volume, float pitch) { - return defaults(new SoundConfig(sound.name(), sound, volume, pitch)); - } - - public @NotNull SoundConfigBuilder defaults(@NotNull Sound sound, float volume) { - return defaults(sound, volume, 1.0f); - } - - public @NotNull SoundConfigBuilder defaults(@NotNull Sound sound) { - return defaults(sound, 1.0f); - } - - public @NotNull SoundConfigBuilder defaults(@NotNull String soundName, float volume, float pitch) { - return defaults(new SoundConfig(soundName, volume, pitch)); - } - - public @NotNull SoundConfigBuilder defaults(@NotNull String soundName, float volume) { - return defaults(soundName, volume, 1.0f); - } - - public @NotNull SoundConfigBuilder defaults(@NotNull String soundName) { - return defaults(soundName, 1.0f); - } - - @Override - protected @NotNull SoundConfigBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredSound build() { - return new ConfiguredSound(buildManifest()); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/title/TitleConfigBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/title/TitleConfigBuilder.java deleted file mode 100644 index 2a204f2..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/title/TitleConfigBuilder.java +++ /dev/null @@ -1,82 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder.title; - -import cc.carm.lib.mineconfiguration.bukkit.builder.AbstractCraftBuilder; -import cc.carm.lib.mineconfiguration.bukkit.data.TitleConfig; -import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredTitle; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.Range; - -import java.util.List; -import java.util.function.Function; -import java.util.function.UnaryOperator; - -public class TitleConfigBuilder extends AbstractCraftBuilder { - - protected @NotNull String[] params = new String[0]; - - protected @Range(from = 0L, to = Integer.MAX_VALUE) int fadeIn = 10; - protected @Range(from = 0L, to = Integer.MAX_VALUE) int stay = 60; - protected @Range(from = 0L, to = Integer.MAX_VALUE) int fadeOut = 10; - - protected @NotNull ConfiguredTitle.TitleConsumer sendConsumer; - protected @NotNull Function<@NotNull String, @NotNull String> paramFormatter; - - public TitleConfigBuilder() { - this.sendConsumer = ConfiguredTitle.DEFAULT_TITLE_CONSUMER; - this.paramFormatter = ParamsUtils.DEFAULT_PARAM_FORMATTER; - } - - public @NotNull TitleConfigBuilder defaults(@Nullable String line1, - @Nullable String line2) { - return defaults(TitleConfig.of(line1, line2)); - } - - public @NotNull TitleConfigBuilder whenSend(@NotNull ConfiguredTitle.TitleConsumer consumer) { - this.sendConsumer = consumer; - return this; - } - - public TitleConfigBuilder params(String... params) { - this.params = params; - return this; - } - - public TitleConfigBuilder params(@NotNull List params) { - return params(params.toArray(new String[0])); - } - - public TitleConfigBuilder fadeIn(@Range(from = 0L, to = Integer.MAX_VALUE) int fadeIn) { - this.fadeIn = fadeIn; - return this; - } - - public TitleConfigBuilder stay(@Range(from = 0L, to = Integer.MAX_VALUE) int stay) { - this.stay = stay; - return this; - } - - public TitleConfigBuilder fadeOut(@Range(from = 0L, to = Integer.MAX_VALUE) int fadeOut) { - this.fadeOut = fadeOut; - return this; - } - - public TitleConfigBuilder formatParam(UnaryOperator paramFormatter) { - this.paramFormatter = paramFormatter; - return this; - } - - @Override - protected @NotNull TitleConfigBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredTitle build() { - return new ConfiguredTitle( - buildManifest(), ParamsUtils.formatParams(this.paramFormatter, this.params), - this.sendConsumer, this.fadeIn, this.stay, this.fadeOut - ); - } -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/NotifyConfig.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/NotifyConfig.java index 6b2e7b8..ae33ced 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/NotifyConfig.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/NotifyConfig.java @@ -1,7 +1,7 @@ package cc.carm.lib.mineconfiguration.bukkit.data; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.NotifyCache; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.NotifyType; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.NotifyCache; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.NotifyType; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/SoundConfig.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/SoundConfig.java index c334354..e2f4d6d 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/SoundConfig.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/SoundConfig.java @@ -36,12 +36,16 @@ public class SoundConfig { this.pitch = pitch; } - public void playTo(Player player) { - if (type == null) return; - player.playSound(player.getLocation(), type, volume, pitch); + public void playTo(@NotNull Player player) { + playTo(player, player.getLocation()); } - public void playAt(Location location) { + public void playTo(@NotNull Player player, @NotNull Location location) { + if (type == null) return; + player.playSound(location, type, volume, pitch); + } + + public void playAt(@NotNull Location location) { if (type == null) return; if (location.getWorld() == null) return; location.getWorld().playSound(location, type, volume, pitch); @@ -51,6 +55,10 @@ public class SoundConfig { Bukkit.getOnlinePlayers().forEach(this::playTo); } + public void playToAll(@NotNull Location location) { + Bukkit.getOnlinePlayers().forEach(player -> playTo(player, location)); + } + public @NotNull String getTypeName() { return typeName; } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/TextConfig.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/TextConfig.java deleted file mode 100644 index cf58eaa..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/TextConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.data; - -import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class TextConfig extends AbstractText { - - public TextConfig(@NotNull String message) { - super(CommandSender.class, message); - } - - @Contract("!null,-> !null") - public static @Nullable TextConfig of(@Nullable String message) { - if (message == null) return null; - else return new TextConfig(message); - } - - public static @NotNull List of(@Nullable List messages) { - if (messages == null || messages.isEmpty()) return new ArrayList<>(); - else return messages.stream().map(TextConfig::of).collect(Collectors.toList()); - } - - public static @NotNull List of(@NotNull String... messages) { - return of(Arrays.asList(messages)); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/TitleConfig.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/TitleConfig.java index b6d88d8..6428bf8 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/TitleConfig.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/data/TitleConfig.java @@ -1,7 +1,8 @@ package cc.carm.lib.mineconfiguration.bukkit.data; -import cc.carm.lib.configuration.core.source.ConfigurationWrapper; -import cc.carm.lib.mineconfiguration.bukkit.utils.TextParser; +import cc.carm.lib.configuration.source.section.ConfigureSection; +import cc.carm.lib.configuration.value.text.PreparedText; +import cc.carm.lib.mineconfiguration.bukkit.utils.MessageUtils; import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredTitle; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -10,47 +11,31 @@ import org.jetbrains.annotations.Range; import java.util.LinkedHashMap; import java.util.Map; -import java.util.Optional; public class TitleConfig { public static @NotNull TitleConfig of(@Nullable String line1, @Nullable String line2) { - return of( - Optional.ofNullable(line1).map(TextConfig::of).orElse(null), - Optional.ofNullable(line2).map(TextConfig::of).orElse(null) - ); - } - - public static @NotNull TitleConfig of(@Nullable TextConfig line1, @Nullable TextConfig line2) { return new TitleConfig(line1, line2); } public static @NotNull TitleConfig of(@Nullable String line1, @Nullable String line2, int fadeIn, int stay, int fadeOut) { - return of( - Optional.ofNullable(line1).map(TextConfig::of).orElse(null), - Optional.ofNullable(line2).map(TextConfig::of).orElse(null), - fadeIn, stay, fadeOut - ); - } - - public static @NotNull TitleConfig of(@Nullable TextConfig line1, @Nullable TextConfig line2, - int fadeIn, int stay, int fadeOut) { return new TitleConfig(line1, line2, fadeIn, stay, fadeOut); } - protected @Nullable TextConfig line1; - protected @Nullable TextConfig line2; + protected @Nullable String line1; + protected @Nullable String line2; - protected final int fadeIn; - protected final int stay; - protected final int fadeOut; + protected @Range(from = 0L, to = Integer.MAX_VALUE) int fadeIn = 10; + protected @Range(from = 0L, to = Integer.MAX_VALUE) int stay = 60; + protected @Range(from = 0L, to = Integer.MAX_VALUE) int fadeOut = 10; - protected TitleConfig(@Nullable TextConfig line1, @Nullable TextConfig line2) { - this(line1, line2, -1, -1, -1); + protected TitleConfig(@Nullable String line1, @Nullable String line2) { + this.line1 = line1; + this.line2 = line2; } - protected TitleConfig(@Nullable TextConfig line1, @Nullable TextConfig line2, int fadeIn, int stay, int fadeOut) { + protected TitleConfig(@Nullable String line1, @Nullable String line2, int fadeIn, int stay, int fadeOut) { this.line1 = line1; this.line2 = line2; this.fadeIn = fadeIn; @@ -58,30 +43,50 @@ public class TitleConfig { this.fadeOut = fadeOut; } - public int getFadeIn() { + public int stay() { + return stay; + } + + public void stay(int stay) { + this.stay = stay; + } + + public @Nullable String line1() { + return line1; + } + + public void line1(@Nullable String line1) { + this.line1 = line1; + } + + public @Nullable String line2() { + return line2; + } + + public void line2(@Nullable String line2) { + this.line2 = line2; + } + + public int fadeIn() { return fadeIn; } - public int getFadeOut() { + public void fadeIn(int fadeIn) { + this.fadeIn = fadeIn; + } + + public int fadeOut() { return fadeOut; } - public int getStay() { - return stay; + public void fadeOut(int fadeOut) { + this.fadeOut = fadeOut; } public boolean isStandardTime() { return this.fadeIn == 10 && this.stay == 60 && this.fadeOut == 10; } - public @Nullable TextConfig getLine1() { - return line1; - } - - public @Nullable TextConfig getLine2() { - return line2; - } - public void send(@NotNull Player player, @NotNull Map placeholders, @Nullable ConfiguredTitle.TitleConsumer sendConsumer) { @@ -105,28 +110,28 @@ public class TitleConfig { if (sendConsumer == null) return; sendConsumer.send( player, fadeIn, stay, fadeOut, - parseLine(this.line1, player, placeholders), - parseLine(this.line2, player, placeholders) + parseLine(player, this.line1, placeholders), + parseLine(player, this.line2, placeholders) ); } - protected @NotNull String parseLine(@Nullable TextConfig text, - @NotNull Player player, @NotNull Map placeholders) { - if (text == null) return ""; - else return TextParser.parseText(player, text.getMessage(), placeholders); + protected @NotNull String parseLine(@NotNull Player player, @Nullable String text, + @NotNull Map placeholders) { + return text == null ? "" : MessageUtils.parseMessage(player, PreparedText.setPlaceholders(text, placeholders)); } public @NotNull Map serialize() { Map map = new LinkedHashMap<>(); - if (this.line1 != null) map.put("line1", this.line1.getMessage()); - if (this.line2 != null) map.put("line2", this.line2.getMessage()); - if (this.fadeIn > 0) map.put("fadeIn", this.fadeIn); - if (this.stay > 0) map.put("stay", this.stay); - if (this.fadeOut > 0) map.put("fadeOut", this.fadeOut); + if (this.line1 != null) map.put("line1", this.line1); + if (this.line2 != null) map.put("line2", this.line2); + if (this.fadeIn > 0 && this.fadeIn != 10) map.put("fadeIn", this.fadeIn); + if (this.stay > 0 && this.stay != 60) map.put("stay", this.stay); + if (this.fadeOut > 0 && this.fadeOut != 10) map.put("fadeOut", this.fadeOut); + return map; } - public static @Nullable TitleConfig deserialize(@NotNull ConfigurationWrapper section) { + public static @Nullable TitleConfig deserialize(@NotNull ConfigureSection section) { String line1 = section.getString("line1"); String line2 = section.getString("line2"); if (line1 == null && line2 == null) return null; diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitConfigFactory.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitConfigFactory.java new file mode 100644 index 0000000..efa39cd --- /dev/null +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitConfigFactory.java @@ -0,0 +1,57 @@ +package cc.carm.lib.mineconfiguration.bukkit.source; + +import cc.carm.lib.configuration.commentable.Commentable; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.source.file.FileConfigFactory; +import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; + +import java.io.File; + +public class BukkitConfigFactory extends FileConfigFactory, BukkitConfigFactory> { + + public static BukkitConfigFactory from(@NotNull String path) { + return new BukkitConfigFactory(new File(path)); + } + + public static BukkitConfigFactory from(@NotNull File file) { + return new BukkitConfigFactory(file); + } + + public static BukkitConfigFactory from(@NotNull File parent, @NotNull String configName) { + return new BukkitConfigFactory(new File(parent, configName)); + } + + public static BukkitConfigFactory from(@NotNull Plugin plugin, @NotNull String configName) { + return from(plugin.getDataFolder(), configName); + } + + public BukkitConfigFactory(@NotNull File file) { + super(file); + } + + @Override + protected BukkitConfigFactory self() { + return this; + } + + @Override + public @NotNull ConfigurationHolder build() { + + File configFile = this.file; + String sourcePath = this.resourcePath; + + Commentable.registerMeta(this.initializer); // Register commentable meta types + + return new ConfigurationHolder(this.adapters, this.options, this.metadata, this.initializer) { + final @NotNull BukkitSource source = new BukkitSource(this, configFile, sourcePath); + + @Override + public @NotNull BukkitSource config() { + return this.source; + } + }; + } + + +} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitConfigProvider.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitConfigProvider.java deleted file mode 100644 index 3aac3d2..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitConfigProvider.java +++ /dev/null @@ -1,79 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.source; - -import cc.carm.lib.configuration.core.ConfigInitializer; -import cc.carm.lib.configuration.core.source.ConfigurationComments; -import cc.carm.lib.yamlcommentupdater.CommentedYAML; -import cc.carm.lib.yamlcommentupdater.CommentedYAMLWriter; -import org.bukkit.configuration.ConfigurationSection; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.File; -import java.util.List; -import java.util.Set; - -public class BukkitConfigProvider extends CraftConfigProvider implements CommentedYAML { - - protected static final char SEPARATOR = '.'; - - protected @NotNull ConfigurationComments comments = new ConfigurationComments(); - - public BukkitConfigProvider(@NotNull File file) { - super(file); - } - - public void initializeConfig() { - this.configuration = YamlConfiguration.loadConfiguration(file); - this.initializer = new ConfigInitializer<>(this); - } - - @Override - public @NotNull CraftSectionWrapper getConfiguration() { - return CraftSectionWrapper.of(this.configuration); - } - - @Override - public void save() throws Exception { - try { - CommentedYAMLWriter.writeWithComments(this, this.file); - } catch (Exception ex) { - configuration.save(file); - throw ex; - } - } - - @Override - public @NotNull ConfigurationComments getComments() { - return this.comments; - } - - @Override - public String serializeValue(@NotNull String key, @NotNull Object value) { - FileConfiguration temp = new YamlConfiguration(); - temp.set(key, value); - return temp.saveToString(); - } - - @Override - public Set getKeys(@Nullable String sectionKey, boolean deep) { - if (sectionKey == null) return configuration.getKeys(deep); - - ConfigurationSection section = configuration.getConfigurationSection(sectionKey); - if (section == null) return null; - - return section.getKeys(deep); - } - - @Override - public @Nullable Object getValue(@NotNull String key) { - return configuration.get(key); - } - - @Override - public @Nullable List getHeaderComments(@Nullable String key) { - return comments.getHeaderComment(key); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitSection.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitSection.java new file mode 100644 index 0000000..4340ff7 --- /dev/null +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitSection.java @@ -0,0 +1,83 @@ +package cc.carm.lib.mineconfiguration.bukkit.source; + +import cc.carm.lib.configuration.source.section.ConfigureSection; +import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.UnmodifiableView; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class BukkitSection implements ConfigureSection { + + protected final @NotNull BukkitSource source; + protected final @Nullable BukkitSection parent; + protected final @NotNull ConfigurationSection data; + + public BukkitSection(@NotNull BukkitSource source, @Nullable BukkitSection parent, + @NotNull ConfigurationSection data) { + this.source = source; + this.parent = parent; + this.data = data; + } + + @Override + public @NotNull BukkitSource source() { + return this.source; + } + + @Override + public @Nullable BukkitSection parent() { + return this.parent; + } + + public @NotNull ConfigurationSection data() { + return this.data; + } + + @Override + public @NotNull Set getKeys(boolean deep) { + return data().getKeys(deep); + } + + @Override + public @NotNull @UnmodifiableView Map getValues(boolean deep) { + return data().getValues(deep); + } + + @Override + public void set(@NotNull String path, @Nullable Object value) { + data().set(path, value); + } + + @Override + public boolean contains(@NotNull String path) { + return data().contains(path); + } + + @Override + public @Nullable List getList(@NotNull String path) { + return data().getList(path); + } + + @Override + public @Nullable ConfigureSection getSection(@NotNull String path) { + Object value = get(path); + if (value instanceof ConfigureSection) { + return (ConfigureSection) value; + } + return null; + } + + @Override + public @Nullable Object get(@NotNull String path) { + Object value = data().get(path); + if (value instanceof ConfigurationSection) { + return new BukkitSection(source(), this, (ConfigurationSection) value); + } + return value; + } + +} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitSource.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitSource.java new file mode 100644 index 0000000..abef09f --- /dev/null +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/BukkitSource.java @@ -0,0 +1,109 @@ +package cc.carm.lib.mineconfiguration.bukkit.source; + +import cc.carm.lib.configuration.commentable.Commentable; +import cc.carm.lib.configuration.commentable.CommentableOptions; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.source.file.FileConfigSource; +import cc.carm.lib.configuration.source.section.ConfigureSection; +import cc.carm.lib.yamlcommentupdater.CommentedSection; +import cc.carm.lib.yamlcommentupdater.CommentedYAMLWriter; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.io.File; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +public class BukkitSource extends FileConfigSource + implements CommentedSection { + + protected @Nullable BukkitSection rootSection; + + public BukkitSource(@NotNull ConfigurationHolder holder, + @NotNull File file, @Nullable String resourcePath) { + super(holder, System.currentTimeMillis(), file, resourcePath); + initialize(); + } + + public void initialize() { + try { + initializeFile(); + onReload(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected BukkitSource self() { + return this; + } + + @Override + public @NotNull YamlConfiguration original() { + return (YamlConfiguration) section().data(); // #data() of Root Section always returns YamlConfiguration + } + + @Override + public @NotNull BukkitSection section() { + return Objects.requireNonNull(rootSection, "Root section has not been initialized"); + } + + @Override + public void save() throws Exception { + CommentedYAMLWriter writer = new CommentedYAMLWriter( + String.valueOf(this.separator()), 2, + holder.options().get(CommentableOptions.COMMENT_EMPTY_VALUE) + ); + try { + fileWriter(w -> w.write(writer.saveToString(this))); + } catch (Exception ex) { + fileWriter(w -> w.write(original().saveToString())); + } + } + + @Override + protected void onReload() throws Exception { + YamlConfiguration configuration = fileReader(YamlConfiguration::loadConfiguration); + this.rootSection = new BukkitSection(this, null, configuration); + } + + @Override + public String serializeValue(@NotNull String key, @NotNull Object value) { + FileConfiguration temp = new YamlConfiguration(); + temp.set(key, value); + return temp.saveToString(); + } + + @Override + public @Nullable Set getKeys(@Nullable String sectionKey, boolean deep) { + if (sectionKey == null) return section().getKeys(deep); + ConfigureSection sub = section().getSection(sectionKey); + if (sub == null) return null; + return sub.getKeys(deep); + } + + @Override + public @Nullable Object getValue(@NotNull String key) { + return get(key); + } + + @Override + public @Nullable String getInlineComment(@NotNull String key) { + return Commentable.getInlineComment(holder(), key); + } + + @Override + public @Nullable List getHeaderComments(@Nullable String key) { + return Commentable.getHeaderComments(holder(), key); + } + + @Override + public @Nullable List getFooterComments(@Nullable String key) { + return Commentable.getFooterComments(holder(), key); + } + +} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/CraftConfigProvider.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/CraftConfigProvider.java deleted file mode 100644 index ea58a9c..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/CraftConfigProvider.java +++ /dev/null @@ -1,43 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.source; - -import cc.carm.lib.configuration.core.ConfigInitializer; -import cc.carm.lib.configuration.core.source.impl.FileConfigProvider; -import org.bukkit.configuration.file.YamlConfiguration; -import org.jetbrains.annotations.NotNull; - -import java.io.File; - -public abstract class CraftConfigProvider extends FileConfigProvider { - - public static final char SEPARATOR = '.'; - - protected ConfigInitializer initializer; - protected YamlConfiguration configuration; - - public CraftConfigProvider(@NotNull File file) { - super(file); - } - - public abstract void initializeConfig(); - - @Override - public @NotNull CraftSectionWrapper getConfiguration() { - return CraftSectionWrapper.of(this.configuration); - } - - @Override - protected void onReload() throws Exception { - configuration.load(getFile()); - } - - @Override - public void save() throws Exception { - configuration.save(getFile()); - } - - @Override - public @NotNull ConfigInitializer getInitializer() { - return this.initializer; - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/CraftSectionWrapper.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/CraftSectionWrapper.java deleted file mode 100644 index 1698f89..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/source/CraftSectionWrapper.java +++ /dev/null @@ -1,75 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.source; - -import cc.carm.lib.configuration.core.source.ConfigurationWrapper; -import org.bukkit.configuration.ConfigurationSection; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; - -public class CraftSectionWrapper implements ConfigurationWrapper { - - protected final ConfigurationSection configuration; - - protected CraftSectionWrapper(ConfigurationSection configuration) { - this.configuration = configuration; - } - - @Override - public @NotNull ConfigurationSection getSource() { - return this.configuration; - } - - @Override - public @NotNull Set getKeys(boolean deep) { - return this.configuration.getKeys(deep); - } - - @Override - public @NotNull Map getValues(boolean deep) { - return this.configuration.getValues(deep); - } - - @Override - public void set(@NotNull String path, @Nullable Object value) { - this.configuration.set(path, value); - } - - @Override - public boolean contains(@NotNull String path) { - return this.configuration.contains(path); - } - - @Override - public @Nullable Object get(@NotNull String path) { - return this.configuration.get(path); - } - - @Override - public boolean isList(@NotNull String path) { - return this.configuration.isList(path); - } - - @Override - public @Nullable List getList(@NotNull String path) { - return this.configuration.getList(path); - } - - @Override - public boolean isConfigurationSection(@NotNull String path) { - return this.configuration.isConfigurationSection(path); - } - - @Override - public @Nullable CraftSectionWrapper getConfigurationSection(@NotNull String path) { - return Optional.ofNullable(configuration.getConfigurationSection(path)) - .map(CraftSectionWrapper::of).orElse(null); - } - - public static CraftSectionWrapper of(ConfigurationSection section) { - return new CraftSectionWrapper(section); - } -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/utils/TextParser.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/utils/MessageUtils.java similarity index 54% rename from platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/utils/TextParser.java rename to platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/utils/MessageUtils.java index 30b29eb..ff82964 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/utils/TextParser.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/utils/MessageUtils.java @@ -1,7 +1,6 @@ package cc.carm.lib.mineconfiguration.bukkit.utils; import cc.carm.lib.easyplugin.utils.ColorParser; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -10,28 +9,26 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -public class TextParser { +public class MessageUtils { - private TextParser() { + private MessageUtils() { } - @Contract("_,!null,_->!null") - public static @Nullable String parseText(@Nullable CommandSender sender, @Nullable String message, @NotNull Map placeholders) { + @Contract("_,!null->!null") + public static @Nullable String parseMessage(@Nullable CommandSender sender, @Nullable String message) { if (message == null) return null; if (sender instanceof Player && hasPlaceholderAPI()) { message = PlaceholderAPIHelper.parseMessages((Player) sender, message); } - return ColorParser.parse(ParamsUtils.setPlaceholders(message, placeholders)); + return ColorParser.parse(message); } - public static @NotNull List parseList(@Nullable CommandSender sender, List messages, @NotNull Map placeholders) { + public static @NotNull List parseMessage(@Nullable CommandSender sender, @NotNull List messages) { if (sender instanceof Player && hasPlaceholderAPI()) { messages = PlaceholderAPIHelper.parseMessages((Player) sender, messages); } - return ColorParser.parse(messages.stream().map(s -> ParamsUtils.setPlaceholders(s, placeholders)).collect(Collectors.toList())); + return ColorParser.parse(messages); } public static boolean hasPlaceholderAPI() { diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java index 57309d1..0efe089 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessage.java @@ -1,11 +1,9 @@ package cc.carm.lib.mineconfiguration.bukkit.value; -import cc.carm.lib.configuration.core.value.ValueManifest; -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.utils.ParamsUtils; -import cc.carm.lib.mineconfiguration.common.value.ConfigMessage; +import cc.carm.lib.configuration.value.ValueManifest; +import cc.carm.lib.configuration.value.text.ConfiguredText; +import cc.carm.lib.configuration.value.text.data.TextContents; +import cc.carm.lib.mineconfiguration.bukkit.utils.MessageUtils; import com.cryptomorin.xseries.messages.ActionBar; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -13,52 +11,61 @@ import org.bukkit.entity.Player; 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; -public class ConfiguredMessage extends ConfigMessage { +public class ConfiguredMessage extends ConfiguredText { @NotNull - public static CraftMessageValueBuilder<@Nullable M> create(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser) { - return CraftConfigValue.builder().createMessage().asValue(messageParser); + public static ConfiguredMessage.Builder create( + @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> compiler + ) { + return new Builder().compiler(compiler); } - public static CraftMessageValueBuilder asString() { - return CraftConfigValue.builder().createMessage().asStringValue(); + public static Builder asString() { + return create((sender, message) -> message) + .parser(MessageUtils::parseMessage) + .dispatcher((sender, message) -> message.forEach(sender::sendMessage)); } public static ConfiguredMessage ofString() { return asString().build(); } - public static ConfiguredMessage ofString(@NotNull String defaultMessage) { - return asString().defaults(defaultMessage).build(); + public static ConfiguredMessage ofString(@NotNull String... messages) { + return asString().defaults(messages).build(); } - public ConfiguredMessage(@NotNull ValueManifest manifest, @NotNull String[] params, - @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull CommandSender, @NotNull M> sendFunction) { - super(manifest, TextConfig.class, params, messageParser, sendFunction, TextConfig::of); + public ConfiguredMessage(@NotNull ValueManifest manifest, + @NotNull BiFunction parser, + @NotNull BiFunction compiler, + @NotNull BiConsumer> dispatcher, + @NotNull String[] params) { + super(manifest, parser, compiler, dispatcher, params); } - public void sendActionBar(Player player, String... values) { - sendActionBar(player, ParamsUtils.buildParams(this.params, values)); + public void sendActionBar(Player player, Object... values) { + ActionBar.sendActionBar(player, prepare(values).parseLine(player, (sender, message) -> message)); } - public void sendActionBar(Player player, Map placeholders) { - ActionBar.sendActionBar(player, parseString(player, placeholders)); + public void print(Object... values) { + prepare(values).to(Bukkit.getConsoleSender()); } - @Override - public @NotNull Collection getAllReceivers() { - List senders = new ArrayList<>(); - senders.add(Bukkit.getConsoleSender()); - senders.addAll(Bukkit.getOnlinePlayers()); - return senders; + public static class Builder extends ConfiguredText.Builder> { + + @Override + public @NotNull ConfiguredMessage build() { + return new ConfiguredMessage<>(buildManifest(), this.parser, this.compiler, this.dispatcher, this.params); + } + + @Override + public @NotNull ConfiguredMessage.Builder self() { + return this; + } } + } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessageList.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessageList.java deleted file mode 100644 index cc17660..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredMessageList.java +++ /dev/null @@ -1,47 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.value; - -import cc.carm.lib.configuration.core.value.ValueManifest; -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 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.function.BiConsumer; -import java.util.function.BiFunction; - -public class ConfiguredMessageList extends ConfigMessageList { - - @NotNull - public static CraftMessageListBuilder create(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser) { - return CraftConfigValue.builder().createMessage().asList(messageParser); - } - - public static CraftMessageListBuilder asStrings() { - return CraftConfigValue.builder().createMessage().asStringList(); - } - - public static ConfiguredMessageList ofStrings(@NotNull String... defaultMessages) { - return asStrings().defaults(defaultMessages).build(); - } - - public ConfiguredMessageList(@NotNull ValueManifest> manifest, @NotNull String[] params, - @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull CommandSender, @NotNull List> sendFunction) { - super(manifest, TextConfig.class, params, messageParser, sendFunction, TextConfig::of); - } - - @Override - public @NotNull Collection getAllReceivers() { - List senders = new ArrayList<>(); - senders.add(Bukkit.getConsoleSender()); - senders.addAll(Bukkit.getOnlinePlayers()); - return senders; - } -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredSerializable.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredSerializable.java deleted file mode 100644 index 67fcbe8..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredSerializable.java +++ /dev/null @@ -1,50 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.value; - -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.bukkit.CraftConfigValue; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Optional; - -public class ConfiguredSerializable extends CraftConfigValue { - - public static ConfiguredSerializable of(@NotNull Class valueClass) { - return of(valueClass, null); - } - - public static ConfiguredSerializable of(@NotNull Class valueClass, - @Nullable V defaultValue) { - return builder().ofSerializable(valueClass).defaults(defaultValue).build(); - } - - protected final @NotNull Class valueClass; - - public ConfiguredSerializable(@NotNull ValueManifest manifest, @NotNull Class valueClass) { - super(manifest); - this.valueClass = valueClass; - } - - @Override - public @Nullable T get() { - if (isExpired()) { // 已过时的数据,需要重新解析一次。 - try { - // 若未出现错误,则直接更新缓存并返回。 - return updateCache(getBukkitConfig().get(getConfigPath(), getDefaultValue(), valueClass)); - } catch (Exception e) { - // 出现了解析错误,提示并返回默认值。 - e.printStackTrace(); - return getDefaultValue(); - } - } else return Optional.ofNullable(getCachedValue()).orElse(defaultValue); - } - - @Override - public void set(@Nullable T value) { - updateCache(value); - setValue(value); - } - - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredSound.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredSound.java index 3fe67ef..d4b662f 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredSound.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredSound.java @@ -1,10 +1,12 @@ package cc.carm.lib.mineconfiguration.bukkit.value; -import cc.carm.lib.configuration.core.function.ConfigValueParser; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.configuration.core.value.type.ConfiguredValue; -import cc.carm.lib.mineconfiguration.bukkit.CraftConfigValue; -import cc.carm.lib.mineconfiguration.bukkit.builder.sound.SoundConfigBuilder; + +import cc.carm.lib.configuration.adapter.ValueAdapter; +import cc.carm.lib.configuration.adapter.ValueType; +import cc.carm.lib.configuration.builder.AbstractConfigBuilder; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.value.ValueManifest; +import cc.carm.lib.configuration.value.standard.ConfiguredValue; import cc.carm.lib.mineconfiguration.bukkit.data.SoundConfig; import org.bukkit.Location; import org.bukkit.Sound; @@ -15,47 +17,57 @@ import java.util.Optional; public class ConfiguredSound extends ConfiguredValue { - public static @NotNull SoundConfigBuilder create() { - return CraftConfigValue.builder().createSound(); + public static @NotNull Builder create() { + return new Builder(); } public static @NotNull ConfiguredSound of(Sound sound) { - return CraftConfigValue.builder().createSound().defaults(sound).build(); + return create().defaults(sound).build(); } public static @NotNull ConfiguredSound of(Sound sound, float volume) { - return CraftConfigValue.builder().createSound().defaults(sound, volume).build(); + return create().defaults(sound, volume).build(); } public static @NotNull ConfiguredSound of(Sound sound, float volume, float pitch) { - return CraftConfigValue.builder().createSound().defaults(sound, volume, pitch).build(); + return create().defaults(sound, volume, pitch).build(); } public static @NotNull ConfiguredSound of(String soundName) { - return CraftConfigValue.builder().createSound().defaults(soundName).build(); + return create().defaults(soundName).build(); } public static @NotNull ConfiguredSound of(String soundName, float volume) { - return CraftConfigValue.builder().createSound().defaults(soundName, volume).build(); + return create().defaults(soundName, volume).build(); } public static @NotNull ConfiguredSound of(String soundName, float volume, float pitch) { - return CraftConfigValue.builder().createSound().defaults(soundName, volume, pitch).build(); + return create().defaults(soundName, volume, pitch).build(); } - public ConfiguredSound(@NotNull ValueManifest manifest) { - super(manifest, SoundConfig.class, getSoundParser(), SoundConfig::serialize); + + public static final ValueType SOUND_TYPE = ValueType.of(SoundConfig.class); + public static final ValueAdapter SOUND_ADAPTER = new ValueAdapter<>(SOUND_TYPE, + (holder, type, value) -> value.serialize(), + (holder, type, value) -> { + String conf = holder.deserialize(String.class, value); + return SoundConfig.deserialize(conf); + } + ); + + public ConfiguredSound(@NotNull ValueManifest manifest, @NotNull ValueAdapter adapter) { + super(manifest, adapter); } - public void setSound(@NotNull Sound sound) { - setSound(sound, 1.0f); + public void set(@NotNull Sound sound) { + set(sound, 1.0f); } - public void setSound(@NotNull Sound sound, float volume) { - setSound(sound, volume, 1.0f); + public void set(@NotNull Sound sound, float volume) { + set(sound, volume, 1.0f); } - public void setSound(@NotNull Sound sound, float volume, float pitch) { + public void set(@NotNull Sound sound, float volume, float pitch) { set(new SoundConfig(sound.name(), sound, volume, pitch)); } @@ -71,8 +83,53 @@ public class ConfiguredSound extends ConfiguredValue { Optional.ofNullable(get()).ifPresent(s -> s.playAt(location)); } - public static ConfigValueParser getSoundParser() { - return ConfigValueParser.castToString().andThen((s, d) -> SoundConfig.deserialize(s)); + public static class Builder extends AbstractConfigBuilder, Builder> { + + protected @NotNull ValueAdapter adapter = SOUND_ADAPTER; + + protected Builder() { + super(ConfigurationHolder.class, SOUND_TYPE); + } + + public @NotNull Builder adapter(@NotNull ValueAdapter adapter) { + this.adapter = adapter; + return this; + } + + public @NotNull Builder defaults(@NotNull Sound sound, float volume, float pitch) { + return defaults(new SoundConfig(sound.name(), sound, volume, pitch)); + } + + public @NotNull Builder defaults(@NotNull Sound sound, float volume) { + return defaults(sound, volume, 1.0f); + } + + public @NotNull Builder defaults(@NotNull Sound sound) { + return defaults(sound, 1.0f); + } + + public @NotNull Builder defaults(@NotNull String soundName, float volume, float pitch) { + return defaults(new SoundConfig(soundName, volume, pitch)); + } + + public @NotNull Builder defaults(@NotNull String soundName, float volume) { + return defaults(soundName, volume, 1.0f); + } + + public @NotNull Builder defaults(@NotNull String soundName) { + return defaults(soundName, 1.0f); + } + + @Override + protected @NotNull Builder self() { + return this; + } + + @Override + public @NotNull ConfiguredSound build() { + return new ConfiguredSound(buildManifest(), this.adapter); + } } + } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredTitle.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredTitle.java index f7236e5..be78243 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredTitle.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/ConfiguredTitle.java @@ -1,13 +1,14 @@ package cc.carm.lib.mineconfiguration.bukkit.value; -import cc.carm.lib.configuration.core.function.ConfigValueParser; -import cc.carm.lib.configuration.core.source.ConfigurationWrapper; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.configuration.core.value.type.ConfiguredSection; -import cc.carm.lib.mineconfiguration.bukkit.CraftConfigValue; -import cc.carm.lib.mineconfiguration.bukkit.builder.title.TitleConfigBuilder; +import cc.carm.lib.configuration.adapter.ValueAdapter; +import cc.carm.lib.configuration.adapter.ValueType; +import cc.carm.lib.configuration.builder.AbstractConfigBuilder; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.source.section.ConfigureSection; +import cc.carm.lib.configuration.value.ValueManifest; +import cc.carm.lib.configuration.value.standard.ConfiguredValue; +import cc.carm.lib.configuration.value.text.function.TextParser; import cc.carm.lib.mineconfiguration.bukkit.data.TitleConfig; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; import com.cryptomorin.xseries.messages.Titles; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -15,17 +16,20 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Range; +import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Predicate; +import java.util.function.UnaryOperator; -public class ConfiguredTitle extends ConfiguredSection { +public class ConfiguredTitle extends ConfiguredValue { public static final @NotNull ConfiguredTitle.TitleConsumer DEFAULT_TITLE_CONSUMER = Titles::sendTitle; - public static TitleConfigBuilder create() { - return CraftConfigValue.builder().createTitle(); + public static Builder create() { + return new Builder(); } public static ConfiguredTitle of(@Nullable String line1, @Nullable String line2) { @@ -37,41 +41,53 @@ public class ConfiguredTitle extends ConfiguredSection { return create().defaults(line1, line2).fadeIn(fadeIn).stay(stay).fadeOut(fadeOut).build(); } + public static final ValueType TITLE_TYPE = ValueType.of(TitleConfig.class); + public static final ValueAdapter TITLE_ADAPTER = new ValueAdapter<>(TITLE_TYPE, + (holder, type, value) -> value.serialize(), + (holder, type, value) -> { + ConfigureSection section = holder.deserialize(ConfigureSection.class, value); + return TitleConfig.deserialize(section); + } + ); + protected final @NotNull ConfiguredTitle.TitleConsumer sendConsumer; + + protected final @NotNull UnaryOperator paramBuilder; protected final @NotNull String[] params; - protected final int fadeIn; - protected final int stay; - protected final int fadeOut; - - public ConfiguredTitle(@NotNull ValueManifest manifest, @NotNull String[] params, - @NotNull ConfiguredTitle.TitleConsumer sendConsumer, - int fadeIn, int stay, int fadeOut) { - super(manifest, TitleConfig.class, getTitleParser(), TitleConfig::serialize); + public ConfiguredTitle(@NotNull ValueManifest manifest, ValueAdapter adapter, + @NotNull UnaryOperator paramBuilder, @NotNull String[] params, + @NotNull ConfiguredTitle.TitleConsumer sendConsumer) { + super(manifest, adapter); + this.paramBuilder = paramBuilder; this.sendConsumer = sendConsumer; this.params = params; - this.fadeIn = fadeIn; - this.stay = stay; - this.fadeOut = fadeOut; } - @Range(from = 0L, to = Integer.MAX_VALUE) - public int getFadeInTicks() { - return fadeIn; + public void set(Consumer handler) { + TitleConfig conf = get(); + handler.accept(conf); + set(conf); } - @Range(from = 0L, to = Integer.MAX_VALUE) - public int getStayTicks() { - return stay; + public void setLine1(@Nullable String line1) { + set(conf -> conf.line1(line1)); } - @Range(from = 0L, to = Integer.MAX_VALUE) - public int getFadeOutTicks() { - return fadeOut; + public void setLine2(@Nullable String line2) { + set(conf -> conf.line2(line2)); } - public @NotNull ConfiguredTitle.TitleConsumer getSendConsumer() { - return sendConsumer; + public void setFadeIn(int fadeIn) { + set(conf -> conf.fadeIn(fadeIn)); + } + + public void setStay(int stay) { + set(conf -> conf.stay(stay)); + } + + public void setFadeOut(int fadeOut) { + set(conf -> conf.fadeOut(fadeOut)); } public void send(@NotNull Player player, Object... values) { @@ -79,14 +95,12 @@ public class ConfiguredTitle extends ConfiguredSection { } public void send(@NotNull Player player, @NotNull String[] params, @NotNull Object[] values) { - send(player, ParamsUtils.buildParams(params, values)); + send(player, TextParser.buildParams(paramBuilder, params, values)); } public void send(@NotNull Player player, @NotNull Map placeholders) { TitleConfig config = get(); - if (config != null) { - config.send(player, fadeIn, stay, fadeOut, placeholders, sendConsumer); - } + if (config != null) config.send(player, placeholders, sendConsumer); } public void sendToAll(Object... values) { @@ -94,7 +108,7 @@ public class ConfiguredTitle extends ConfiguredSection { } public void sendToAll(@NotNull String[] params, @NotNull Object[] values) { - sendToAll(ParamsUtils.buildParams(params, values)); + sendToAll(TextParser.buildParams(paramBuilder, params, values)); } public void sendToAll(@NotNull Map placeholders) { @@ -112,11 +126,7 @@ public class ConfiguredTitle extends ConfiguredSection { @NotNull Function<@NotNull Player, Object[]> eachValues) { Predicate predicate = Optional.ofNullable(limiter).orElse(r -> true); Bukkit.getOnlinePlayers().stream().filter(predicate) - .forEach(r -> send(r, ParamsUtils.buildParams(params, eachValues.apply(r)))); - } - - public static ConfigValueParser, TitleConfig> getTitleParser() { - return (s, d) -> TitleConfig.deserialize(s); + .forEach(r -> send(r, eachValues.apply(r))); } @FunctionalInterface @@ -140,4 +150,77 @@ public class ConfiguredTitle extends ConfiguredSection { } + public static class Builder extends AbstractConfigBuilder, Builder> { + + protected @NotNull ValueAdapter adapter = TITLE_ADAPTER; + protected @NotNull TitleConfig title = TitleConfig.of(null, null); + protected @NotNull String[] params = new String[0]; + + protected @NotNull ConfiguredTitle.TitleConsumer sendConsumer = DEFAULT_TITLE_CONSUMER; + protected @NotNull UnaryOperator paramFormatter = s -> "%(" + s + ")"; + + protected Builder() { + super(ConfigurationHolder.class, TITLE_TYPE); + defaults(() -> this.title); + } + + public @NotNull Builder adapter(@NotNull ValueAdapter adapter) { + this.adapter = adapter; + return this; + } + + public @NotNull Builder defaults(Consumer handler) { + handler.accept(this.title); + return this; + } + + public @NotNull Builder defaults(@Nullable String line1, @Nullable String line2) { + return line1(line1).line2(line2); + } + + public @NotNull Builder line1(@Nullable String line1) { + return defaults(t -> t.line1(line1)); + } + + public @NotNull Builder line2(@Nullable String line2) { + return defaults(t -> t.line2(line2)); + } + + public @NotNull Builder fadeIn(@Range(from = 0L, to = Integer.MAX_VALUE) int fadeIn) { + return defaults(t -> t.fadeIn(fadeIn)); + } + + public @NotNull Builder stay(@Range(from = 0L, to = Integer.MAX_VALUE) int stay) { + return defaults(t -> t.stay(stay)); + } + + public @NotNull Builder fadeOut(@Range(from = 0L, to = Integer.MAX_VALUE) int fadeOut) { + return defaults(t -> t.fadeOut(fadeOut)); + } + + public @NotNull Builder params(String... params) { + this.params = params; + return this; + } + + public @NotNull Builder params(@NotNull List params) { + return params(params.toArray(new String[0])); + } + + public @NotNull Builder whenSend(@NotNull ConfiguredTitle.TitleConsumer consumer) { + this.sendConsumer = consumer; + return this; + } + + @Override + protected @NotNull Builder self() { + return this; + } + + @Override + public @NotNull ConfiguredTitle build() { + return new ConfiguredTitle(buildManifest(), this.adapter, this.paramFormatter, this.params, this.sendConsumer); + } + } + } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ConfiguredItem.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ConfiguredItem.java index 132f23f..3d33905 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ConfiguredItem.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ConfiguredItem.java @@ -1,11 +1,18 @@ package cc.carm.lib.mineconfiguration.bukkit.value.item; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.configuration.core.value.type.ConfiguredSection; -import cc.carm.lib.mineconfiguration.bukkit.builder.item.ItemConfigBuilder; +import cc.carm.lib.configuration.adapter.ValueAdapter; +import cc.carm.lib.configuration.adapter.ValueType; +import cc.carm.lib.configuration.builder.AbstractConfigBuilder; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.value.ValueManifest; +import cc.carm.lib.configuration.value.standard.ConfiguredValue; +import cc.carm.lib.configuration.value.text.function.ContentHandler; import com.cryptomorin.xseries.XItemStack; +import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; @@ -13,50 +20,50 @@ import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.Consumer; +import java.util.function.UnaryOperator; -public class ConfiguredItem extends ConfiguredSection { +public class ConfiguredItem extends ConfiguredValue { - - public static ItemConfigBuilder create() { - return new ItemConfigBuilder(); + public static Builder create() { + return new Builder(); } + public static final @NotNull ValueType ITEM_TYPE = ValueType.of(ItemStack.class); + public static final ValueAdapter ITEM_ADAPTER = new ValueAdapter<>(ITEM_TYPE, + (holder, type, value) -> XItemStack.serialize(value), + (holder, type, value) -> { + ConfigurationSection section = (ConfigurationSection) value; + return XItemStack.deserialize(section); + } + ); + + protected final @NotNull UnaryOperator paramBuilder; protected final @NotNull String[] params; - public ConfiguredItem(@NotNull ValueManifest manifest, @NotNull String[] params) { - super( - manifest, ItemStack.class, - (data, v) -> XItemStack.deserialize((ConfigurationSection) data.getSource()), - XItemStack::serialize - ); + public ConfiguredItem(@NotNull ValueManifest manifest, ValueAdapter adapter, + @NotNull UnaryOperator paramBuilder, @NotNull String[] params) { + super(manifest, adapter); + this.paramBuilder = paramBuilder; this.params = params; } - public @NotNull String[] getParams() { - return params; - } - @Override - public @NotNull Optional<@Nullable ItemStack> getOptional() { + public @NotNull Optional<@Nullable ItemStack> optional() { return Optional.ofNullable(super.get()); } @Override public @Nullable ItemStack get() { - return getOptional().map(ItemStack::clone).orElse(null); + return optional().map(ItemStack::clone).orElse(null); } public @Nullable ItemStack get(Consumer modifier) { - return getOptional().map(item -> { + return optional().map(item -> { modifier.accept(item); return item; }).orElse(null); } - public @NotNull PreparedItem prepare(@NotNull Object... values) { - return PreparedItem.of(player -> get()).params(params).values(values); - } - public @Nullable ItemStack get(@Nullable Player player) { return get(player, new HashMap<>()); } @@ -65,15 +72,18 @@ public class ConfiguredItem extends ConfiguredSection { return prepare(values).get(player); } - public @Nullable ItemStack get(@Nullable Player player, @NotNull String[] params, @NotNull Object[] values) { - return prepare().params(params).values(values).get(player); - } - public @Nullable ItemStack get(@Nullable Player player, @NotNull Map placeholders) { return prepare().placeholders(placeholders).get(player); } + public @Nullable Map give(@NotNull Player player, @NotNull Object... values) { + return prepare(values).give(player); + } + + public @NotNull PreparedItem prepare(@NotNull Object... values) { + return PreparedItem.of(player -> get()).params(params).placeholders(values); + } public void modifyItem(Consumer modifier) { ItemStack item = get(); @@ -103,4 +113,104 @@ public class ConfiguredItem extends ConfiguredSection { else setLore(Arrays.asList(lore)); } + + public static class Builder extends AbstractConfigBuilder, Builder> { + + protected @Nullable ItemStack item = null; + protected @NotNull String[] params = new String[0]; + protected @NotNull UnaryOperator paramFormatter = ContentHandler.DEFAULT_PARAM_BUILDER; + + public Builder() { + super(ConfigurationHolder.class, ITEM_TYPE); + defaults(() -> item); + } + + @Override + public @NotNull Builder defaults(@Nullable ItemStack item) { + this.item = item; + return this; + } + + public Builder defaults(@NotNull Material type) { + return defaults(new ItemStack(type)); + } + + public Builder defaults(Consumer consumer) { + if (this.item == null) return self(); + consumer.accept(this.item); + return self(); + } + + public Builder defaultMeta(Consumer consumer) { + return defaults(stack -> { + ItemMeta meta = stack.getItemMeta(); + consumer.accept(meta); + stack.setItemMeta(meta); + }); + } + + public Builder defaultType(@NotNull Material type) { + return defaults(new ItemStack(type)); + } + + public Builder defaultName(@Nullable String name) { + return defaultMeta(meta -> meta.setDisplayName(name)); + } + + @SuppressWarnings("deprecation") + public Builder defaultDataID(short dataID) { + return defaults(stack -> stack.setDurability(dataID)); + } + + public Builder defaultLore(@NotNull String... lore) { + return defaultLore(Arrays.asList(lore)); + } + + public Builder defaultLore(@NotNull List lore) { + return defaultMeta(meta -> meta.setLore(lore)); + } + + public Builder defaultEnchants(@NotNull Map enchants) { + return defaultMeta(meta -> enchants.forEach((enchant, level) -> meta.addEnchant(enchant, level, true))); + } + + public Builder defaultEnchant(@NotNull Enchantment enchant, int level) { + return defaultEnchants(Collections.singletonMap(enchant, level)); + } + + public Builder defaultFlags(@NotNull Set flags) { + return defaultMeta(meta -> flags.forEach(meta::addItemFlags)); + } + + public Builder defaultFlags(@NotNull ItemFlag... flags) { + return defaultFlags(new LinkedHashSet<>(Arrays.asList(flags))); + } + + public Builder formatParam(@NotNull UnaryOperator paramFormatter) { + this.paramFormatter = paramFormatter; + return self(); + } + + public Builder params(@NotNull String... params) { + this.params = params; + return self(); + } + + public Builder params(@NotNull List params) { + this.params = params.toArray(new String[0]); + return self(); + } + + @Override + protected @NotNull Builder self() { + return this; + } + + @Override + public @NotNull ConfiguredItem build() { + return new ConfiguredItem(buildManifest(), ITEM_ADAPTER, paramFormatter, params); + } + } + + } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ItemModifier.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ItemModifier.java index 16f3c29..8239b3e 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ItemModifier.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/ItemModifier.java @@ -1,13 +1,10 @@ package cc.carm.lib.mineconfiguration.bukkit.value.item; -import cc.carm.lib.configuration.core.value.type.ConfiguredList; -import cc.carm.lib.mineconfiguration.bukkit.utils.TextParser; +import cc.carm.lib.configuration.value.text.data.TextContents; +import cc.carm.lib.configuration.value.text.function.ContentHandler; import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessage; -import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessageList; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemFlag; @@ -17,40 +14,34 @@ import org.bukkit.inventory.meta.SkullMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; import java.util.function.BiConsumer; -import java.util.function.Consumer; import java.util.function.Function; -import java.util.regex.Matcher; import java.util.regex.Pattern; -public abstract class ItemModifier, R> { +public abstract class ItemModifier, R> + extends ContentHandler { public static final @NotNull Pattern LORE_INSERT_PATTERN = Pattern.compile("^(?:\\{(.*)})?#(.*)#(?:\\{(-?\\d+)(?:,(-?\\d+))?})?$"); protected final @NotNull Function<@NotNull Player, @Nullable ItemStack> itemProvider; - protected @NotNull Map placeholders = new HashMap<>(); - protected @NotNull String[] params; - protected @NotNull Object[] values; - - protected final @NotNull Map> insertLore = new HashMap<>(); - protected @NotNull BiConsumer itemConsumer; protected @NotNull BiConsumer metaConsumer; protected ItemModifier(@NotNull Function<@NotNull Player, @Nullable ItemStack> itemProvider) { + super(); this.itemProvider = itemProvider; - this.params = new String[0]; - this.values = new Object[0]; - itemConsumer = (item, player) -> { + this.itemConsumer = (item, player) -> { }; - metaConsumer = (meta, player) -> { + this.metaConsumer = (meta, player) -> { }; + this.lineSeparator = " "; } - protected abstract @NotNull S getThis(); - public abstract @Nullable R get(Player player); public void applyTo(@Nullable ItemStack item, @Nullable Player player) { @@ -59,14 +50,12 @@ public abstract class ItemModifier, R> { ItemMeta meta = item.getItemMeta(); if (meta == null) return; - Map finalPlaceholders = buildPlaceholders(); - String name = meta.getDisplayName(); if (!name.isEmpty()) { - meta.setDisplayName(TextParser.parseText(player, name, finalPlaceholders)); + meta.setDisplayName(parse(player, name)); } - List parsedLore = parseLore(player, meta.getLore(), insertLore, finalPlaceholders); + List parsedLore = parseLore(player, meta.getLore()); if (!parsedLore.isEmpty()) { meta.setLore(parsedLore); } @@ -78,78 +67,17 @@ public abstract class ItemModifier, R> { public S handleMeta(@NotNull BiConsumer modifier) { this.metaConsumer = this.metaConsumer.andThen(modifier); - return getThis(); + return self(); } public S handleItem(@NotNull BiConsumer modifier) { this.itemConsumer = this.itemConsumer.andThen(modifier); - return getThis(); + return self(); } - public S params(String[] params) { - this.params = params; - return getThis(); - } - - public S values(Object... values) { - this.values = values; - return getThis(); - } - - public S placeholders(@NotNull Map placeholders) { - this.placeholders = placeholders; - return getThis(); - } - - public S placeholders(@NotNull Consumer> consumer) { - Map placeholders = new HashMap<>(); - consumer.accept(placeholders); - return placeholders(placeholders); - } - - public S insertLore(@NotNull String path, @NotNull LoreContent content) { - insertLore.put(path, content); - return getThis(); - } - - public S insertLore(@NotNull String path, @NotNull List content) { - return insertLore(path, content, false); - } - - public S insertLore(@NotNull String path, @NotNull List content, boolean original) { - return insertLore(path, LoreContent.of(content, original)); - } - - public S insertLore(@NotNull String path, @NotNull String... content) { - return insertLore(path, Arrays.asList(content)); - } - - public S insertLore(@NotNull String path, @NotNull ConfiguredList content) { - return insertLore(path, content.copy()); - } - - public S insertLore(@NotNull String path, - @NotNull ConfiguredMessage content, @NotNull Object... params) { - return insertLore(path, new LoreContent>(content, false) { - @Override - public List parse(CommandSender receiver) { - String str = getSource().parse(receiver, params); - if (str == null || str.isEmpty()) return Collections.emptyList(); - return Collections.singletonList(str); - } - }); - } - - public S insertLore(@NotNull String path, - @NotNull ConfiguredMessageList content, @NotNull Object... params) { - return insertLore(path, new LoreContent>(content, false) { - @Override - public List parse(CommandSender receiver) { - List list = getSource().parse(receiver, params); - if (list == null || list.isEmpty()) return Collections.emptyList(); - return list; - } - }); + public S insert(@NotNull String key, @NotNull ConfiguredMessage message, + @NotNull Object... values) { + return insert(key, receiver -> message.parse(receiver, values)); } public S amount(int amount) { @@ -202,72 +130,12 @@ public abstract class ItemModifier, R> { }); } - - protected Map buildPlaceholders() { - Map finalPlaceholders = new HashMap<>(); - finalPlaceholders.putAll(ParamsUtils.buildParams(params, values)); - finalPlaceholders.putAll(this.placeholders); - return finalPlaceholders; + public List parseLore(@Nullable Player player, @Nullable List current) { + if (current == null || current.isEmpty()) return new ArrayList<>(); + List parsed = new ArrayList<>(); + handle(TextContents.of(current, new HashMap<>()), player, parsed::add); + return parsed; } - public static List parseLore(@Nullable Player player, @Nullable List lore, - @NotNull Map> insertedLore, - @NotNull Map placeholders) { - List parsedLore = new ArrayList<>(); - if (lore == null || lore.isEmpty()) return parsedLore; - for (String line : lore) { - Matcher matcher = LORE_INSERT_PATTERN.matcher(line); - if (!matcher.matches()) { - parsedLore.add(TextParser.parseText(player, line, placeholders)); - continue; - } - - String path = matcher.group(2); - LoreContent content = insertedLore.get(path); - if (content == null) continue; - - String prefix = Optional.ofNullable(matcher.group(1)) - .map(s -> TextParser.parseText(player, s, placeholders)) - .orElse(""); - int offset1 = Optional.ofNullable(matcher.group(3)) - .map(Integer::parseInt).orElse(0); - Integer offset2 = Optional.ofNullable(matcher.group(4)) - .map(Integer::parseInt).orElse(null); - - List inserted = parseLoreLine( - player, content, placeholders, prefix, - offset2 == null ? 0 : offset1, offset2 == null ? offset1 : offset2 - ); - - if (content.isOriginal()) { - parsedLore.addAll(inserted); - } else { - parsedLore.addAll(TextParser.parseList(player, inserted, placeholders)); - } - } - return parsedLore; - } - - public static List parseLoreLine(@Nullable Player player, @NotNull LoreContent content, - @NotNull Map placeholders, - @NotNull String parsedPrefix, int upOffset, int downOffset) { - List lore = content.parse(player); - if (lore.isEmpty()) return Collections.emptyList(); - - upOffset = Math.max(0, upOffset); - downOffset = Math.max(0, downOffset); - - List finalLore = new ArrayList<>(); - - for (int i = 0; i < upOffset; i++) finalLore.add(" "); - if (content.isOriginal()) { - lore.stream().map(s -> parsedPrefix + s).forEach(finalLore::add); - } else { - lore.stream().map(s -> parsedPrefix + TextParser.parseText(player, s, placeholders)).forEach(finalLore::add); - } - for (int i = 0; i < downOffset; i++) finalLore.add(" "); - - return finalLore; - } } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/LoreContent.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/LoreContent.java deleted file mode 100644 index 1acaff1..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/LoreContent.java +++ /dev/null @@ -1,42 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.value.item; - -import org.bukkit.command.CommandSender; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -public abstract class LoreContent { - - public static LoreContent> of(@NotNull List content) { - return of(content, false); - } - - public static LoreContent> of(@NotNull List content, boolean original) { - return new LoreContent>(content, original) { - @Override - public List parse(CommandSender receiver) { - return getSource(); - } - }; - } - - protected final @NotNull S source; - protected final boolean original; - - public LoreContent(@NotNull S source, boolean original) { - this.source = source; - this.original = original; - } - - public @NotNull S getSource() { - return source; - } - - public abstract List parse(CommandSender receiver); - - public boolean isOriginal() { - return original; - } - - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/PreparedItem.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/PreparedItem.java index 288a7a0..f527b47 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/PreparedItem.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/item/PreparedItem.java @@ -5,6 +5,7 @@ import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Map; import java.util.function.Function; public class PreparedItem extends ItemModifier { @@ -29,9 +30,21 @@ public class PreparedItem extends ItemModifier { return item; } - @Override - public @NotNull PreparedItem getThis() { - return this; + public @Nullable Map give(Player player) { + @Nullable ItemStack item = get(player); + if (item == null) return null; + return player.getInventory().addItem(item); } + public boolean giveOrDrop(Player player) { + @Nullable Map left = give(player); + if (left == null) return false; + left.values().forEach(item -> player.getWorld().dropItem(player.getLocation(), item)); + return true; + } + + @Override + public PreparedItem self() { + return this; + } } \ No newline at end of file diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/ConfiguredNotify.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/ConfiguredNotify.java index f27c44b..1f17e85 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/ConfiguredNotify.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/ConfiguredNotify.java @@ -1,40 +1,55 @@ package cc.carm.lib.mineconfiguration.bukkit.value.notify; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.configuration.core.value.type.ConfiguredList; -import cc.carm.lib.mineconfiguration.bukkit.builder.notify.NotifyConfigBuilder; +import cc.carm.lib.configuration.adapter.ValueAdapter; +import cc.carm.lib.configuration.adapter.ValueType; +import cc.carm.lib.configuration.builder.AbstractConfigBuilder; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.value.ValueManifest; +import cc.carm.lib.configuration.value.standard.ConfiguredList; +import cc.carm.lib.configuration.value.text.function.TextParser; import cc.carm.lib.mineconfiguration.bukkit.data.NotifyConfig; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; +import cc.carm.lib.mineconfiguration.bukkit.data.SoundConfig; +import cc.carm.lib.mineconfiguration.bukkit.data.TitleConfig; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.NotifyType; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Range; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.function.UnaryOperator; public class ConfiguredNotify extends ConfiguredList { - public static NotifyConfigBuilder create() { - return new NotifyConfigBuilder(); + public static NotifyBuilder create() { + return new NotifyBuilder(); } - public static final Set> TYPES = new HashSet<>(Arrays.asList(DefaultNotifyTypes.values())); - - public static NotifyType getType(@NotNull String key) { - return TYPES.stream().filter(type -> type.key.equalsIgnoreCase(key)).findFirst().orElse(null); - } + public static final ValueType NOTIFY_TYPE = ValueType.of(NotifyConfig.class); + public static final ValueAdapter NOTIFY_ADAPTER = new ValueAdapter<>(NOTIFY_TYPE, + (holder, type, value) -> value.serialize(), + (holder, type, value) -> { + String conf = holder.deserialize(String.class, value); + return NotifyConfig.deserialize(conf); + } + ); + protected final @NotNull UnaryOperator paramBuilder; protected final @NotNull String[] params; - public ConfiguredNotify(@NotNull ValueManifest> manifest, @NotNull String[] params) { - super(manifest, NotifyConfig.class, obj -> Objects.requireNonNull(NotifyConfig.deserialize(String.valueOf(obj))), NotifyConfig::serialize); + public ConfiguredNotify(@NotNull ValueManifest> manifest, + @NotNull ValueAdapter adapter, + @NotNull UnaryOperator paramBuilder, @NotNull String[] params) { + super(manifest, ArrayList::new, adapter); + this.paramBuilder = paramBuilder; this.params = params; } - public String[] getParams() { - return params; - } - public @NotNull PreparedNotify prepare(@NotNull Object... values) { - return new PreparedNotify(getNotNull(), ParamsUtils.buildParams(getParams(), values)); + return new PreparedNotify(getNotNull(), TextParser.buildParams(paramBuilder, this.params, values)); } public void send(@NotNull Player player, @NotNull Object... values) { @@ -45,8 +60,105 @@ public class ConfiguredNotify extends ConfiguredList { prepare(values).to(players); } - public void sendAll(@NotNull String... values) { + public void sendAll(@NotNull Object... values) { prepare(values).toAll(); } + + public static class NotifyBuilder extends AbstractConfigBuilder, ConfiguredNotify, ConfigurationHolder, NotifyBuilder> { + + protected final @NotNull List notifications = new ArrayList<>(); + + protected @NotNull String[] params = new String[0]; + protected @NotNull ValueAdapter adapter = NOTIFY_ADAPTER; + protected @NotNull UnaryOperator paramFormatter = s -> "%(" + s + ")"; + + protected NotifyBuilder() { + super(ConfigurationHolder.class, new ValueType>() { + }); + } + + @Override + protected @NotNull ConfiguredNotify.NotifyBuilder self() { + return this; + } + + @Override + public @NotNull ConfiguredNotify build() { + return new ConfiguredNotify(buildManifest(), this.adapter, this.paramFormatter, this.params); + } + + public NotifyBuilder adapter(@NotNull ValueAdapter adapter) { + this.adapter = adapter; + return this; + } + + public NotifyBuilder defaultMessages(@NotNull String... messages) { + return defaultMessages(Arrays.asList(messages)); + } + + public NotifyBuilder defaultMessages(@NotNull List messages) { + for (String message : messages) { + notifications.add(NotifyConfig.of(NotifyType.Standard.MESSAGE, message)); + } + return defaults(this.notifications); + } + + public NotifyBuilder defaultActionBar(@NotNull String message) { + notifications.add(NotifyConfig.of(NotifyType.Standard.ACTIONBAR, message)); + return defaults(this.notifications); + } + + public NotifyBuilder defaultSound(@NotNull Sound sound, float volume, float pitch) { + return defaultSound(sound.name(), volume, pitch); + } + + public NotifyBuilder defaultSound(@NotNull Sound sound, float volume) { + return defaultSound(sound, volume, 1.0f); + } + + public NotifyBuilder defaultSound(@NotNull Sound sound) { + return defaultSound(sound, 1.0f); + } + + public NotifyBuilder defaultSound(@NotNull String soundName, float volume, float pitch) { + notifications.add(NotifyConfig.of(NotifyType.Standard.SOUND, new SoundConfig(soundName, volume, pitch))); + return defaults(this.notifications); + } + + public NotifyBuilder defaultSound(@NotNull String soundName, float volume) { + return defaultSound(soundName, volume, 1.0f); + } + + public NotifyBuilder defaultSound(@NotNull String soundName) { + return defaultSound(soundName, 1.0f); + } + + public NotifyBuilder defaultTitle(@Nullable String line1, @Nullable String line2, + @Range(from = 0L, to = Integer.MAX_VALUE) int fadeIn, + @Range(from = 0L, to = Integer.MAX_VALUE) int stay, + @Range(from = 0L, to = Integer.MAX_VALUE) int fadeOut) { + notifications.add(NotifyConfig.of(NotifyType.Standard.TITLE, TitleConfig.of(line1, line2, fadeIn, stay, fadeOut))); + return defaults(this.notifications); + } + + public NotifyBuilder defaultTitle(@Nullable String line1, @Nullable String line2) { + return defaultTitle(line1, line2, 10, 60, 10); + } + + public NotifyBuilder params(String... params) { + this.params = params; + return this; + } + + public NotifyBuilder params(@NotNull List params) { + return params(params.toArray(new String[0])); + } + + public NotifyBuilder formatParam(UnaryOperator paramFormatter) { + this.paramFormatter = paramFormatter; + return this; + } + } + } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/DefaultNotifyTypes.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/DefaultNotifyTypes.java deleted file mode 100644 index c2ab77d..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/DefaultNotifyTypes.java +++ /dev/null @@ -1,30 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.value.notify; - -import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.SoundNotify; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.StringNotify; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.TitleNotify; -import com.cryptomorin.xseries.messages.ActionBar; -import org.bukkit.entity.Player; - -import java.util.Arrays; -import java.util.Optional; - -public interface DefaultNotifyTypes { - - StringNotify MESSAGE = StringNotify.of("MESSAGE", Player::sendMessage, content -> Optional.ofNullable(content).orElse(" ")); - StringNotify MSG = StringNotify.of("MSG", Player::sendMessage); - StringNotify ACTIONBAR = StringNotify.of("ACTIONBAR", ActionBar::sendActionBar); - TitleNotify TITLE = new TitleNotify("TITLE"); - SoundNotify SOUND = new SoundNotify("SOUND"); - - static NotifyType[] values() { - return new NotifyType[]{MESSAGE, MSG, ACTIONBAR, TITLE, SOUND}; - } - - static NotifyType valueOf(String name) { - return Arrays.stream(values()).filter(type -> type.key.equalsIgnoreCase(name)).findFirst().orElse(null); - } - -} - - diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/NotifyType.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/NotifyType.java deleted file mode 100644 index 88567a5..0000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/NotifyType.java +++ /dev/null @@ -1,61 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.value.notify; - -import cc.carm.lib.mineconfiguration.bukkit.utils.TextParser; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; - -public abstract class NotifyType { - - protected final @NotNull String key; - protected final @NotNull Class metaClass; - - protected NotifyType(@NotNull String key, @NotNull Class metaClass) { - this.key = key; - this.metaClass = metaClass; - } - - public @NotNull String getKey() { - return key; - } - - public @NotNull Class getMetaClass() { - return metaClass; - } - - /** - * Parse metadata from string. - *
e.g. "[TYPE-KEY@PARAM] CONTENTS..." - * - * @param param The param of the notify config. - * @param content The content of the notify config. - * @return The parsed metadata. - */ - public abstract @Nullable M parseMeta(@Nullable String param, @Nullable String content); - - /** - * Serialize the metadata to singleton string to storage on configs. - * - * @param meta The parsed metadata. - * @return The serialized string. - */ - public abstract @NotNull String serializeConfig(@Nullable M meta); - - /** - * Execute the notify content to specific player. - * - * @param player The player who receive the notification. - * @param meta The parsed metadata. - */ - public abstract void execute(@NotNull Player player, @Nullable M meta, @NotNull Map placeholders); - - @Contract("_, _, null -> null; _, _, !null -> !null") - protected String setPlaceholders(@NotNull Player player, @Nullable String content, - @NotNull Map placeholders) { - return TextParser.parseText(player, content, placeholders); - } - -} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/NotifyCache.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/NotifyCache.java similarity index 94% rename from platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/NotifyCache.java rename to platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/NotifyCache.java index ff9ce7a..72829e6 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/NotifyCache.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/NotifyCache.java @@ -1,4 +1,4 @@ -package cc.carm.lib.mineconfiguration.bukkit.value.notify; +package cc.carm.lib.mineconfiguration.bukkit.value.notify.type; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -21,7 +21,7 @@ public class NotifyCache, M> { } public static @Nullable NotifyCache of(@NotNull String key, @Nullable String param, @Nullable String content) { - NotifyType type = ConfiguredNotify.getType(key); + NotifyType type = NotifyType.get(key); if (type == null) return null; return NotifyCache.of(type, param, content); } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/NotifyType.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/NotifyType.java new file mode 100644 index 0000000..6a7f14b --- /dev/null +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/NotifyType.java @@ -0,0 +1,91 @@ +package cc.carm.lib.mineconfiguration.bukkit.value.notify.type; + +import cc.carm.lib.configuration.value.text.function.TextParser; +import cc.carm.lib.mineconfiguration.bukkit.utils.MessageUtils; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.standard.SoundNotify; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.standard.StringNotify; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.standard.TitleNotify; +import com.cryptomorin.xseries.messages.ActionBar; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.*; + +public abstract class NotifyType { + + public interface Standard { + + StringNotify MESSAGE = StringNotify.of("MESSAGE", Player::sendMessage, content -> Optional.ofNullable(content).orElse(" ")); + StringNotify MSG = StringNotify.of("MSG", Player::sendMessage); + StringNotify ACTIONBAR = StringNotify.of("ACTIONBAR", ActionBar::sendActionBar); + TitleNotify TITLE = new TitleNotify("TITLE"); + SoundNotify SOUND = new SoundNotify("SOUND"); + + static NotifyType[] values() { + return new NotifyType[]{MESSAGE, MSG, ACTIONBAR, TITLE, SOUND}; + } + + static NotifyType valueOf(String name) { + return Arrays.stream(values()).filter(type -> type.key.equalsIgnoreCase(name)).findFirst().orElse(null); + } + + } + + public static final Set> TYPES = new HashSet<>(Arrays.asList(Standard.values())); + + public static NotifyType get(@NotNull String key) { + return TYPES.stream().filter(type -> type.key.equalsIgnoreCase(key)).findFirst().orElse(null); + } + + protected final @NotNull String key; + protected final @NotNull Class metaClass; + + protected NotifyType(@NotNull String key, @NotNull Class metaClass) { + this.key = key; + this.metaClass = metaClass; + } + + public @NotNull String getKey() { + return key; + } + + public @NotNull Class getMetaClass() { + return metaClass; + } + + /** + * Parse metadata from string. + *
e.g. "[TYPE-KEY@PARAM] CONTENTS..." + * + * @param param The param of the notify config. + * @param content The content of the notify config. + * @return The parsed metadata. + */ + public abstract @Nullable M parseMeta(@Nullable String param, @Nullable String content); + + /** + * Serialize the metadata to singleton string to storage on configs. + * + * @param meta The parsed metadata. + * @return The serialized string. + */ + public abstract @NotNull String serializeConfig(@Nullable M meta); + + /** + * Execute the notify content to specific player. + * + * @param player The player who receive the notification. + * @param meta The parsed metadata. + */ + public abstract void execute(@NotNull Player player, @Nullable M meta, @NotNull Map placeholders); + + @Contract("_, _, null -> null; _, _, !null -> !null") + protected String setPlaceholders(@NotNull Player player, @NotNull Map placeholders, + @Nullable String content) { + if (content == null) return null; + return MessageUtils.parseMessage(player, TextParser.setPlaceholders(content, placeholders)); + } + +} diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/SoundNotify.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/SoundNotify.java similarity index 91% rename from platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/SoundNotify.java rename to platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/SoundNotify.java index 5874a91..ff6ba34 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/SoundNotify.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/SoundNotify.java @@ -1,7 +1,7 @@ -package cc.carm.lib.mineconfiguration.bukkit.value.notify.type; +package cc.carm.lib.mineconfiguration.bukkit.value.notify.type.standard; import cc.carm.lib.mineconfiguration.bukkit.data.SoundConfig; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.NotifyType; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.NotifyType; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/StringNotify.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/StringNotify.java similarity index 87% rename from platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/StringNotify.java rename to platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/StringNotify.java index 9e0bebb..c8d0403 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/StringNotify.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/StringNotify.java @@ -1,6 +1,6 @@ -package cc.carm.lib.mineconfiguration.bukkit.value.notify.type; +package cc.carm.lib.mineconfiguration.bukkit.value.notify.type.standard; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.NotifyType; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.NotifyType; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -46,7 +46,7 @@ public abstract class StringNotify extends NotifyType { @Override public void execute(@NotNull Player player, @Nullable String content, @NotNull Map placeholders) { if (content == null) return; - send(player, setPlaceholders(player, content, placeholders)); + send(player, setPlaceholders(player, placeholders, content)); } } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/TitleNotify.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/TitleNotify.java similarity index 57% rename from platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/TitleNotify.java rename to platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/TitleNotify.java index 31c9909..13a28bc 100644 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/TitleNotify.java +++ b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/value/notify/type/standard/TitleNotify.java @@ -1,7 +1,7 @@ -package cc.carm.lib.mineconfiguration.bukkit.value.notify.type; +package cc.carm.lib.mineconfiguration.bukkit.value.notify.type.standard; import cc.carm.lib.mineconfiguration.bukkit.data.TitleConfig; -import cc.carm.lib.mineconfiguration.bukkit.value.notify.NotifyType; +import cc.carm.lib.mineconfiguration.bukkit.value.notify.type.NotifyType; import com.cryptomorin.xseries.messages.Titles; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -13,8 +13,6 @@ import java.util.regex.Pattern; public class TitleNotify extends NotifyType { - //Content format line1{N}line2 - public static final Pattern CONTENT_FORMAT = Pattern.compile("(?.+?)(?:\\{n}(?.+))?"); //Param format fadeIn,stay,fadeOut public static final Pattern PARAM_FORMAT = Pattern.compile("(?\\d+),(?\\d+),(?\\d+)"); @@ -26,20 +24,23 @@ public class TitleNotify extends NotifyType { public @Nullable TitleConfig parseMeta(@Nullable String param, @Nullable String content) { if (content == null) return null; - Matcher contentMatcher = CONTENT_FORMAT.matcher(content); - if (!contentMatcher.matches()) return null; + String[] lines = content.split("\\{n}"); + if (lines.length == 0) return null; + + String line1 = lines[0]; + String line2 = lines.length > 1 ? lines[1] : null; if (param == null) { - return TitleConfig.of(contentMatcher.group("line1"), contentMatcher.group("line2")); + return TitleConfig.of(line1, line2); } Matcher paramMatcher = PARAM_FORMAT.matcher(param); if (!paramMatcher.matches()) { - return TitleConfig.of(contentMatcher.group("line1"), contentMatcher.group("line2")); + return TitleConfig.of(line1, line2); } return TitleConfig.of( - contentMatcher.group("line1"), contentMatcher.group("line2"), + line1, line2, Integer.parseInt(paramMatcher.group("fadeIn")), Integer.parseInt(paramMatcher.group("stay")), Integer.parseInt(paramMatcher.group("fadeOut")) @@ -48,15 +49,15 @@ public class TitleNotify extends NotifyType { @Override public @NotNull String serializeConfig(@Nullable TitleConfig meta) { - if (meta == null || (meta.getLine1() == null && meta.getLine2() == null)) return "[" + key + "] "; + if (meta == null || (meta.line1() == null && meta.line2() == null)) return "[" + key + "] "; - String line1 = meta.getLine1() == null ? "" : meta.getLine1().getMessage(); - String line2 = meta.getLine2() == null ? "" : meta.getLine2().getMessage(); + String line1 = meta.line1() == null ? "" : meta.line1(); + String line2 = meta.line2() == null ? "" : meta.line2(); if (meta.isStandardTime()) { - return "[" + key + "] " + line1 + "{n}" + line1; + return "[" + key + "] " + line1 + "{n}" + line2; } else - return "[" + key + "@" + meta.getFadeIn() + "," + meta.getStay() + "," + meta.getFadeOut() + "] " + line1 + "{n}" + line1; + return "[" + key + "@" + meta.fadeIn() + "," + meta.stay() + "," + meta.fadeOut() + "] " + line1 + "{n}" + line2; } @Override diff --git a/platform/bukkit/src/test/java/LoreInsertTest.java b/platform/bukkit/src/test/java/LoreInsertTest.java deleted file mode 100644 index 5d8e7cd..0000000 --- a/platform/bukkit/src/test/java/LoreInsertTest.java +++ /dev/null @@ -1,55 +0,0 @@ -import cc.carm.lib.mineconfiguration.bukkit.value.item.LoreContent; -import cc.carm.lib.mineconfiguration.bukkit.value.item.PreparedItem; -import org.junit.Test; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; - -public class LoreInsertTest { - - - @Test - public void insert() { - List original = Arrays.asList( - "测试lore的第一行", - "测试lore的第二行", - "#click-lore#{1,2}", - "测试lore的倒数第二行", - "{--> }#click-lore#{2}", - "测试lore的倒数第一行" - ); - - List replace = Arrays.asList("> 插入的点击行1", "> 插入的点击行2"); - Map> inserted = new HashMap<>(); - inserted.put("click-lore", LoreContent.of(replace)); - PreparedItem.parseLore(null, original, inserted, new HashMap<>()).forEach(System.out::println); - } - - - @Test - public void parse() { - System.out.println(parse("{LOVE}#click-lore#{1,0}")); - System.out.println(parse("#click-lore#{1,2}")); - System.out.println(parse("#click-lore#{1}")); - System.out.println(parse("#click-lore#{我}")); - } - - public static String parse(String line) { - Matcher matcher = PreparedItem.LORE_INSERT_PATTERN.matcher(line); - if (!matcher.matches()) { - return "Failed -> [" + line + "]"; - } else { - String prefix = matcher.group(1); - String path = matcher.group(2); - - String offset1 = matcher.group(3); - String offset2 = matcher.group(4); - return "Prefix -> [" + prefix + "] Path -> [" + path + "] Offset-> [" + offset1 + "/" + offset2 + "]"; - } - } - - -} diff --git a/platform/bungee/pom.xml b/platform/bungee/pom.xml index b73b571..cdb6e05 100644 --- a/platform/bungee/pom.xml +++ b/platform/bungee/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.9.3 + 3.0.0 ../../pom.xml 4.0.0 @@ -19,7 +19,7 @@ jar MineConfiguration-Bungee - 轻松(做)配置,适用于BungeeCord的版本,可用JSON与YAML格式。 + EasyConfiguration for BungeeCord. @@ -32,11 +32,12 @@ cc.carm.lib - yamlcommentwriter - ${deps.yamlcommentwriter.version} + easyconfiguration-yaml + ${deps.easyconfifuration.version} compile + net.md-5 bungeecord-api @@ -45,14 +46,6 @@ provided - - net.md-5 - bungeecord-api - 1.20-R0.2 - javadoc - provided - - diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/BungeeConfigValue.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/BungeeConfigValue.java deleted file mode 100644 index b0353b7..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/BungeeConfigValue.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee; - -import cc.carm.lib.configuration.core.source.ConfigurationProvider; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.configuration.core.value.impl.CachedConfigValue; -import cc.carm.lib.mineconfiguration.bungee.builder.BungeeConfigBuilder; -import cc.carm.lib.mineconfiguration.bungee.source.BungeeConfigProvider; -import cc.carm.lib.mineconfiguration.bungee.source.BungeeSectionWrapper; -import org.jetbrains.annotations.NotNull; - -public abstract class BungeeConfigValue extends CachedConfigValue { - - public static @NotNull BungeeConfigBuilder builder() { - return new BungeeConfigBuilder(); - } - - public BungeeConfigValue(@NotNull ValueManifest manifest) { - super(manifest); - } - - public BungeeConfigProvider getBukkitProvider() { - ConfigurationProvider provider = getProvider(); - if (provider instanceof BungeeConfigProvider) return (BungeeConfigProvider) getProvider(); - else throw new IllegalStateException("Provider is not a SpigotConfigProvider"); - } - - public BungeeSectionWrapper getBukkitConfig() { - return getBukkitProvider().getConfiguration(); - } - -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/MineConfiguration.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/MineConfiguration.java index fd816d0..74fafe0 100644 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/MineConfiguration.java +++ b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/MineConfiguration.java @@ -1,120 +1,52 @@ package cc.carm.lib.mineconfiguration.bungee; -import cc.carm.lib.configuration.core.Configuration; -import cc.carm.lib.configuration.core.ConfigurationRoot; -import cc.carm.lib.mineconfiguration.bungee.source.BungeeConfigProvider; +import cc.carm.lib.configuration.Configuration; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.source.yaml.YAMLConfigFactory; +import cc.carm.lib.configuration.source.yaml.YAMLSource; import cc.carm.lib.mineconfiguration.common.AbstractConfiguration; import net.md_5.bungee.api.plugin.Plugin; -import net.md_5.bungee.config.ConfigurationProvider; -import net.md_5.bungee.config.JsonConfiguration; -import net.md_5.bungee.config.YamlConfiguration; import org.jetbrains.annotations.NotNull; import java.io.File; -import java.io.IOException; - -public class MineConfiguration extends AbstractConfiguration { - - protected static BungeeConfigProvider create(File file, String source, ConfigurationProvider loader) { - BungeeConfigProvider provider = new BungeeConfigProvider(file, loader); - try { - provider.initializeFile(source); - provider.initializeConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - return provider; - } - - public static BungeeConfigProvider from(File file, String source) { - return fromYAML(file, source); - } - - public static BungeeConfigProvider from(File file) { - return from(file, file.getName()); - } - - public static BungeeConfigProvider from(String fileName) { - return from(fileName, fileName); - } - - public static BungeeConfigProvider from(String fileName, String source) { - return from(new File(fileName), source); - } - - public static BungeeConfigProvider from(Plugin plugin, String fileName) { - return from(plugin, fileName, fileName); - } - - public static BungeeConfigProvider from(Plugin plugin, String fileName, String source) { - return from(new File(plugin.getDataFolder(), fileName), source); - } - - public static BungeeConfigProvider fromYAML(File file, String source) { - return create(file, source, ConfigurationProvider.getProvider(YamlConfiguration.class)); - } - - public static BungeeConfigProvider fromYAML(String fileName, String source) { - return fromYAML(new File(fileName), source); - } - - public static BungeeConfigProvider fromYAML(File file) { - return fromYAML(file, file.getName()); - } - - public static BungeeConfigProvider fromYAML(String fileName) { - return fromYAML(fileName, fileName); - } - - public static BungeeConfigProvider fromYAML(Plugin plugin, String fileName) { - return fromYAML(plugin, fileName, fileName); - } - - public static BungeeConfigProvider fromYAML(Plugin plugin, String fileName, String source) { - return fromYAML(new File(plugin.getDataFolder(), fileName), source); - } - - public static BungeeConfigProvider fromJSON(File file, String source) { - return create(file, source, ConfigurationProvider.getProvider(JsonConfiguration.class)); - } - - public static BungeeConfigProvider fromJSON(String fileName, String source) { - return fromJSON(new File(fileName), source); - } - - public static BungeeConfigProvider fromJSON(File file) { - return fromJSON(file, file.getName()); - } - - public static BungeeConfigProvider fromJSON(String fileName) { - return fromJSON(fileName, fileName); - } - - public static BungeeConfigProvider fromJSON(Plugin plugin, String fileName) { - return fromJSON(plugin, fileName, fileName); - } - - public static BungeeConfigProvider fromJSON(Plugin plugin, String fileName, String source) { - return fromJSON(new File(plugin.getDataFolder(), fileName), source); - } +public class MineConfiguration extends AbstractConfiguration> { public MineConfiguration(@NotNull Plugin plugin) { - super(from(plugin, "config.yml"), from(plugin, "messages.yml")); + this(plugin.getDataFolder()); } public MineConfiguration(@NotNull Plugin plugin, @NotNull Configuration configRoot, @NotNull Configuration messageRoot) { - this(plugin); - initializeConfig(configRoot); - initializeMessage(messageRoot); + this(plugin.getDataFolder(), configRoot, messageRoot); } public MineConfiguration(@NotNull Plugin plugin, @NotNull Class configRoot, @NotNull Class messageRoot) { - this(plugin); + this(plugin.getDataFolder(), configRoot, messageRoot); + } + + public MineConfiguration(@NotNull File pluginDataFolder) { + super( + YAMLConfigFactory.from(pluginDataFolder, "config.yml").resourcePath("config.yml").build(), + YAMLConfigFactory.from(pluginDataFolder, "messages.yml").resourcePath("messages.yml").build() + ); + } + + public MineConfiguration(@NotNull File pluginDataFolder, + @NotNull Configuration configRoot, + @NotNull Configuration messageRoot) { + this(pluginDataFolder); + initializeConfig(configRoot); + initializeMessage(messageRoot); + } + + public MineConfiguration(@NotNull File pluginDataFolder, + @NotNull Class configRoot, + @NotNull Class messageRoot) { + this(pluginDataFolder); initializeConfig(configRoot); initializeMessage(messageRoot); } diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/AbstractBungeeBuilder.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/AbstractBungeeBuilder.java deleted file mode 100644 index c78f461..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/AbstractBungeeBuilder.java +++ /dev/null @@ -1,13 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.builder; - -import cc.carm.lib.mineconfiguration.bungee.source.BungeeConfigProvider; -import cc.carm.lib.configuration.core.builder.AbstractConfigBuilder; - -public abstract class AbstractBungeeBuilder> - extends AbstractConfigBuilder { - - public AbstractBungeeBuilder() { - super(BungeeConfigProvider.class); - } - -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/BungeeConfigBuilder.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/BungeeConfigBuilder.java deleted file mode 100644 index b064cc8..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/BungeeConfigBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.builder; - -import cc.carm.lib.mineconfiguration.bungee.builder.message.BungeeMessageBuilder; -import cc.carm.lib.configuration.core.builder.ConfigBuilder; -import org.jetbrains.annotations.NotNull; - -public class BungeeConfigBuilder extends ConfigBuilder { - - public @NotNull BungeeMessageBuilder createMessage() { - return new BungeeMessageBuilder(); - } - - -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageBuilder.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageBuilder.java deleted file mode 100644 index 5f0c789..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageBuilder.java +++ /dev/null @@ -1,44 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.builder.message; - -import cc.carm.lib.easyplugin.utils.ColorParser; -import cc.carm.lib.mineconfiguration.bungee.data.TextConfig; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageConfigBuilder; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.BiFunction; - -@SuppressWarnings("deprecation") -public class BungeeMessageBuilder extends MessageConfigBuilder { - - - public BungeeMessageBuilder() { - super(CommandSender.class, TextConfig.class); - } - - @Override - public @NotNull BungeeMessageValueBuilder asValue(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - return new BungeeMessageValueBuilder<>(parser); - } - - @Override - public @NotNull BungeeMessageListBuilder asList(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - return new BungeeMessageListBuilder<>(parser); - } - - public @NotNull - BungeeMessageValueBuilder asStringValue() { - return asValue(defaultParser()).whenSend(CommandSender::sendMessage); - } - - public @NotNull - BungeeMessageListBuilder asStringList() { - return asList(defaultParser()).whenSend((r, m) -> m.forEach(r::sendMessage)); - } - - protected static @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable String> defaultParser() { - return (receiver, message) -> ColorParser.parse(message); - } - -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageListBuilder.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageListBuilder.java deleted file mode 100644 index df87bc4..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageListBuilder.java +++ /dev/null @@ -1,36 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.builder.message; - -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.bungee.data.TextConfig; -import cc.carm.lib.mineconfiguration.bungee.value.ConfiguredMessageList; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageListBuilder; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Optional; -import java.util.function.BiFunction; - -public class BungeeMessageListBuilder - extends MessageListBuilder> { - - public BungeeMessageListBuilder(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - super(CommandSender.class, TextConfig::of, parser); - } - - @Override - protected @NotNull BungeeMessageListBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredMessageList build() { - return new ConfiguredMessageList<>( - buildManifest(TextConfig.of(new ArrayList<>())), - ParamsUtils.formatParams(this.paramFormatter, this.params), - this.messageParser, this.sendFunction - ); - } -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageValueBuilder.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageValueBuilder.java deleted file mode 100644 index 6a90728..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/builder/message/BungeeMessageValueBuilder.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.builder.message; - -import cc.carm.lib.mineconfiguration.bungee.data.TextConfig; -import cc.carm.lib.mineconfiguration.bungee.value.ConfiguredMessage; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageValueBuilder; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.BiFunction; - -public class BungeeMessageValueBuilder - extends MessageValueBuilder> { - - public BungeeMessageValueBuilder(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - super(CommandSender.class, TextConfig::new, parser); - } - - @Override - protected @NotNull BungeeMessageValueBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredMessage build() { - return new ConfiguredMessage<>( - buildManifest(TextConfig.of("")), - ParamsUtils.formatParams(this.paramFormatter, this.params), - this.messageParser, this.sendHandler - ); - } - - -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/data/TextConfig.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/data/TextConfig.java deleted file mode 100644 index 586a12b..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/data/TextConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.data; - -import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class TextConfig extends AbstractText { - - public TextConfig(@NotNull String message) { - super(CommandSender.class, message); - } - - @Contract("!null,-> !null") - public static @Nullable TextConfig of(@Nullable String message) { - if (message == null) return null; - else return new TextConfig(message); - } - - public static @NotNull List of(@Nullable List messages) { - if (messages == null || messages.isEmpty()) return new ArrayList<>(); - else return messages.stream().map(TextConfig::of).collect(Collectors.toList()); - } - - public static @NotNull List of(@NotNull String... messages) { - return of(Arrays.asList(messages)); - } - -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/source/BungeeConfigProvider.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/source/BungeeConfigProvider.java deleted file mode 100644 index 5ff1b7c..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/source/BungeeConfigProvider.java +++ /dev/null @@ -1,107 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.source; - -import cc.carm.lib.configuration.core.ConfigInitializer; -import cc.carm.lib.configuration.core.source.ConfigurationComments; -import cc.carm.lib.configuration.core.source.impl.FileConfigProvider; -import cc.carm.lib.yamlcommentupdater.CommentedYAML; -import cc.carm.lib.yamlcommentupdater.CommentedYAMLWriter; -import net.md_5.bungee.config.Configuration; -import net.md_5.bungee.config.ConfigurationProvider; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class BungeeConfigProvider extends FileConfigProvider implements CommentedYAML { - - protected static final char SEPARATOR = '.'; - - protected ConfigurationProvider loader; - protected Configuration configuration; - protected ConfigInitializer initializer; - - protected ConfigurationComments comments = new ConfigurationComments(); - - public BungeeConfigProvider(@NotNull File file, @NotNull ConfigurationProvider loader) { - super(file); - this.loader = loader; - } - - public BungeeConfigProvider(@NotNull File file, @NotNull Class providerClass) { - this(file, ConfigurationProvider.getProvider(providerClass)); - } - - public void initializeConfig() throws IOException { - this.configuration = getLoader().load(file); - this.initializer = new ConfigInitializer<>(this); - } - - @Override - public @NotNull BungeeSectionWrapper getConfiguration() { - return BungeeSectionWrapper.of(configuration); - } - - @Override - protected void onReload() throws Exception { - this.configuration = getLoader().load(file); - } - - @Override - public @NotNull ConfigurationComments getComments() { - return this.comments; - } - - @Override - public void save() throws Exception { - try { - CommentedYAMLWriter.writeWithComments(this, this.file); - } catch (Exception ex) { - getLoader().save(configuration, file); - throw ex; - } - } - - @Override - public @NotNull ConfigInitializer getInitializer() { - return this.initializer; - } - - public ConfigurationProvider getLoader() { - return loader; - } - - @Override - public String serializeValue(@NotNull String key, @NotNull Object value) { - Configuration tmp = new Configuration();// 该对象用于临时记录配置内容 - tmp.set(key, value); - StringWriter tmpStr = new StringWriter(); - loader.save(tmp, tmpStr); - return tmpStr.toString(); - } - - @Override - public Set getKeys(@Nullable String sectionKey, boolean deep) { - if (sectionKey == null) return BungeeSectionWrapper.getAllKeys(this.configuration); - - Configuration section = configuration.getSection(sectionKey); - if (section == null) return null; - - return new HashSet<>(section.getKeys()); - } - - @Override - public @Nullable Object getValue(@NotNull String key) { - return configuration.get(key); - } - - @Override - public @Nullable List getHeaderComments(@Nullable String key) { - return comments.getHeaderComment(key); - } - -} diff --git a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/source/BungeeSectionWrapper.java b/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/source/BungeeSectionWrapper.java deleted file mode 100644 index 251f323..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/source/BungeeSectionWrapper.java +++ /dev/null @@ -1,94 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.source; - -import cc.carm.lib.configuration.core.source.ConfigurationWrapper; -import net.md_5.bungee.config.Configuration; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.stream.Collectors; - -import static cc.carm.lib.mineconfiguration.bungee.source.BungeeConfigProvider.SEPARATOR; - -public class BungeeSectionWrapper implements ConfigurationWrapper { - - private final Configuration configuration; - - private BungeeSectionWrapper(@NotNull Configuration section) { - this.configuration = section; - } - - @Contract("!null->!null") - public static @Nullable BungeeSectionWrapper of(@Nullable Configuration section) { - return section == null ? null : new BungeeSectionWrapper(section); - } - - protected static Set getAllKeys(@NotNull Configuration config) { - Set keys = new LinkedHashSet<>(); - for (String key : config.getKeys()) { - keys.add(key); - Object value = config.get(key); - if (value instanceof Configuration) { - getAllKeys((Configuration) value).stream() - .map(subKey -> key + SEPARATOR + subKey).forEach(keys::add); - } - } - return keys; - } - - @Override - public @NotNull Configuration getSource() { - return this.configuration; - } - - @Override - public @NotNull Set getKeys(boolean deep) { - if (deep) { - return new LinkedHashSet<>(getAllKeys(configuration)); - } else { - return new LinkedHashSet<>(configuration.getKeys()); - } - } - - @Override - public @NotNull Map getValues(boolean deep) { - return getKeys(deep).stream() - .collect(Collectors.toMap(key -> key, configuration::get, (a, b) -> b, LinkedHashMap::new)); - } - - @Override - public void set(@NotNull String path, @Nullable Object value) { - this.configuration.set(path, value); - } - - @Override - public boolean contains(@NotNull String path) { - return this.configuration.contains(path); - } - - @Override - public @Nullable Object get(@NotNull String path) { - return this.configuration.get(path); - } - - @Override - public boolean isList(@NotNull String path) { - return get(path) instanceof List; - } - - @Override - public @Nullable List getList(@NotNull String path) { - return this.configuration.getList(path); - } - - @Override - public boolean isConfigurationSection(@NotNull String path) { - return get(path) instanceof Configuration; - } - - @Override - public @Nullable BungeeSectionWrapper getConfigurationSection(@NotNull String path) { - return of(this.configuration.getSection(path)); - } -} 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 3ad4f69..fd63cce 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,52 +1,64 @@ package cc.carm.lib.mineconfiguration.bungee.value; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.bungee.BungeeConfigValue; -import cc.carm.lib.mineconfiguration.bungee.builder.message.BungeeMessageValueBuilder; -import cc.carm.lib.mineconfiguration.bungee.data.TextConfig; -import cc.carm.lib.mineconfiguration.common.value.ConfigMessage; +import cc.carm.lib.configuration.value.ValueManifest; +import cc.carm.lib.configuration.value.text.ConfiguredText; +import cc.carm.lib.configuration.value.text.data.TextContents; +import cc.carm.lib.easyplugin.utils.ColorParser; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.TextComponent; 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.function.BiConsumer; import java.util.function.BiFunction; -public class ConfiguredMessage extends ConfigMessage { +public class ConfiguredMessage extends ConfiguredText { @NotNull - public static BungeeMessageValueBuilder<@Nullable M> create(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser) { - return BungeeConfigValue.builder().createMessage().asValue(messageParser); + public static ConfiguredMessage.Builder create() { + return new Builder(); } - public static BungeeMessageValueBuilder asString() { - return BungeeConfigValue.builder().createMessage().asStringValue(); + public static ConfiguredMessage ofString(@NotNull String... messages) { + return create().defaults(messages).build(); } - public static ConfiguredMessage ofString() { - return asString().build(); + public ConfiguredMessage(@NotNull ValueManifest manifest, + @NotNull BiFunction parser, + @NotNull BiFunction compiler, + @NotNull BiConsumer> dispatcher, + @NotNull String[] params) { + super(manifest, parser, compiler, dispatcher, params); } - public static ConfiguredMessage ofString(@NotNull String defaultMessage) { - return asString().defaults(defaultMessage).build(); + public void print(Object... values) { + prepare(values).to(ProxyServer.getInstance().getConsole()); } - public ConfiguredMessage(@NotNull ValueManifest manifest, @NotNull String[] params, - @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull CommandSender, @NotNull M> sendFunction) { - super(manifest, TextConfig.class, params, messageParser, sendFunction, TextConfig::of); - } + public static class Builder extends ConfiguredText.Builder { - @Override - public @NotNull Collection getAllReceivers() { - List senders = new ArrayList<>(); - senders.add(ProxyServer.getInstance().getConsole()); - senders.addAll(ProxyServer.getInstance().getPlayers()); - return senders; + public Builder() { + super(); + this.parser = (sender, message) -> ColorParser.parse(message); + this.compiler = (sender, message) -> new BaseComponent[]{new TextComponent(message)}; + this.dispatcher = (sender, message) -> { + for (BaseComponent[] component : message) { + sender.sendMessage(component); + } + }; + } + + @Override + public @NotNull ConfiguredMessage build() { + return new ConfiguredMessage(buildManifest(), this.parser, this.compiler, this.dispatcher, this.params); + } + + @Override + public @NotNull ConfiguredMessage.Builder self() { + return this; + } } 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 deleted file mode 100644 index 76bf60b..0000000 --- a/platform/bungee/src/main/java/cc/carm/lib/mineconfiguration/bungee/value/ConfiguredMessageList.java +++ /dev/null @@ -1,47 +0,0 @@ -package cc.carm.lib.mineconfiguration.bungee.value; - -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.bungee.BungeeConfigValue; -import cc.carm.lib.mineconfiguration.bungee.builder.message.BungeeMessageListBuilder; -import cc.carm.lib.mineconfiguration.bungee.data.TextConfig; -import cc.carm.lib.mineconfiguration.common.value.ConfigMessageList; -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.function.BiConsumer; -import java.util.function.BiFunction; - -public class ConfiguredMessageList extends ConfigMessageList { - - @NotNull - public static BungeeMessageListBuilder create(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser) { - return BungeeConfigValue.builder().createMessage().asList(messageParser); - } - - public static BungeeMessageListBuilder asStrings() { - return BungeeConfigValue.builder().createMessage().asStringList(); - } - - public static ConfiguredMessageList ofStrings(@NotNull String... defaultMessages) { - return asStrings().defaults(defaultMessages).build(); - } - - public ConfiguredMessageList(@NotNull ValueManifest> manifest, @NotNull String[] params, - @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull CommandSender, @NotNull List> sendFunction) { - super(manifest, TextConfig.class, params, messageParser, sendFunction, TextConfig::of); - } - - @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/bungee/src/test/java/ConfigTest.java b/platform/bungee/src/test/java/ConfigTest.java deleted file mode 100644 index 241c65f..0000000 --- a/platform/bungee/src/test/java/ConfigTest.java +++ /dev/null @@ -1,62 +0,0 @@ -import cc.carm.lib.configuration.core.ConfigurationRoot; -import cc.carm.lib.configuration.core.annotation.HeaderComment; -import cc.carm.lib.configuration.core.annotation.InlineComment; -import cc.carm.lib.configuration.core.source.ConfigurationProvider; -import cc.carm.lib.configuration.core.value.ConfigValue; -import cc.carm.lib.configuration.core.value.type.ConfiguredList; -import cc.carm.lib.configuration.core.value.type.ConfiguredValue; -import cc.carm.lib.mineconfiguration.bungee.MineConfiguration; -import org.junit.Test; - -import java.io.File; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.util.List; - -public class ConfigTest { - - - @Test - public void test() { - File file = new File("target/config.yml"); - ConfigurationProvider config = MineConfiguration.from(file); - config.initialize(Configuration.class); - - try { - System.out.println("--------------------------------------------"); - System.out.println(new String(Files.readAllBytes(file.toPath()), StandardCharsets.UTF_8)); - System.out.println("--------------------------------------------"); - } catch (Exception exception) { - exception.printStackTrace(); - } - } - - - @HeaderComment({ - "MineConfiguration for BungeeCord", - "测试实例配置文件", "" - }) - public static class Configuration extends ConfigurationRoot { - - @InlineComment("是否显示DEBUG消息") - public static final ConfigValue DEBUG = ConfiguredValue.of(Boolean.class, false); - - @HeaderComment("启动时执行的命令") - public static final class START_UP { - - @HeaderComment("延迟执行的时间(单位:秒)") - public static final ConfigValue DELAY = ConfiguredValue.of(Integer.class, 30); - - @HeaderComment("循环执行的间隔(单位:秒)") - public static final ConfigValue PERIOD = ConfiguredValue.of(Integer.class, 10); - - @HeaderComment("执行的指令列表") - @InlineComment("建议以\"\"包裹") - public static final ConfigValue> COMMANDS = ConfiguredList.builderOf(String.class) - .fromString().defaults("alert Commands here!").build(); - } - - } - - -} diff --git a/platform/velocity/pom.xml b/platform/velocity/pom.xml index 76ce0a7..c126a70 100644 --- a/platform/velocity/pom.xml +++ b/platform/velocity/pom.xml @@ -5,7 +5,7 @@ mineconfiguration-parent cc.carm.lib - 2.9.3 + 3.0.0 ../../pom.xml 4.0.0 @@ -21,6 +21,13 @@ MineConfiguration-Velocity 轻松(做)配置,适用于Velocity的版本,可用JSON与YAML格式。 + + + papermc + https://papermc.io/repo/repository/maven-public/ + + + @@ -32,24 +39,15 @@ cc.carm.lib - yamlcommentwriter - ${deps.yamlcommentwriter.version} + easyconfiguration-yaml + ${deps.easyconfifuration.version} compile - net.md-5 - velocitycord-api - 1.18-R0.1-SNAPSHOT - jar - provided - - - - net.md-5 - velocitycord-api - 1.18-R0.1-SNAPSHOT - javadoc + com.velocitypowered + velocity-api + 3.4.0-SNAPSHOT provided diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/BungeeConfigValue.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/BungeeConfigValue.java deleted file mode 100644 index 51c43ad..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/BungeeConfigValue.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity; - -import cc.carm.lib.configuration.core.source.ConfigurationProvider; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.configuration.core.value.impl.CachedConfigValue; -import cc.carm.lib.mineconfiguration.velocity.builder.VelocityConfigBuilder; -import cc.carm.lib.mineconfiguration.velocity.source.BungeeConfigProvider; -import cc.carm.lib.mineconfiguration.velocity.source.BungeeSectionWrapper; -import org.jetbrains.annotations.NotNull; - -public abstract class BungeeConfigValue extends CachedConfigValue { - - public static @NotNull VelocityConfigBuilder builder() { - return new VelocityConfigBuilder(); - } - - public BungeeConfigValue(@NotNull ValueManifest manifest) { - super(manifest); - } - - public BungeeConfigProvider getBukkitProvider() { - ConfigurationProvider provider = getProvider(); - if (provider instanceof BungeeConfigProvider) return (BungeeConfigProvider) getProvider(); - else throw new IllegalStateException("Provider is not a SpigotConfigProvider"); - } - - public BungeeSectionWrapper getBukkitConfig() { - return getBukkitProvider().getConfiguration(); - } - -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/MineConfiguration.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/MineConfiguration.java index 9ec5115..b784d22 100644 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/MineConfiguration.java +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/MineConfiguration.java @@ -1,120 +1,35 @@ package cc.carm.lib.mineconfiguration.velocity; -import cc.carm.lib.configuration.core.Configuration; -import cc.carm.lib.configuration.core.ConfigurationRoot; -import cc.carm.lib.mineconfiguration.velocity.source.BungeeConfigProvider; +import cc.carm.lib.configuration.Configuration; +import cc.carm.lib.configuration.source.ConfigurationHolder; +import cc.carm.lib.configuration.source.yaml.YAMLConfigFactory; +import cc.carm.lib.configuration.source.yaml.YAMLSource; import cc.carm.lib.mineconfiguration.common.AbstractConfiguration; -import net.md_5.bungee.api.plugin.Plugin; -import net.md_5.bungee.config.ConfigurationProvider; -import net.md_5.bungee.config.JsonConfiguration; -import net.md_5.bungee.config.YamlConfiguration; import org.jetbrains.annotations.NotNull; import java.io.File; -import java.io.IOException; -public class MineConfiguration extends AbstractConfiguration { +public class MineConfiguration extends AbstractConfiguration> { - protected static BungeeConfigProvider create(File file, String source, ConfigurationProvider loader) { - BungeeConfigProvider provider = new BungeeConfigProvider(file, loader); - try { - provider.initializeFile(source); - provider.initializeConfig(); - } catch (IOException e) { - e.printStackTrace(); - } - return provider; + public MineConfiguration(@NotNull File pluginDataFolder) { + super( + YAMLConfigFactory.from(pluginDataFolder, "config.yml").resourcePath("config.yml").build(), + YAMLConfigFactory.from(pluginDataFolder, "messages.yml").resourcePath("messages.yml").build() + ); } - public static BungeeConfigProvider from(File file, String source) { - return fromYAML(file, source); - } - - public static BungeeConfigProvider from(File file) { - return from(file, file.getName()); - } - - public static BungeeConfigProvider from(String fileName) { - return from(fileName, fileName); - } - - public static BungeeConfigProvider from(String fileName, String source) { - return from(new File(fileName), source); - } - - public static BungeeConfigProvider from(Plugin plugin, String fileName) { - return from(plugin, fileName, fileName); - } - - public static BungeeConfigProvider from(Plugin plugin, String fileName, String source) { - return from(new File(plugin.getDataFolder(), fileName), source); - } - - public static BungeeConfigProvider fromYAML(File file, String source) { - return create(file, source, ConfigurationProvider.getProvider(YamlConfiguration.class)); - } - - public static BungeeConfigProvider fromYAML(String fileName, String source) { - return fromYAML(new File(fileName), source); - } - - public static BungeeConfigProvider fromYAML(File file) { - return fromYAML(file, file.getName()); - } - - public static BungeeConfigProvider fromYAML(String fileName) { - return fromYAML(fileName, fileName); - } - - public static BungeeConfigProvider fromYAML(Plugin plugin, String fileName) { - return fromYAML(plugin, fileName, fileName); - } - - public static BungeeConfigProvider fromYAML(Plugin plugin, String fileName, String source) { - return fromYAML(new File(plugin.getDataFolder(), fileName), source); - } - - public static BungeeConfigProvider fromJSON(File file, String source) { - return create(file, source, ConfigurationProvider.getProvider(JsonConfiguration.class)); - } - - public static BungeeConfigProvider fromJSON(String fileName, String source) { - return fromJSON(new File(fileName), source); - } - - public static BungeeConfigProvider fromJSON(File file) { - return fromJSON(file, file.getName()); - } - - public static BungeeConfigProvider fromJSON(String fileName) { - return fromJSON(fileName, fileName); - } - - public static BungeeConfigProvider fromJSON(Plugin plugin, String fileName) { - return fromJSON(plugin, fileName, fileName); - } - - public static BungeeConfigProvider fromJSON(Plugin plugin, String fileName, String source) { - return fromJSON(new File(plugin.getDataFolder(), fileName), source); - } - - - public MineConfiguration(@NotNull Plugin plugin) { - super(from(plugin, "config.yml"), from(plugin, "messages.yml")); - } - - public MineConfiguration(@NotNull Plugin plugin, + public MineConfiguration(@NotNull File pluginDataFolder, @NotNull Configuration configRoot, @NotNull Configuration messageRoot) { - this(plugin); + this(pluginDataFolder); initializeConfig(configRoot); initializeMessage(messageRoot); } - public MineConfiguration(@NotNull Plugin plugin, + public MineConfiguration(@NotNull File pluginDataFolder, @NotNull Class configRoot, @NotNull Class messageRoot) { - this(plugin); + this(pluginDataFolder); initializeConfig(configRoot); initializeMessage(messageRoot); } diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/AbstractVelocityBuilder.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/AbstractVelocityBuilder.java deleted file mode 100644 index 1e772a9..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/AbstractVelocityBuilder.java +++ /dev/null @@ -1,13 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.builder; - -import cc.carm.lib.mineconfiguration.velocity.source.BungeeConfigProvider; -import cc.carm.lib.configuration.core.builder.AbstractConfigBuilder; - -public abstract class AbstractVelocityBuilder> - extends AbstractConfigBuilder { - - public AbstractVelocityBuilder() { - super(BungeeConfigProvider.class); - } - -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/VelocityConfigBuilder.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/VelocityConfigBuilder.java deleted file mode 100644 index 0a54b63..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/VelocityConfigBuilder.java +++ /dev/null @@ -1,14 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.builder; - -import cc.carm.lib.mineconfiguration.velocity.builder.message.BungeeMessageBuilder; -import cc.carm.lib.configuration.core.builder.ConfigBuilder; -import org.jetbrains.annotations.NotNull; - -public class VelocityConfigBuilder extends ConfigBuilder { - - public @NotNull BungeeMessageBuilder createMessage() { - return new BungeeMessageBuilder(); - } - - -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageBuilder.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageBuilder.java deleted file mode 100644 index 49d9176..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageBuilder.java +++ /dev/null @@ -1,42 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.builder.message; - -import cc.carm.lib.easyplugin.utils.ColorParser; -import cc.carm.lib.mineconfiguration.velocity.data.TextConfig; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageConfigBuilder; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.BiFunction; - -@SuppressWarnings("deprecation") -public class BungeeMessageBuilder extends MessageConfigBuilder { - - - public BungeeMessageBuilder() { - super(CommandSender.class, TextConfig.class); - } - - @Override - public @NotNull BungeeMessageValueBuilder asValue(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - return new BungeeMessageValueBuilder<>(parser); - } - - @Override - public @NotNull BungeeMessageListBuilder asList(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - return new BungeeMessageListBuilder<>(parser); - } - - public @NotNull BungeeMessageValueBuilder asStringValue() { - return asValue(defaultParser()).whenSend(CommandSender::sendMessage); - } - - public @NotNull BungeeMessageListBuilder asStringList() { - return asList(defaultParser()).whenSend((r, m) -> m.forEach(r::sendMessage)); - } - - protected static @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable String> defaultParser() { - return (receiver, message) -> ColorParser.parse(message); - } - -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageListBuilder.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageListBuilder.java deleted file mode 100644 index 24a9d2d..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageListBuilder.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.builder.message; - -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.velocity.data.TextConfig; -import cc.carm.lib.mineconfiguration.velocity.value.ConfiguredMessageList; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageListBuilder; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.function.BiFunction; - -public class BungeeMessageListBuilder - extends MessageListBuilder> { - - public BungeeMessageListBuilder(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - super(CommandSender.class, TextConfig::of, parser); - } - - @Override - protected @NotNull BungeeMessageListBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredMessageList build() { - return new ConfiguredMessageList<>( - buildManifest(TextConfig.of(new ArrayList<>())), - ParamsUtils.formatParams(this.paramFormatter, this.params), - this.messageParser, this.sendFunction - ); - } -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageValueBuilder.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageValueBuilder.java deleted file mode 100644 index 5ac725d..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageValueBuilder.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.builder.message; - -import cc.carm.lib.mineconfiguration.velocity.data.TextConfig; -import cc.carm.lib.mineconfiguration.velocity.value.ConfiguredMessage; -import cc.carm.lib.mineconfiguration.common.builder.message.MessageValueBuilder; -import cc.carm.lib.mineconfiguration.common.utils.ParamsUtils; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.BiFunction; - -public class BungeeMessageValueBuilder - extends MessageValueBuilder> { - - public BungeeMessageValueBuilder(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> parser) { - super(CommandSender.class, TextConfig::new, parser); - } - - @Override - protected @NotNull BungeeMessageValueBuilder getThis() { - return this; - } - - @Override - public @NotNull ConfiguredMessage build() { - return new ConfiguredMessage<>( - buildManifest(TextConfig.of("")), - ParamsUtils.formatParams(this.paramFormatter, this.params), - this.messageParser, this.sendHandler - ); - } - - -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/data/TextConfig.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/data/TextConfig.java deleted file mode 100644 index 3ffa561..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/data/TextConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.data; - -import cc.carm.lib.mineconfiguration.common.data.AbstractText; -import net.md_5.bungee.api.CommandSender; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class TextConfig extends AbstractText { - - public TextConfig(@NotNull String message) { - super(CommandSender.class, message); - } - - @Contract("!null,-> !null") - public static @Nullable TextConfig of(@Nullable String message) { - if (message == null) return null; - else return new TextConfig(message); - } - - public static @NotNull List of(@Nullable List messages) { - if (messages == null || messages.isEmpty()) return new ArrayList<>(); - else return messages.stream().map(TextConfig::of).collect(Collectors.toList()); - } - - public static @NotNull List of(@NotNull String... messages) { - return of(Arrays.asList(messages)); - } - -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeConfigProvider.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeConfigProvider.java deleted file mode 100644 index c985b8d..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeConfigProvider.java +++ /dev/null @@ -1,107 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.source; - -import cc.carm.lib.configuration.core.ConfigInitializer; -import cc.carm.lib.configuration.core.source.ConfigurationComments; -import cc.carm.lib.configuration.core.source.impl.FileConfigProvider; -import cc.carm.lib.yamlcommentupdater.CommentedYAML; -import cc.carm.lib.yamlcommentupdater.CommentedYAMLWriter; -import net.md_5.bungee.config.Configuration; -import net.md_5.bungee.config.ConfigurationProvider; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class BungeeConfigProvider extends FileConfigProvider implements CommentedYAML { - - protected static final char SEPARATOR = '.'; - - protected ConfigurationProvider loader; - protected Configuration configuration; - protected ConfigInitializer initializer; - - protected ConfigurationComments comments = new ConfigurationComments(); - - public BungeeConfigProvider(@NotNull File file, @NotNull ConfigurationProvider loader) { - super(file); - this.loader = loader; - } - - public BungeeConfigProvider(@NotNull File file, @NotNull Class providerClass) { - this(file, ConfigurationProvider.getProvider(providerClass)); - } - - public void initializeConfig() throws IOException { - this.configuration = getLoader().load(file); - this.initializer = new ConfigInitializer<>(this); - } - - @Override - public @NotNull BungeeSectionWrapper getConfiguration() { - return BungeeSectionWrapper.of(configuration); - } - - @Override - protected void onReload() throws Exception { - this.configuration = getLoader().load(file); - } - - @Override - public @NotNull ConfigurationComments getComments() { - return this.comments; - } - - @Override - public void save() throws Exception { - try { - CommentedYAMLWriter.writeWithComments(this, this.file); - } catch (Exception ex) { - getLoader().save(configuration, file); - throw ex; - } - } - - @Override - public @NotNull ConfigInitializer getInitializer() { - return this.initializer; - } - - public ConfigurationProvider getLoader() { - return loader; - } - - @Override - public String serializeValue(@NotNull String key, @NotNull Object value) { - Configuration tmp = new Configuration();// 该对象用于临时记录配置内容 - tmp.set(key, value); - StringWriter tmpStr = new StringWriter(); - loader.save(tmp, tmpStr); - return tmpStr.toString(); - } - - @Override - public Set getKeys(@Nullable String sectionKey, boolean deep) { - if (sectionKey == null) return BungeeSectionWrapper.getAllKeys(this.configuration); - - Configuration section = configuration.getSection(sectionKey); - if (section == null) return null; - - return new HashSet<>(section.getKeys()); - } - - @Override - public @Nullable Object getValue(@NotNull String key) { - return configuration.get(key); - } - - @Override - public @Nullable List getHeaderComments(@Nullable String key) { - return comments.getHeaderComment(key); - } - -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeSectionWrapper.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeSectionWrapper.java deleted file mode 100644 index b1a8c39..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeSectionWrapper.java +++ /dev/null @@ -1,94 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.source; - -import cc.carm.lib.configuration.core.source.ConfigurationWrapper; -import net.md_5.bungee.config.Configuration; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; -import java.util.stream.Collectors; - -import static cc.carm.lib.mineconfiguration.velocity.source.BungeeConfigProvider.SEPARATOR; - -public class BungeeSectionWrapper implements ConfigurationWrapper { - - private final Configuration configuration; - - private BungeeSectionWrapper(@NotNull Configuration section) { - this.configuration = section; - } - - @Contract("!null->!null") - public static @Nullable BungeeSectionWrapper of(@Nullable Configuration section) { - return section == null ? null : new BungeeSectionWrapper(section); - } - - protected static Set getAllKeys(@NotNull Configuration config) { - Set keys = new LinkedHashSet<>(); - for (String key : config.getKeys()) { - keys.add(key); - Object value = config.get(key); - if (value instanceof Configuration) { - getAllKeys((Configuration) value).stream() - .map(subKey -> key + SEPARATOR + subKey).forEach(keys::add); - } - } - return keys; - } - - @Override - public @NotNull Configuration getSource() { - return this.configuration; - } - - @Override - public @NotNull Set getKeys(boolean deep) { - if (deep) { - return new LinkedHashSet<>(getAllKeys(configuration)); - } else { - return new LinkedHashSet<>(configuration.getKeys()); - } - } - - @Override - public @NotNull Map getValues(boolean deep) { - return getKeys(deep).stream() - .collect(Collectors.toMap(key -> key, configuration::get, (a, b) -> b, LinkedHashMap::new)); - } - - @Override - public void set(@NotNull String path, @Nullable Object value) { - this.configuration.set(path, value); - } - - @Override - public boolean contains(@NotNull String path) { - return this.configuration.contains(path); - } - - @Override - public @Nullable Object get(@NotNull String path) { - return this.configuration.get(path); - } - - @Override - public boolean isList(@NotNull String path) { - return get(path) instanceof List; - } - - @Override - public @Nullable List getList(@NotNull String path) { - return this.configuration.getList(path); - } - - @Override - public boolean isConfigurationSection(@NotNull String path) { - return get(path) instanceof Configuration; - } - - @Override - public @Nullable BungeeSectionWrapper getConfigurationSection(@NotNull String path) { - return of(this.configuration.getSection(path)); - } -} diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessage.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessage.java index b1559d1..bda46bd 100644 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessage.java +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessage.java @@ -1,52 +1,59 @@ package cc.carm.lib.mineconfiguration.velocity.value; -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.velocity.BungeeConfigValue; -import cc.carm.lib.mineconfiguration.velocity.builder.message.BungeeMessageValueBuilder; -import cc.carm.lib.mineconfiguration.velocity.data.TextConfig; -import cc.carm.lib.mineconfiguration.common.value.ConfigMessage; -import net.md_5.bungee.api.CommandSender; -import net.md_5.bungee.api.ProxyServer; +import cc.carm.lib.configuration.value.ValueManifest; +import cc.carm.lib.configuration.value.text.ConfiguredText; +import cc.carm.lib.configuration.value.text.data.TextContents; +import cc.carm.lib.easyplugin.utils.ColorParser; +import net.kyori.adventure.audience.Audience; +import net.kyori.adventure.text.Component; 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.function.BiConsumer; import java.util.function.BiFunction; -public class ConfiguredMessage extends ConfigMessage { +public class ConfiguredMessage extends ConfiguredText { @NotNull - public static BungeeMessageValueBuilder<@Nullable M> create(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser) { - return BungeeConfigValue.builder().createMessage().asValue(messageParser); + public static ConfiguredMessage.Builder create() { + return new Builder(); } - public static BungeeMessageValueBuilder asString() { - return BungeeConfigValue.builder().createMessage().asStringValue(); + public static ConfiguredMessage ofString(@NotNull String... messages) { + return create().defaults(messages).build(); } - public static ConfiguredMessage ofString() { - return asString().build(); + public ConfiguredMessage(@NotNull ValueManifest manifest, + @NotNull BiFunction parser, + @NotNull BiFunction compiler, + @NotNull BiConsumer> dispatcher, + @NotNull String[] params) { + super(manifest, parser, compiler, dispatcher, params); } - public static ConfiguredMessage ofString(@NotNull String defaultMessage) { - return asString().defaults(defaultMessage).build(); + public void sendActionBar(Audience audience, Object... values) { + Component content = prepare(values).parseLine(audience, (sender, message) -> Component.text(message)); + if (content != null) audience.sendActionBar(content); } - public ConfiguredMessage(@NotNull ValueManifest manifest, @NotNull String[] params, - @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull CommandSender, @NotNull M> sendFunction) { - super(manifest, TextConfig.class, params, messageParser, sendFunction, TextConfig::of); - } + public static class Builder extends ConfiguredText.Builder { - @Override - public @NotNull Collection getAllReceivers() { - List senders = new ArrayList<>(); - senders.add(ProxyServer.getInstance().getConsole()); - senders.addAll(ProxyServer.getInstance().getPlayers()); - return senders; + public Builder() { + super(); + this.parser = (receiver, message) -> ColorParser.parse(message); + this.compiler = (receiver, message) -> Component.text(message); + this.dispatcher = (receiver, message) -> message.forEach(receiver::sendMessage); + } + + @Override + public @NotNull ConfiguredMessage build() { + return new ConfiguredMessage(buildManifest(), this.parser, this.compiler, this.dispatcher, this.params); + } + + @Override + public @NotNull ConfiguredMessage.Builder self() { + return this; + } } diff --git a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessageList.java b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessageList.java deleted file mode 100644 index 19f64c4..0000000 --- a/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessageList.java +++ /dev/null @@ -1,47 +0,0 @@ -package cc.carm.lib.mineconfiguration.velocity.value; - -import cc.carm.lib.configuration.core.value.ValueManifest; -import cc.carm.lib.mineconfiguration.velocity.BungeeConfigValue; -import cc.carm.lib.mineconfiguration.velocity.builder.message.BungeeMessageListBuilder; -import cc.carm.lib.mineconfiguration.velocity.data.TextConfig; -import cc.carm.lib.mineconfiguration.common.value.ConfigMessageList; -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.function.BiConsumer; -import java.util.function.BiFunction; - -public class ConfiguredMessageList extends ConfigMessageList { - - @NotNull - public static BungeeMessageListBuilder create(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser) { - return BungeeConfigValue.builder().createMessage().asList(messageParser); - } - - public static BungeeMessageListBuilder asStrings() { - return BungeeConfigValue.builder().createMessage().asStringList(); - } - - public static ConfiguredMessageList ofStrings(@NotNull String... defaultMessages) { - return asStrings().defaults(defaultMessages).build(); - } - - public ConfiguredMessageList(@NotNull ValueManifest> manifest, @NotNull String[] params, - @NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser, - @NotNull BiConsumer<@NotNull CommandSender, @NotNull List> sendFunction) { - super(manifest, TextConfig.class, params, messageParser, sendFunction, TextConfig::of); - } - - @Override - public @NotNull Collection getAllReceivers() { - List senders = new ArrayList<>(); - senders.add(ProxyServer.getInstance().getConsole()); - senders.addAll(ProxyServer.getInstance().getPlayers()); - return senders; - } -} diff --git a/pom.xml b/pom.xml index eaac9d3..ee1f07b 100644 --- a/pom.xml +++ b/pom.xml @@ -10,20 +10,20 @@ UTF-8 UTF-8 - 3.9.1 + 4.0.1 + 1.2.0 1.5.12 - 1.0.1 cc.carm.lib mineconfiguration-parent - 2.9.3 + 3.0.0 pom common + platform/bukkit platform/bungee platform/velocity - platform/bukkit MineConfiguration