From 471bdab090dfcb5b961eb84069b36eaa973cb92d Mon Sep 17 00:00:00 2001 From: CarmJos Date: Thu, 6 Jan 2022 14:24:48 +0800 Subject: [PATCH] =?UTF-8?q?[v1.1.2]=20=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=20-=20[U]=20=E5=AF=B9=E4=BA=8E=E5=8F=AF=E8=83=BD=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E7=9A=84=E9=85=8D=E7=BD=AE=E5=8F=82=E6=95=B0=E6=8F=90?= =?UTF-8?q?=E4=BE=9BOptional=E6=96=B9=E6=B3=95=20-=20[U]=20=E5=B0=86?= =?UTF-8?q?=E5=A4=8D=E7=94=A8=E7=9A=84=E6=96=B9=E6=B3=95=E6=8F=90=E5=87=BA?= =?UTF-8?q?=E4=B8=BA=E6=8A=BD=E8=B1=A1=E7=B1=BB=E4=BD=BF=E7=94=A8=20-=20[U?= =?UTF-8?q?]=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easyplugin-all/pom.xml | 2 +- easyplugin-command/pom.xml | 2 +- easyplugin-common/pom.xml | 2 +- easyplugin-configuration/pom.xml | 2 +- .../configuration/cast/ConfigSectionCast.java | 58 +++++++++++++ .../configuration/cast/ConfigStringCast.java | 58 +++++++++++++ .../file/FileConfigCachedValue.java | 42 +++++++++ .../configuration/file/FileConfigValue.java | 51 +++++++++++ .../configuration/impl/ConfigSectionCast.java | 73 ---------------- .../configuration/impl/ConfigSound.java | 64 ++++++++------ .../configuration/impl/ConfigStringCast.java | 76 ----------------- .../configuration/message/ConfigMessage.java | 44 +++++++--- .../message/ConfigMessageList.java | 35 ++++++-- .../configuration/values/ConfigValue.java | 60 ++++++------- .../configuration/values/ConfigValueList.java | 76 +++++++---------- .../configuration/values/ConfigValueMap.java | 85 ++++++------------- easyplugin-database/pom.xml | 2 +- easyplugin-gui/pom.xml | 2 +- easyplugin-lp/pom.xml | 2 +- easyplugin-main/pom.xml | 2 +- .../cc/carm/lib/easyplugin/EasyPlugin.java | 6 +- .../lib/easyplugin/utils/MessageUtils.java | 51 ++++++++--- easyplugin-placeholderapi/pom.xml | 2 +- easyplugin-vault/pom.xml | 2 +- pom.xml | 2 +- 25 files changed, 443 insertions(+), 358 deletions(-) create mode 100644 easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigSectionCast.java create mode 100644 easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java create mode 100644 easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigCachedValue.java create mode 100644 easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java delete mode 100644 easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSectionCast.java delete mode 100644 easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigStringCast.java diff --git a/easyplugin-all/pom.xml b/easyplugin-all/pom.xml index 8d1c7ce..1edb215 100644 --- a/easyplugin-all/pom.xml +++ b/easyplugin-all/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-command/pom.xml b/easyplugin-command/pom.xml index 58e1dee..48aa4cb 100644 --- a/easyplugin-command/pom.xml +++ b/easyplugin-command/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-common/pom.xml b/easyplugin-common/pom.xml index ba578ca..ee8c071 100644 --- a/easyplugin-common/pom.xml +++ b/easyplugin-common/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-configuration/pom.xml b/easyplugin-configuration/pom.xml index 57917b4..cfd4a78 100644 --- a/easyplugin-configuration/pom.xml +++ b/easyplugin-configuration/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigSectionCast.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigSectionCast.java new file mode 100644 index 0000000..079549f --- /dev/null +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigSectionCast.java @@ -0,0 +1,58 @@ +package cc.carm.lib.easyplugin.configuration.cast; + +import cc.carm.lib.easyplugin.configuration.file.FileConfig; +import cc.carm.lib.easyplugin.configuration.file.FileConfigCachedValue; +import org.bukkit.configuration.ConfigurationSection; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; +import java.util.function.Function; + +public class ConfigSectionCast extends FileConfigCachedValue { + + @NotNull Function valueCast; + @Nullable V defaultValue; + + public ConfigSectionCast(@NotNull String configSection, + @NotNull Function valueCast) { + this(configSection, valueCast, null); + } + + public ConfigSectionCast(@NotNull String sectionName, + @NotNull Function valueCast, + @Nullable V defaultValue) { + this(null, sectionName, valueCast, defaultValue); + } + + public ConfigSectionCast(@Nullable FileConfig source, @NotNull String sectionName, + @NotNull Function valueCast, + @Nullable V defaultValue) { + super(source, sectionName); + this.valueCast = valueCast; + this.defaultValue = defaultValue; + } + + + public @Nullable V get() { + V cached = getCachedValue(); + if (cached != null && !isExpired()) { + return cached; + } else { + return getConfigOptional() + .map(config -> config.getConfigurationSection(getSectionName())) + .map(section -> updateCache(valueCast.apply(section))) + .orElse(defaultValue); + } + } + + public @NotNull Optional getOptional() { + return Optional.ofNullable(get()); + } + + + + public void set(ConfigurationSection section) { + } + +} diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java new file mode 100644 index 0000000..8a8a065 --- /dev/null +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/cast/ConfigStringCast.java @@ -0,0 +1,58 @@ +package cc.carm.lib.easyplugin.configuration.cast; + +import cc.carm.lib.easyplugin.configuration.file.FileConfig; +import cc.carm.lib.easyplugin.configuration.file.FileConfigCachedValue; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; +import java.util.function.Function; + +public class ConfigStringCast extends FileConfigCachedValue { + + @NotNull Function valueCast; + @Nullable V defaultValue; + + public ConfigStringCast(@NotNull String configSection, + @NotNull Function valueCast) { + this(configSection, valueCast, null); + } + + public ConfigStringCast(@NotNull String configSection, + @NotNull Function valueCast, + @Nullable V defaultValue) { + this(null, configSection, valueCast, defaultValue); + } + + public ConfigStringCast(@Nullable FileConfig source, @NotNull String sectionName, + @NotNull Function valueCast, + @Nullable V defaultValue) { + super(source, sectionName); + this.valueCast = valueCast; + this.defaultValue = defaultValue; + } + + public @Nullable V get() { + V cached = getCachedValue(); + if (cached != null && !isExpired()) { + return cached; + } else { + return getConfigOptional() + .map(config -> config.getString(getSectionName())) + .map(s -> updateCache(valueCast.apply(s))) + .orElse(defaultValue); + } + } + + public @NotNull Optional getOptional() { + return Optional.ofNullable(get()); + } + + public void set(@Nullable String value) { + getSourceOptional().ifPresent(source -> { + source.getConfig().set(getSectionName(), value); + source.save(); + }); + } + +} diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigCachedValue.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigCachedValue.java new file mode 100644 index 0000000..9a9ad3f --- /dev/null +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigCachedValue.java @@ -0,0 +1,42 @@ +package cc.carm.lib.easyplugin.configuration.file; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public abstract class FileConfigCachedValue extends FileConfigValue { + + protected V cachedValue; + protected long updateTime; + + public FileConfigCachedValue(@NotNull String sectionName) { + super(sectionName); + } + + public FileConfigCachedValue(@Nullable FileConfig source, @NotNull String sectionName) { + super(source, sectionName); + } + + public V updateCache(V value) { + this.updateTime = System.currentTimeMillis(); + this.cachedValue = value; + return getCachedValue(); + } + + public boolean isExpired() { + return getSource() == null || getSource().isExpired(this.updateTime); + } + + public long getUpdateTime() { + return updateTime; + } + + @Nullable + public V getCachedValue() { + return cachedValue; + } + + public void clearCache() { + this.cachedValue = null; + } + +} diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java new file mode 100644 index 0000000..d8aac74 --- /dev/null +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/file/FileConfigValue.java @@ -0,0 +1,51 @@ +package cc.carm.lib.easyplugin.configuration.file; + +import org.bukkit.configuration.file.FileConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +public abstract class FileConfigValue { + + protected @Nullable FileConfig source; + private final @NotNull String sectionName; + + public FileConfigValue(@NotNull String sectionName) { + this(null, sectionName); + } + + public FileConfigValue(@Nullable FileConfig source, @NotNull String sectionName) { + this.source = source; + this.sectionName = sectionName; + } + + public @NotNull String getSectionName() { + return sectionName; + } + + public void save() { + getSourceOptional().ifPresent(FileConfig::save); + } + + public @Nullable FileConfig getSource() { + return source == null ? FileConfig.getPluginConfiguration() : source; + } + + public Optional getSourceOptional() { + return Optional.ofNullable(getSource()); + } + + public Optional getConfigOptional() { + return getSourceOptional().map(FileConfig::getConfig); + } + + public static @Nullable V castValue(@Nullable Object val, @NotNull Class clazz) { + return castValue(val, clazz, null); + } + + public static @Nullable V castValue(@Nullable Object val, @NotNull Class clazz, @Nullable V defaultValue) { + return clazz.isInstance(val) ? clazz.cast(val) : defaultValue; + } + +} diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSectionCast.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSectionCast.java deleted file mode 100644 index b1f9609..0000000 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSectionCast.java +++ /dev/null @@ -1,73 +0,0 @@ -package cc.carm.lib.easyplugin.configuration.impl; - -import cc.carm.lib.easyplugin.configuration.file.FileConfig; -import org.bukkit.configuration.ConfigurationSection; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Function; - -public class ConfigSectionCast { - - @Nullable FileConfig source; - - @NotNull String configSection; - @NotNull Function valueCast; - @Nullable V defaultValue; - - V valueCache; - long updateTime; - - public ConfigSectionCast(@NotNull String configSection, @NotNull Function valueCast) { - this(configSection, valueCast, null); - } - - public ConfigSectionCast(@NotNull String configSection, - @NotNull Function valueCast, - @Nullable V defaultValue) { - this(null, configSection, valueCast, defaultValue); - } - - public ConfigSectionCast(@Nullable FileConfig source, @NotNull String configSection, - @NotNull Function valueCast, - @Nullable V defaultValue) { - this.source = source; - this.configSection = configSection; - this.valueCast = valueCast; - this.defaultValue = defaultValue; - } - - - public @Nullable V get() { - FileConfig source = getSource(); - if (source == null) return defaultValue; - - if (valueCache != null && !source.isExpired(this.updateTime)) return valueCache; - if (!source.getConfig().contains(this.configSection)) return defaultValue; - try { - V finalValue = this.valueCast.apply(source.getConfig().getConfigurationSection(this.configSection)); - if (finalValue != null) { - this.valueCache = finalValue; - this.updateTime = System.currentTimeMillis(); - return finalValue; - } else { - return defaultValue; - } - } catch (Exception ignore) { - return defaultValue; - } - } - - public void set(ConfigurationSection section) { - - } - - public void save() { - if (getSource() != null) getSource().save(); - } - - public @Nullable FileConfig getSource() { - return source == null ? FileConfig.getPluginConfiguration() : source; - } - -} diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSound.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSound.java index 78c2aff..8ad6841 100644 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSound.java +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigSound.java @@ -1,5 +1,6 @@ package cc.carm.lib.easyplugin.configuration.impl; +import cc.carm.lib.easyplugin.configuration.cast.ConfigStringCast; import cc.carm.lib.easyplugin.configuration.file.FileConfig; import org.bukkit.Bukkit; import org.bukkit.Sound; @@ -7,6 +8,8 @@ import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.function.Function; + public class ConfigSound extends ConfigStringCast { public ConfigSound(@NotNull String configSection) { @@ -18,30 +21,9 @@ public class ConfigSound extends ConfigStringCast { this(null, configSection, defaultValue); } - public ConfigSound(@Nullable FileConfig source, @NotNull String configSection, @Nullable Sound defaultValue) { - super(source, configSection, string -> { - Sound finalSound = defaultValue; - float volume = 1; - float pitch = 1; - - if (string != null) { - String[] args = string.contains(":") ? string.split(":") : new String[]{string}; - try { - if (args.length >= 1) finalSound = Sound.valueOf(args[0]); - if (args.length >= 2) volume = Float.parseFloat(args[1]); - if (args.length >= 3) pitch = Float.parseFloat(args[2]); - } catch (Exception exception) { - Bukkit.getLogger().severe("声音 " + configSection + " 配置错误,不存在 " + string + " ,请检查。"); - Bukkit.getLogger().severe("In " + configSection + " (" + string + ") doesn't match any sound name."); - } - } - - if (finalSound != null) { - return new SoundData(finalSound, volume, pitch); - } else { - return null; - } - }, defaultValue == null ? null : new SoundData(defaultValue)); + public ConfigSound(@Nullable FileConfig source, @NotNull String configSection, + @Nullable Sound defaultValue) { + super(source, configSection, getSoundParser(), defaultValue == null ? null : new SoundData(defaultValue)); } public void set(@Nullable SoundData value) { @@ -73,12 +55,38 @@ public class ConfigSound extends ConfigStringCast { if (data != null) data.play(player); } - public void save() { - if (getSource() != null) getSource().save(); + public void playToAll() { + SoundData data = get(); + if (data != null) { + Bukkit.getOnlinePlayers().forEach(data::play); + } } - public @Nullable FileConfig getSource() { - return source == null ? FileConfig.getPluginConfiguration() : source; + public static @NotNull Function<@Nullable String, @Nullable SoundData> getSoundParser() { + return string -> { + if (string == null) return null; + + Sound finalSound = null; + float volume = 1; + float pitch = 1; + + String[] args = string.contains(":") ? string.split(":") : new String[]{string}; + try { + if (args.length >= 1) finalSound = Sound.valueOf(args[0]); + if (args.length >= 2) volume = Float.parseFloat(args[1]); + if (args.length >= 3) pitch = Float.parseFloat(args[2]); + } catch (Exception exception) { + Bukkit.getLogger().severe("声音 " + string + " 配置错误,不存在同名声音,请检查。"); + Bukkit.getLogger().severe("Sound " + string + " doesn't match any sound name."); + } + + + if (finalSound != null) { + return new SoundData(finalSound, volume, pitch); + } else { + return null; + } + }; } public static class SoundData { diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigStringCast.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigStringCast.java deleted file mode 100644 index 4bdd215..0000000 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/impl/ConfigStringCast.java +++ /dev/null @@ -1,76 +0,0 @@ -package cc.carm.lib.easyplugin.configuration.impl; - -import cc.carm.lib.easyplugin.configuration.file.FileConfig; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Function; - -public class ConfigStringCast { - - @Nullable FileConfig source; - - @NotNull String configSection; - @NotNull Function valueCast; - - @Nullable V defaultValue; - - V valueCache; - long updateTime; - - public ConfigStringCast(@NotNull String configSection, @NotNull Function valueCast) { - this(configSection, valueCast, null); - } - - public ConfigStringCast(@NotNull String configSection, @NotNull Function valueCast, @Nullable V defaultValue) { - this(null, configSection, valueCast, defaultValue); - } - - public ConfigStringCast(@Nullable FileConfig source, @NotNull String configSection, - @NotNull Function valueCast, @Nullable V defaultValue) { - this.source = source; - this.configSection = configSection; - this.valueCast = valueCast; - this.defaultValue = defaultValue; - } - - public @Nullable V get() { - FileConfig source = getSource(); - if (source == null) return defaultValue; - - if (valueCache != null && !source.isExpired(this.updateTime)) return valueCache; - if (!source.getConfig().contains(this.configSection)) return defaultValue; - try { - V finalValue = this.valueCast.apply(source.getConfig().getString(this.configSection)); - if (finalValue != null) { - this.valueCache = finalValue; - this.updateTime = System.currentTimeMillis(); - return finalValue; - } else { - return defaultValue; - } - } catch (Exception ignore) { - return defaultValue; - } - } - - public void set(@Nullable String value) { - FileConfig source = getSource(); - if (source != null) { - source.getConfig().set(this.configSection, value); - source.save(); - } - } - - public void save() { - if (getSource() != null) { - getSource().save(); - } - } - - public @Nullable FileConfig getSource() { - return source == null ? FileConfig.getPluginConfiguration() : source; - } - - -} diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessage.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessage.java index 8ae88ec..95e0aac 100644 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessage.java +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessage.java @@ -4,47 +4,50 @@ package cc.carm.lib.easyplugin.configuration.message; import cc.carm.lib.easyplugin.configuration.file.FileConfig; import cc.carm.lib.easyplugin.configuration.values.ConfigValue; import cc.carm.lib.easyplugin.utils.MessageUtils; +import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collections; -import java.util.List; public class ConfigMessage extends ConfigValue { String[] messageParams; - public ConfigMessage(@NotNull String configSection) { - this(configSection, null); + public ConfigMessage(@NotNull String sectionName) { + this(sectionName, null); } - public ConfigMessage(@NotNull String configSection, @Nullable String defaultValue) { - this(configSection, defaultValue, null); + public ConfigMessage(@NotNull String sectionName, @Nullable String defaultValue) { + this(sectionName, defaultValue, null); } - public ConfigMessage(@NotNull String configSection, @Nullable String defaultValue, String[] messageParams) { - super(null, configSection, String.class, defaultValue); + public ConfigMessage(@NotNull String sectionName, @Nullable String defaultValue, String[] messageParams) { + super(null, sectionName, String.class, defaultValue); this.messageParams = messageParams; } - public ConfigMessage(@Nullable FileConfig config, @NotNull String configSection, + public ConfigMessage(@Nullable FileConfig source, @NotNull String sectionName, @Nullable String defaultValue, String[] messageParams) { - super(config, configSection, String.class, defaultValue); + super(source, sectionName, String.class, defaultValue); this.messageParams = messageParams; } + public @NotNull String get(CommandSender sender) { + return MessageUtils.setPlaceholders(sender, get()); + } + public @NotNull String get(CommandSender sender, Object[] values) { if (messageParams != null) { return get(sender, messageParams, values); } else { - return get(sender, new String[0], new Object[0]); + return get(sender); } } public @NotNull String get(CommandSender sender, String[] params, Object[] values) { - List messages = MessageUtils.setPlaceholders(sender, Collections.singletonList(get()), params, values); - return messages != null && !messages.isEmpty() ? messages.get(0) : ""; + return MessageUtils.setPlaceholders(sender, get(), params, values); } public void send(CommandSender sender) { @@ -64,6 +67,23 @@ public class ConfigMessage extends ConfigValue { MessageUtils.sendWithPlaceholders(sender, Collections.singletonList(get()), params, values); } + public void sendToAll() { + Bukkit.getOnlinePlayers().forEach(player -> MessageUtils.sendWithPlaceholders(player, Collections.singletonList(get()))); + } + + public void sendToAll(Object[] values) { + if (messageParams != null) { + sendToAll(messageParams, values); + } else { + sendToAll(); + } + } + + public void sendToAll(String[] params, Object[] values) { + Bukkit.getOnlinePlayers().forEach(pl -> MessageUtils.sendWithPlaceholders(pl, Collections.singletonList(get()), params, values)); + } + + @Override public @Nullable FileConfig getSource() { return source == null ? FileConfig.getMessageConfiguration() : source; } diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessageList.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessageList.java index 6f6b545..2b3ced5 100644 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessageList.java +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/message/ConfigMessageList.java @@ -4,6 +4,7 @@ package cc.carm.lib.easyplugin.configuration.message; import cc.carm.lib.easyplugin.configuration.file.FileConfig; import cc.carm.lib.easyplugin.configuration.values.ConfigValueList; import cc.carm.lib.easyplugin.utils.MessageUtils; +import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -14,22 +15,22 @@ public class ConfigMessageList extends ConfigValueList { @Nullable String[] messageParams; - public ConfigMessageList(String configSection) { - this(configSection, new String[0]); + public ConfigMessageList(String sectionName) { + this(sectionName, new String[0]); } - public ConfigMessageList(@NotNull String configSection, @Nullable String[] defaultValue) { - this(configSection, defaultValue, null); + public ConfigMessageList(@NotNull String sectionName, @Nullable String[] defaultValue) { + this(sectionName, defaultValue, null); } - public ConfigMessageList(@NotNull String configSection, @Nullable String[] defaultValue, String[] messageParams) { - super(null, configSection, String.class, defaultValue); + public ConfigMessageList(@NotNull String sectionName, @Nullable String[] defaultValue, String[] messageParams) { + super(null, sectionName, String.class, defaultValue); this.messageParams = messageParams; } - public ConfigMessageList(@Nullable FileConfig config, @NotNull String configSection, + public ConfigMessageList(@Nullable FileConfig source, @NotNull String sectionName, @Nullable String[] defaultValue, String[] messageParams) { - super(config, configSection, String.class, defaultValue); + super(source, sectionName, String.class, defaultValue); this.messageParams = messageParams; } @@ -45,7 +46,6 @@ public class ConfigMessageList extends ConfigValueList { } } - public @NotNull List get(@Nullable CommandSender sender, String[] params, Object[] values) { return MessageUtils.setPlaceholders(sender, get(), params, values); } @@ -62,6 +62,22 @@ public class ConfigMessageList extends ConfigValueList { } } + public void sendToAll(String[] params, Object[] values) { + Bukkit.getOnlinePlayers().forEach(pl -> MessageUtils.sendWithPlaceholders(pl, get(), params, values)); + } + + public void sendToAll() { + Bukkit.getOnlinePlayers().forEach(player -> MessageUtils.sendWithPlaceholders(player, get())); + } + + public void sendToAll(Object[] values) { + if (messageParams != null) { + sendToAll(messageParams, values); + } else { + sendToAll(); + } + } + public void send(@Nullable CommandSender sender, String[] params, Object[] values) { MessageUtils.sendWithPlaceholders(sender, get(), params, values); } @@ -70,4 +86,5 @@ public class ConfigMessageList extends ConfigValueList { public @Nullable FileConfig getSource() { return source == null ? FileConfig.getMessageConfiguration() : source; } + } diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java index 9a467e0..948e704 100644 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValue.java @@ -1,64 +1,54 @@ package cc.carm.lib.easyplugin.configuration.values; import cc.carm.lib.easyplugin.configuration.file.FileConfig; +import cc.carm.lib.easyplugin.configuration.file.FileConfigValue; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class ConfigValue { +import java.util.Optional; - protected @Nullable FileConfig source; - - private final @NotNull String configSection; +public class ConfigValue extends FileConfigValue { private final @NotNull Class clazz; @Nullable V defaultValue; - public ConfigValue(@NotNull String configSection, @NotNull Class clazz) { - this(configSection, clazz, null); + public ConfigValue(@NotNull String sectionName, + @NotNull Class clazz) { + this(sectionName, clazz, null); } - public ConfigValue(@NotNull String configSection, @NotNull Class clazz, @Nullable V defaultValue) { - this(null, configSection, clazz, defaultValue); + public ConfigValue(@NotNull String sectionName, + @NotNull Class clazz, + @Nullable V defaultValue) { + this(null, sectionName, clazz, defaultValue); } - public ConfigValue(@Nullable FileConfig source, @NotNull String configSection, - @NotNull Class clazz, @Nullable V defaultValue) { - this.source = source; - this.configSection = configSection; + public ConfigValue(@Nullable FileConfig source, @NotNull String sectionName, + @NotNull Class clazz, + @Nullable V defaultValue) { + super(source, sectionName); this.clazz = clazz; this.defaultValue = defaultValue; } public V get() { - FileConfig source = getSource(); - if (source == null) return this.defaultValue; + return getConfigOptional() + .map(config -> castValue(config.get(getSectionName()), clazz, this.defaultValue)) + .orElse(setDefault()); // 如果没有默认值,就把配置写进去,便于配置 + } - if (source.getConfig().contains(this.configSection)) { - Object val = source.getConfig().get(this.configSection, this.defaultValue); - return this.clazz.isInstance(val) ? this.clazz.cast(val) : this.defaultValue; - } else { - // 如果没有默认值,就把配置写进去,便于配置 - return setDefault(); - } + public @NotNull Optional getOptional() { + return Optional.ofNullable(get()); } public void set(@Nullable V value) { - FileConfig source = getSource(); - if (source == null) return; - - source.getConfig().set(this.configSection, value); - source.save(); - } - - public void save() { - if (getSource() != null) getSource().save(); + getSourceOptional().ifPresent(source -> { + source.getConfig().set(getSectionName(), value); + source.save(); + }); } public V setDefault() { - set(this.defaultValue); + if (this.defaultValue != null) set(this.defaultValue); return this.defaultValue; } - - public @Nullable FileConfig getSource() { - return source == null ? FileConfig.getPluginConfiguration() : source; - } } diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java index ce24309..32ffcfa 100644 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueList.java @@ -2,78 +2,66 @@ package cc.carm.lib.easyplugin.configuration.values; import cc.carm.lib.easyplugin.configuration.file.FileConfig; +import cc.carm.lib.easyplugin.configuration.file.FileConfigValue; 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.Objects; +import java.util.stream.Collectors; -public class ConfigValueList { +public class ConfigValueList extends FileConfigValue { - protected @Nullable FileConfig source; - - private final @NotNull String configSection; private final @NotNull Class clazz; @Nullable V[] defaultValue; - public ConfigValueList(@NotNull String configSection, @NotNull Class clazz) { - this(configSection, clazz, null); + public ConfigValueList(@NotNull String sectionName, + @NotNull Class clazz) { + this(sectionName, clazz, null); } - public ConfigValueList(@NotNull String configSection, @NotNull Class clazz, @Nullable V[] defaultValue) { - this(null, configSection, clazz, defaultValue); + public ConfigValueList(@NotNull String sectionName, + @NotNull Class clazz, + @Nullable V[] defaultValue) { + this(null, sectionName, clazz, defaultValue); } - public ConfigValueList(@Nullable FileConfig configuration, @NotNull String configSection, Class clazz) { - this(configuration, configSection, clazz, null); + public ConfigValueList(@Nullable FileConfig configuration, @NotNull String sectionName, + Class clazz) { + this(configuration, sectionName, clazz, null); } - public ConfigValueList(@Nullable FileConfig configuration, @NotNull String configSection, - @NotNull Class clazz, @Nullable V[] defaultValue) { - this.source = configuration; - this.configSection = configSection; + public ConfigValueList(@Nullable FileConfig configuration, @NotNull String sectionName, + @NotNull Class clazz, + @Nullable V[] defaultValue) { + super(configuration, sectionName); this.clazz = clazz; this.defaultValue = defaultValue; } public @NotNull ArrayList get() { - FileConfig source = getSource(); - if (source == null) return new ArrayList<>(); + return getConfigOptional() + .map(configuration -> configuration.getList(getSectionName())) + .map(list -> list.stream() + .map(o -> castValue(o, this.clazz)) + .filter(Objects::nonNull) + .collect(Collectors.toCollection(ArrayList::new))) + .orElse(getDefaultList()); + } - List list = source.getConfig().getList(this.configSection); - if (list == null) { - if (defaultValue != null) { - return new ArrayList<>(Arrays.asList(defaultValue)); - } else { - return new ArrayList<>(); - } - } else { - ArrayList result = new ArrayList<>(); + public @NotNull ArrayList getDefaultList() { + return defaultValue == null ? new ArrayList<>() : new ArrayList<>(Arrays.asList(defaultValue)); - for (Object object : list) { - if (this.clazz.isInstance(object)) { - result.add(this.clazz.cast(object)); - } - } - return result; - } } public void set(@Nullable ArrayList value) { - FileConfig source = getSource(); - if (source == null) return; - source.getConfig().set(this.configSection, value); - this.save(); + getSourceOptional().ifPresent(source -> { + source.getConfig().set(getSectionName(), value); + source.save(); + }); } - public void save() { - if (getSource() != null) getSource().save(); - } - - public @Nullable FileConfig getSource() { - return this.source == null ? FileConfig.getPluginConfiguration() : this.source; - } } diff --git a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java index cbebc24..9087c6d 100644 --- a/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java +++ b/easyplugin-configuration/src/main/java/cc/carm/lib/easyplugin/configuration/values/ConfigValueMap.java @@ -1,88 +1,59 @@ package cc.carm.lib.easyplugin.configuration.values; import cc.carm.lib.easyplugin.configuration.file.FileConfig; -import org.bukkit.configuration.ConfigurationSection; +import cc.carm.lib.easyplugin.configuration.file.FileConfigCachedValue; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; -import java.util.Set; import java.util.function.Function; -public class ConfigValueMap { - - @Nullable FileConfig source; - - @NotNull String configSection; +public class ConfigValueMap extends FileConfigCachedValue> { @NotNull Function keyCast; @NotNull Class valueClazz; - @Nullable LinkedHashMap valueCache; - - long updateTime; - - public ConfigValueMap(@NotNull String configSection, @NotNull Function keyCast, + public ConfigValueMap(@NotNull String sectionName, @NotNull Function keyCast, @NotNull Class valueClazz) { - this(null, configSection, keyCast, valueClazz); + this(null, sectionName, keyCast, valueClazz); } - public ConfigValueMap(@Nullable FileConfig configuration, @NotNull String configSection, + public ConfigValueMap(@Nullable FileConfig source, @NotNull String sectionName, @NotNull Function keyCast, @NotNull Class valueClazz) { - this.source = configuration; - this.configSection = configSection; + super(source, sectionName); this.keyCast = keyCast; this.valueClazz = valueClazz; } - public void clearCache() { - this.valueCache = null; - } @NotNull public Map get() { - FileConfig source = getSource(); - if (source == null) return new HashMap<>(); - - if (valueCache != null && !getSource().isExpired(this.updateTime)) return valueCache; - - ConfigurationSection section = source.getConfig().getConfigurationSection(this.configSection); - if (section == null) return new LinkedHashMap<>(); - - Set keys = section.getKeys(false); - if (keys.isEmpty()) return new LinkedHashMap<>(); - - else { - LinkedHashMap result = new LinkedHashMap<>(); - for (String key : keys) { - K finalKey = keyCast.apply(key); - Object val = section.get(key); - V finalValue = this.valueClazz.isInstance(val) ? this.valueClazz.cast(val) : null; - if (finalKey != null && finalValue != null) { - result.put(finalKey, finalValue); - } - } - this.updateTime = System.currentTimeMillis(); - this.valueCache = result; - return result; + Map cached = getCachedValue(); + if (cached != null && !isExpired()) { + return cached; + } else { + return getConfigOptional() + .map(config -> config.getConfigurationSection(getSectionName())) + .map(section -> { + Map result = new LinkedHashMap<>(); + for (String key : section.getKeys(false)) { + K finalKey = keyCast.apply(key); + V finalValue = castValue(section.get(key), valueClazz); + if (finalKey != null && finalValue != null) { + result.put(finalKey, finalValue); + } + } + return updateCache(result); + }).orElse(new LinkedHashMap<>()); } } - public void set(@Nullable HashMap valuesMap) { - FileConfig source = getSource(); - if (source == null) return; - source.getConfig().createSection(this.configSection, valuesMap); - source.save(); - } - - public void save() { - if (getSource() != null) getSource().save(); - } - - public @Nullable FileConfig getSource() { - return source == null ? FileConfig.getPluginConfiguration() : source; + public void set(@Nullable Map valuesMap) { + getSourceOptional().ifPresent(source -> { + source.getConfig().createSection(getSectionName(), valuesMap); + source.save(); + }); } } diff --git a/easyplugin-database/pom.xml b/easyplugin-database/pom.xml index 71cd3e7..8c26e1c 100644 --- a/easyplugin-database/pom.xml +++ b/easyplugin-database/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-gui/pom.xml b/easyplugin-gui/pom.xml index ab10ea7..ccab500 100644 --- a/easyplugin-gui/pom.xml +++ b/easyplugin-gui/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-lp/pom.xml b/easyplugin-lp/pom.xml index 31d6db5..5f40d65 100644 --- a/easyplugin-lp/pom.xml +++ b/easyplugin-lp/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-main/pom.xml b/easyplugin-main/pom.xml index 26ad113..322c8d4 100644 --- a/easyplugin-main/pom.xml +++ b/easyplugin-main/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/EasyPlugin.java b/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/EasyPlugin.java index 8122f2f..ddbd286 100644 --- a/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/EasyPlugin.java +++ b/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/EasyPlugin.java @@ -71,12 +71,12 @@ public abstract class EasyPlugin extends JavaPlugin { log(messageProvider.disabled(this, startTime)); } - public void load() { + protected void load() { } - public abstract boolean initialize(); + protected abstract boolean initialize(); - public void shutdown() { + protected void shutdown() { } /** diff --git a/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/utils/MessageUtils.java b/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/utils/MessageUtils.java index 11f8dfe..519cece 100644 --- a/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/utils/MessageUtils.java +++ b/easyplugin-main/src/main/java/cc/carm/lib/easyplugin/utils/MessageUtils.java @@ -6,7 +6,11 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; public class MessageUtils { @@ -42,6 +46,15 @@ public class MessageUtils { sendWithPlaceholders(sender, setCustomParams(messages, params, values)); } + public static String setPlaceholders(@Nullable CommandSender sender, String message) { + if (message == null || sender == null) return message; + if (hasPlaceholderAPI() && sender instanceof Player) { + return PlaceholderAPI.setPlaceholders((Player) sender, message); + } else { + return message; + } + } + public static List setPlaceholders(@Nullable CommandSender sender, List messages) { if (messages == null || messages.isEmpty() || sender == null) return messages; if (hasPlaceholderAPI() && sender instanceof Player) { @@ -51,10 +64,36 @@ public class MessageUtils { } } + public static String setPlaceholders(@Nullable CommandSender sender, String message, String[] params, Object[] values) { + return setPlaceholders(sender, setCustomParams(message, params, values)); + } + public static List setPlaceholders(@Nullable CommandSender sender, List messages, String[] params, Object[] values) { return setPlaceholders(sender, setCustomParams(messages, params, values)); } + public static String setCustomParams(String message, String param, Object value) { + return setCustomParams(message, new String[]{param}, new Object[]{value}); + } + + public static String setCustomParams(String message, String[] params, Object[] values) { + if (params.length != values.length) return message; + HashMap paramsMap = new HashMap<>(); + for (int i = 0; i < params.length; i++) { + paramsMap.put(params[i], values[i]); + } + return setCustomParams(message, paramsMap); + } + + + public static String setCustomParams(String message, HashMap params) { + String afterMessage = message; + for (Map.Entry entry : params.entrySet()) { + afterMessage = afterMessage.replace(entry.getKey(), entry.getValue().toString()); + } + return afterMessage; + } + public static List setCustomParams(List messages, String param, Object value) { return setCustomParams(messages, new String[]{param}, new Object[]{value}); } @@ -70,15 +109,7 @@ public class MessageUtils { public static List setCustomParams(List messages, HashMap params) { - List list = new ArrayList<>(); - for (String message : messages) { - String afterMessage = message; - for (Map.Entry entry : params.entrySet()) { - afterMessage = afterMessage.replace(entry.getKey(), entry.getValue().toString()); - } - list.add(afterMessage); - } - return list; + return messages.stream().map(message -> setCustomParams(message, params)).collect(Collectors.toList()); } diff --git a/easyplugin-placeholderapi/pom.xml b/easyplugin-placeholderapi/pom.xml index 53a756e..b0ecb4b 100644 --- a/easyplugin-placeholderapi/pom.xml +++ b/easyplugin-placeholderapi/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/easyplugin-vault/pom.xml b/easyplugin-vault/pom.xml index b011ffa..51fe121 100644 --- a/easyplugin-vault/pom.xml +++ b/easyplugin-vault/pom.xml @@ -5,7 +5,7 @@ easyplugin-parent cc.carm.lib - 1.1.1 + 1.1.2 4.0.0 diff --git a/pom.xml b/pom.xml index 3682525..93c2440 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ cc.carm.lib easyplugin-parent pom - 1.1.1 + 1.1.2 easyplugin-main