Added easier method to register enum parser and serializer
This commit is contained in:
parent
127f8f49af
commit
fc7799dbd8
5 changed files with 58 additions and 34 deletions
|
@ -52,12 +52,16 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
|||
import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.Reader;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardOpenOption;
|
||||
import java.util.ArrayList;
|
||||
|
@ -259,9 +263,11 @@ public class ZNpcsPlus extends JavaPlugin {
|
|||
manager.registerParser(Boolean.class, new BooleanParser(incorrectUsageMessage));
|
||||
manager.registerParser(NamedTextColor.class, new NamedTextColorParser(incorrectUsageMessage));
|
||||
manager.registerParser(InteractionType.class, new InteractionTypeParser(incorrectUsageMessage));
|
||||
manager.registerParser(NpcPose.class, new NpcPoseParser(incorrectUsageMessage));
|
||||
manager.registerParser(PotionColor.class, new PotionColorParser(incorrectUsageMessage));
|
||||
|
||||
registerEnumParser(manager, NpcPose.class, incorrectUsageMessage);
|
||||
registerEnumParser(manager, DyeColor.class, incorrectUsageMessage);
|
||||
|
||||
manager.registerCommand("npc", new MultiCommand(loadHelpMessage("root"))
|
||||
.addSubcommand("create", new CreateCommand(npcRegistry, typeRegistry))
|
||||
.addSubcommand("toggle", new ToggleCommand(npcRegistry))
|
||||
|
@ -292,6 +298,10 @@ public class ZNpcsPlus extends JavaPlugin {
|
|||
);
|
||||
}
|
||||
|
||||
private <T extends Enum<T>> void registerEnumParser(CommandManager manager, Class<T> clazz, Message<CommandContext> message) {
|
||||
manager.registerParser(clazz, new EnumParser<>(clazz, message));
|
||||
}
|
||||
|
||||
private Message<CommandContext> loadHelpMessage(String name) {
|
||||
Reader reader = getTextResource("help-messages/" + name + ".txt");
|
||||
if (reader == null) throw new RuntimeException(name + ".txt is missing from the help-messages folder in the ZNPCsPlus jar!");
|
||||
|
|
|
@ -10,6 +10,7 @@ import lol.pyr.znpcsplus.util.NpcPose;
|
|||
import lol.pyr.znpcsplus.util.PotionColor;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
import org.bukkit.DyeColor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
@ -28,9 +29,11 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
registerSerializer(new NamedTextColorPropertySerializer());
|
||||
registerSerializer(new SkinDescriptorSerializer(skinCache));
|
||||
registerSerializer(new ItemStackPropertySerializer());
|
||||
registerSerializer(new NpcPosePropertySerializer());
|
||||
registerSerializer(new PotionColorPropertySerializer());
|
||||
|
||||
registerEnumSerializer(NpcPose.class);
|
||||
registerEnumSerializer(DyeColor.class);
|
||||
|
||||
registerType("glow", NamedTextColor.class);
|
||||
registerType("fire", false);
|
||||
registerType("invisible", false);
|
||||
|
@ -98,7 +101,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
registerType("horse_saddle", false); // TODO
|
||||
|
||||
// LLama
|
||||
registerType("carpet_color", -1); // TODO
|
||||
registerType("carpet_color", DyeColor.class); // TODO
|
||||
registerType("llama_variant", 0); // TODO
|
||||
|
||||
// Axolotl
|
||||
|
@ -135,7 +138,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
registerType("polar_bear_standing", false); // TODO
|
||||
|
||||
// Sheep
|
||||
registerType("sheep_color", 0); // TODO: Figure this out
|
||||
registerType("sheep_color", DyeColor.WHITE); // TODO: Figure this out
|
||||
registerType("sheep_sheared", false); // TODO
|
||||
|
||||
// Strider
|
||||
|
@ -145,10 +148,10 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
// Cat
|
||||
registerType("cat_variant", null); // TODO: Custom type
|
||||
registerType("cat_laying", false); // TODO
|
||||
registerType("cat_collar_color", 14); // TODO
|
||||
registerType("cat_collar_color", DyeColor.RED); // TODO
|
||||
|
||||
// Wolf
|
||||
registerType("wolf_collar_color", 14); // TODO
|
||||
registerType("wolf_collar_color", DyeColor.RED); // TODO
|
||||
registerType("wolf_angry", false); // TODO
|
||||
|
||||
// Parrot
|
||||
|
@ -164,7 +167,7 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
// Shulker
|
||||
registerType("attach_direction", null); // TODO: make a direction enum
|
||||
registerType("shield_height", 0); // TODO: figure this out
|
||||
registerType("shulker_color", 10); // TODO
|
||||
registerType("shulker_color", DyeColor.RED); // TODO
|
||||
|
||||
// Piglin / Hoglin
|
||||
registerType("immune_to_zombification", false); // TODO
|
||||
|
@ -208,6 +211,10 @@ public class EntityPropertyRegistryImpl implements EntityPropertyRegistry {
|
|||
serializerMap.put(serializer.getTypeClass(), serializer);
|
||||
}
|
||||
|
||||
private <T extends Enum<T>> void registerEnumSerializer(Class<T> clazz) {
|
||||
serializerMap.put(clazz, new EnumPropertySerializer<>(clazz));
|
||||
}
|
||||
|
||||
private <T> void registerType(String name, Class<T> type) {
|
||||
registerType(name, null, type);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package lol.pyr.znpcsplus.entity;
|
||||
|
||||
public class EnumPropertySerializer<T extends Enum<T>> implements PropertySerializer<T> {
|
||||
|
||||
private final Class<T> enumClass;
|
||||
|
||||
public EnumPropertySerializer(Class<T> enumClass) {
|
||||
this.enumClass = enumClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String serialize(T property) {
|
||||
return property.name();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T deserialize(String property) {
|
||||
return Enum.valueOf(enumClass, property.toUpperCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<T> getTypeClass() {
|
||||
return enumClass;
|
||||
}
|
||||
}
|
|
@ -1,21 +0,0 @@
|
|||
package lol.pyr.znpcsplus.entity.serializers;
|
||||
|
||||
import lol.pyr.znpcsplus.entity.PropertySerializer;
|
||||
import lol.pyr.znpcsplus.util.NpcPose;
|
||||
|
||||
public class NpcPosePropertySerializer implements PropertySerializer<NpcPose> {
|
||||
@Override
|
||||
public String serialize(NpcPose property) {
|
||||
return property.name();
|
||||
}
|
||||
|
||||
@Override
|
||||
public NpcPose deserialize(String property) {
|
||||
return NpcPose.valueOf(property.toUpperCase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Class<NpcPose> getTypeClass() {
|
||||
return NpcPose.class;
|
||||
}
|
||||
}
|
|
@ -4,19 +4,22 @@ import lol.pyr.director.adventure.command.CommandContext;
|
|||
import lol.pyr.director.adventure.parse.ParserType;
|
||||
import lol.pyr.director.common.command.CommandExecutionException;
|
||||
import lol.pyr.director.common.message.Message;
|
||||
import lol.pyr.znpcsplus.util.NpcPose;
|
||||
|
||||
import java.util.Deque;
|
||||
|
||||
public class NpcPoseParser extends ParserType<NpcPose> {
|
||||
public NpcPoseParser(Message<CommandContext> message) {
|
||||
public class EnumParser<T extends Enum<T>> extends ParserType<T> {
|
||||
|
||||
private final Class<T> enumClass;
|
||||
|
||||
public EnumParser(Class<T> enumClass, Message<CommandContext> message) {
|
||||
super(message);
|
||||
this.enumClass = enumClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NpcPose parse(Deque<String> deque) throws CommandExecutionException {
|
||||
public T parse(Deque<String> deque) throws CommandExecutionException {
|
||||
try {
|
||||
return NpcPose.valueOf(deque.pop().toUpperCase());
|
||||
return Enum.valueOf(enumClass, deque.pop().toUpperCase());
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new CommandExecutionException();
|
||||
}
|
Loading…
Reference in a new issue