diff --git a/nbt/src/main/java/core/nbt/serialization/Serializer.java b/nbt/src/main/java/core/nbt/serialization/Serializer.java index a9fa0d3..db387be 100644 --- a/nbt/src/main/java/core/nbt/serialization/Serializer.java +++ b/nbt/src/main/java/core/nbt/serialization/Serializer.java @@ -4,6 +4,7 @@ import core.nbt.serialization.adapter.BooleanAdapter; import core.nbt.serialization.adapter.ByteAdapter; import core.nbt.serialization.adapter.DoubleAdapter; +import core.nbt.serialization.adapter.DurationAdapter; import core.nbt.serialization.adapter.FileAdapter; import core.nbt.serialization.adapter.FloatAdapter; import core.nbt.serialization.adapter.IntegerAdapter; @@ -17,6 +18,7 @@ import java.io.File; import java.lang.reflect.Type; import java.net.InetSocketAddress; +import java.time.Duration; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -33,6 +35,7 @@ public Serializer() { registerTypeAdapter(Boolean.class, BooleanAdapter.INSTANCE); registerTypeAdapter(Byte.class, ByteAdapter.INSTANCE); registerTypeAdapter(Double.class, DoubleAdapter.INSTANCE); + registerTypeAdapter(Duration.class, DurationAdapter.INSTANCE); registerTypeAdapter(File.class, FileAdapter.INSTANCE); registerTypeAdapter(Float.class, FloatAdapter.INSTANCE); registerTypeAdapter(InetSocketAddress.class, AddressAdapter.INSTANCE); diff --git a/nbt/src/main/java/core/nbt/serialization/adapter/DurationAdapter.java b/nbt/src/main/java/core/nbt/serialization/adapter/DurationAdapter.java new file mode 100644 index 0000000..9307956 --- /dev/null +++ b/nbt/src/main/java/core/nbt/serialization/adapter/DurationAdapter.java @@ -0,0 +1,27 @@ + +package core.nbt.serialization.adapter; + +import core.nbt.serialization.ParserException; +import core.nbt.serialization.TagAdapter; +import core.nbt.serialization.TagDeserializationContext; +import core.nbt.serialization.TagSerializationContext; +import core.nbt.tag.LongTag; +import core.nbt.tag.Tag; +import org.jspecify.annotations.NullMarked; + +import java.time.Duration; + +@NullMarked +public class DurationAdapter implements TagAdapter { + public static final DurationAdapter INSTANCE = new DurationAdapter(); + + @Override + public Duration deserialize(Tag tag, TagDeserializationContext context) throws ParserException { + return Duration.ofMillis(tag.getAsLong()); + } + + @Override + public Tag serialize(Duration duration, TagSerializationContext context) throws ParserException { + return new LongTag(duration.toMillis()); + } +}