add Component serializer

This commit is contained in:
Pyrbu 2023-04-26 17:24:47 +01:00
parent 79cc7e6b7e
commit 6ed7fed465
4 changed files with 41 additions and 8 deletions

@ -36,6 +36,7 @@ dependencies {
implementation "org.bstats:bstats-bukkit:3.0.2" implementation "org.bstats:bstats-bukkit:3.0.2"
implementation "com.github.robertlit:SpigotResourcesAPI:2.0" implementation "com.github.robertlit:SpigotResourcesAPI:2.0"
implementation "net.kyori:adventure-platform-bukkit:4.3.0" implementation "net.kyori:adventure-platform-bukkit:4.3.0"
implementation "net.kyori:adventure-text-minimessage:4.13.1"
implementation "com.github.retrooper.packetevents:spigot:2.0.0-SNAPSHOT" implementation "com.github.retrooper.packetevents:spigot:2.0.0-SNAPSHOT"
implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1" implementation "space.arim.dazzleconf:dazzleconf-ext-snakeyaml:1.2.1"
} }

@ -0,0 +1,25 @@
package lol.pyr.znpcsplus.config;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import space.arim.dazzleconf.error.BadValueException;
import space.arim.dazzleconf.serialiser.Decomposer;
import space.arim.dazzleconf.serialiser.FlexibleType;
import space.arim.dazzleconf.serialiser.ValueSerialiser;
public class ComponentSerializer implements ValueSerialiser<Component> {
@Override
public Class<Component> getTargetClass() {
return Component.class;
}
@Override
public Component deserialise(FlexibleType flexibleType) throws BadValueException {
return MiniMessage.miniMessage().deserialize(flexibleType.getString());
}
@Override
public Object serialise(Component value, Decomposer decomposer) {
return MiniMessage.miniMessage().serialize(value);
}
}

@ -9,6 +9,7 @@ import space.arim.dazzleconf.ext.snakeyaml.CommentMode;
import space.arim.dazzleconf.ext.snakeyaml.SnakeYamlConfigurationFactory; import space.arim.dazzleconf.ext.snakeyaml.SnakeYamlConfigurationFactory;
import space.arim.dazzleconf.ext.snakeyaml.SnakeYamlOptions; import space.arim.dazzleconf.ext.snakeyaml.SnakeYamlOptions;
import space.arim.dazzleconf.helper.ConfigurationHelper; import space.arim.dazzleconf.helper.ConfigurationHelper;
import space.arim.dazzleconf.serialiser.ValueSerialiser;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -20,15 +21,17 @@ public class Configs {
private volatile static MessageConfig messages; private volatile static MessageConfig messages;
private static ConfigurationHelper<MessageConfig> messagesHelper; private static ConfigurationHelper<MessageConfig> messagesHelper;
private static <T> ConfigurationHelper<T> createHelper(Class<T> configClass, File file) { private static <T> ConfigurationHelper<T> createHelper(Class<T> configClass, File file, ValueSerialiser<?>... serialisers) {
SnakeYamlOptions yamlOptions = new SnakeYamlOptions.Builder().commentMode(CommentMode.fullComments()).build(); SnakeYamlOptions yamlOptions = new SnakeYamlOptions.Builder().commentMode(CommentMode.fullComments()).build();
ConfigurationFactory<T> configFactory = SnakeYamlConfigurationFactory.create(configClass, ConfigurationOptions.defaults(), yamlOptions); ConfigurationOptions.Builder optionBuilder = new ConfigurationOptions.Builder();
if (serialisers != null && serialisers.length > 0) optionBuilder.addSerialisers(serialisers);
ConfigurationFactory<T> configFactory = SnakeYamlConfigurationFactory.create(configClass, optionBuilder.build(), yamlOptions);
return new ConfigurationHelper<>(file.getParentFile().toPath(), file.getName(), configFactory); return new ConfigurationHelper<>(file.getParentFile().toPath(), file.getName(), configFactory);
} }
public static void init(File pluginFolder) { public static void init(File pluginFolder) {
configHelper = createHelper(MainConfig.class, new File(pluginFolder, "config.yaml")); configHelper = createHelper(MainConfig.class, new File(pluginFolder, "config.yaml"));
messagesHelper = createHelper(MessageConfig.class, new File(pluginFolder, "messages.yaml")); messagesHelper = createHelper(MessageConfig.class, new File(pluginFolder, "messages.yaml"), new ComponentSerializer());
load(); load();
} }

@ -1,24 +1,28 @@
package lol.pyr.znpcsplus.config; package lol.pyr.znpcsplus.config;
import space.arim.dazzleconf.annote.ConfComments;
import space.arim.dazzleconf.annote.ConfKey; import space.arim.dazzleconf.annote.ConfKey;
import static space.arim.dazzleconf.annote.ConfDefault.*; import static space.arim.dazzleconf.annote.ConfDefault.*;
// TODO: Add comments to the values using @ConfComments()
public interface MainConfig { public interface MainConfig {
@ConfKey("view-distance") @ConfKey("view-distance")
@ConfComments("How far away do you need to be from any NPC for it to disappear, measured in blocks")
@DefaultInteger(32) @DefaultInteger(32)
int viewDistance(); int viewDistance();
@ConfKey("line-spacing") @ConfKey("line-spacing")
@ConfComments("The height between hologram lines, measured in blocks")
@DefaultDouble(0.3D) @DefaultDouble(0.3D)
double lineSpacing(); double lineSpacing();
@ConfKey("debug-enabled")
@DefaultBoolean(false)
boolean debugEnabled();
@ConfKey("check-for-updates") @ConfKey("check-for-updates")
@ConfComments("Should the plugin check for available updates and notify admins about them?")
@DefaultBoolean(true) @DefaultBoolean(true)
boolean checkForUpdates(); boolean checkForUpdates();
@ConfKey("debug-enabled")
@ConfComments({"Should debug mode be enabled?", "This is used in development to test various things, you probably don't want to enable this"})
@DefaultBoolean(false)
boolean debugEnabled();
} }