-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCodecEntityDataSerializer.java
33 lines (26 loc) · 1.11 KB
/
CodecEntityDataSerializer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.github.minecraftschurlimods.codeclib;
import com.mojang.serialization.Codec;
import net.minecraft.nbt.NbtOps;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.syncher.EntityDataSerializer;
import java.util.function.Consumer;
/**
* Convenience wrapper for serializing entity data with a codec.
*/
public record CodecEntityDataSerializer<T>(Codec<T> codec, Consumer<String> errorConsumer) implements EntityDataSerializer<T> {
public CodecEntityDataSerializer(Codec<T> codec) {
this(codec, s -> {});
}
@Override
public void write(final FriendlyByteBuf buffer, final T value) {
buffer.writeNbt(codec.encodeStart(NbtOps.INSTANCE, value).getOrThrow(false, errorConsumer));
}
@Override
public T read(final FriendlyByteBuf buffer) {
return codec.decode(NbtOps.INSTANCE, buffer.readNbt()).getOrThrow(false, errorConsumer).getFirst();
}
@Override
public T copy(final T value) {
return codec.encodeStart(NbtOps.INSTANCE, value).flatMap(tag -> codec.decode(NbtOps.INSTANCE, tag)).getOrThrow(false, errorConsumer).getFirst();
}
}