Skip to content

Commit

Permalink
Add support for serializing and deserializing Duration
Browse files Browse the repository at this point in the history
Added a new DurationAdapter to handle Java's Duration type. This includes registering the adapter in the Serializer and implementing serialization to and deserialization from LongTags. This ensures seamless handling of Duration objects in the NBT system.
  • Loading branch information
NonSwag committed Feb 1, 2025
1 parent d1dca8a commit 6428cff
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
3 changes: 3 additions & 0 deletions nbt/src/main/java/core/nbt/serialization/Serializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Duration> {
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());
}
}

0 comments on commit 6428cff

Please sign in to comment.