From 154f536768b54898c4ea75c50326ee7d8a3bcc1d Mon Sep 17 00:00:00 2001 From: Carm Date: Sat, 28 Dec 2024 00:25:21 +0800 Subject: [PATCH] chore(platform): Try to support Velocity --- .../bukkit/CraftConfigValue.java | 7 +- .../bukkit/builder/CraftConfigBuilder.java | 34 ----- platform/velocity/pom.xml | 67 ++++++++++ .../velocity/BungeeConfigValue.java | 31 +++++ .../velocity/MineConfiguration.java | 123 ++++++++++++++++++ .../builder/AbstractVelocityBuilder.java | 13 ++ .../builder/VelocityConfigBuilder.java | 14 ++ .../builder/message/BungeeMessageBuilder.java | 42 ++++++ .../message/BungeeMessageListBuilder.java | 35 +++++ .../message/BungeeMessageValueBuilder.java | 35 +++++ .../velocity/data/TextConfig.java | 35 +++++ .../velocity/source/BungeeConfigProvider.java | 107 +++++++++++++++ .../velocity/source/BungeeSectionWrapper.java | 94 +++++++++++++ .../velocity/value/ConfiguredMessage.java | 53 ++++++++ .../velocity/value/ConfiguredMessageList.java | 47 +++++++ pom.xml | 1 + 16 files changed, 698 insertions(+), 40 deletions(-) delete mode 100644 platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/CraftConfigBuilder.java create mode 100644 platform/velocity/pom.xml create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/BungeeConfigValue.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/MineConfiguration.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/AbstractVelocityBuilder.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/VelocityConfigBuilder.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageBuilder.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageListBuilder.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageValueBuilder.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/data/TextConfig.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeConfigProvider.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeSectionWrapper.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessage.java create mode 100644 platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessageList.java 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 index cad7d48c..6828c856 100644 --- 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 @@ -3,17 +3,12 @@ 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.builder.CraftConfigBuilder; 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 { - - public static @NotNull CraftConfigBuilder builder() { - return new CraftConfigBuilder(); - } - + protected CraftConfigValue(@NotNull ValueManifest manifest) { super(manifest); } diff --git a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/CraftConfigBuilder.java b/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/CraftConfigBuilder.java deleted file mode 100644 index cac9bb36..00000000 --- a/platform/bukkit/src/main/java/cc/carm/lib/mineconfiguration/bukkit/builder/CraftConfigBuilder.java +++ /dev/null @@ -1,34 +0,0 @@ -package cc.carm.lib.mineconfiguration.bukkit.builder; - -import cc.carm.lib.configuration.core.builder.ConfigBuilder; -import cc.carm.lib.mineconfiguration.bukkit.builder.item.ItemConfigBuilder; -import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageBuilder; -import cc.carm.lib.mineconfiguration.bukkit.builder.serializable.SerializableBuilder; -import cc.carm.lib.mineconfiguration.bukkit.builder.sound.SoundConfigBuilder; -import cc.carm.lib.mineconfiguration.bukkit.builder.title.TitleConfigBuilder; -import org.bukkit.configuration.serialization.ConfigurationSerializable; -import org.jetbrains.annotations.NotNull; - -public class CraftConfigBuilder extends ConfigBuilder { - - public @NotNull SoundConfigBuilder createSound() { - return new SoundConfigBuilder(); - } - - public @NotNull ItemConfigBuilder createItem() { - return new ItemConfigBuilder(); - } - - public @NotNull CraftMessageBuilder createMessage() { - return new CraftMessageBuilder(); - } - - public @NotNull TitleConfigBuilder createTitle() { - return new TitleConfigBuilder(); - } - - public @NotNull SerializableBuilder ofSerializable(@NotNull Class valueClass) { - return new SerializableBuilder<>(valueClass); - } - -} diff --git a/platform/velocity/pom.xml b/platform/velocity/pom.xml new file mode 100644 index 00000000..76ce0a70 --- /dev/null +++ b/platform/velocity/pom.xml @@ -0,0 +1,67 @@ + + + + mineconfiguration-parent + cc.carm.lib + 2.9.3 + ../../pom.xml + + 4.0.0 + + ${project.jdk.version} + ${project.jdk.version} + UTF-8 + UTF-8 + + mineconfiguration-velocity + jar + + MineConfiguration-Velocity + 轻松(做)配置,适用于Velocity的版本,可用JSON与YAML格式。 + + + + + ${project.parent.groupId} + mineconfiguration-common + ${project.parent.version} + compile + + + + cc.carm.lib + yamlcommentwriter + ${deps.yamlcommentwriter.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 + provided + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + + + + + \ No newline at end of file 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 new file mode 100644 index 00000000..51c43ad8 --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/BungeeConfigValue.java @@ -0,0 +1,31 @@ +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 new file mode 100644 index 00000000..9ec5115c --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/MineConfiguration.java @@ -0,0 +1,123 @@ +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.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 MineConfiguration(@NotNull Plugin plugin) { + super(from(plugin, "config.yml"), from(plugin, "messages.yml")); + } + + public MineConfiguration(@NotNull Plugin plugin, + @NotNull Configuration configRoot, + @NotNull Configuration messageRoot) { + this(plugin); + initializeConfig(configRoot); + initializeMessage(messageRoot); + } + + public MineConfiguration(@NotNull Plugin plugin, + @NotNull Class configRoot, + @NotNull Class messageRoot) { + this(plugin); + 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 new file mode 100644 index 00000000..1e772a90 --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/AbstractVelocityBuilder.java @@ -0,0 +1,13 @@ +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 new file mode 100644 index 00000000..0a54b63e --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/VelocityConfigBuilder.java @@ -0,0 +1,14 @@ +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 new file mode 100644 index 00000000..49d91769 --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageBuilder.java @@ -0,0 +1,42 @@ +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 new file mode 100644 index 00000000..24a9d2da --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageListBuilder.java @@ -0,0 +1,35 @@ +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 new file mode 100644 index 00000000..5ac725d4 --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/builder/message/BungeeMessageValueBuilder.java @@ -0,0 +1,35 @@ +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 new file mode 100644 index 00000000..3ffa5610 --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/data/TextConfig.java @@ -0,0 +1,35 @@ +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 new file mode 100644 index 00000000..c985b8d2 --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeConfigProvider.java @@ -0,0 +1,107 @@ +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 new file mode 100644 index 00000000..b1a8c39c --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/source/BungeeSectionWrapper.java @@ -0,0 +1,94 @@ +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 new file mode 100644 index 00000000..b1559d1c --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessage.java @@ -0,0 +1,53 @@ +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 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 { + + @NotNull + public static BungeeMessageValueBuilder<@Nullable M> create(@NotNull BiFunction<@Nullable CommandSender, @NotNull String, @Nullable M> messageParser) { + return BungeeConfigValue.builder().createMessage().asValue(messageParser); + } + + public static BungeeMessageValueBuilder asString() { + return BungeeConfigValue.builder().createMessage().asStringValue(); + } + + public static ConfiguredMessage ofString() { + return asString().build(); + } + + public static ConfiguredMessage ofString(@NotNull String defaultMessage) { + return asString().defaults(defaultMessage).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); + } + + @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/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 new file mode 100644 index 00000000..19f64c4d --- /dev/null +++ b/platform/velocity/src/main/java/cc/carm/lib/mineconfiguration/velocity/value/ConfiguredMessageList.java @@ -0,0 +1,47 @@ +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 d200835a..982a6cd6 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,7 @@ common platform/bungee + platform/velocity platform/bukkit