Unicopia/src/main/java/com/minelittlepony/unicopia/util/NbtSerialisable.java

53 lines
1.6 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia.util;
2020-01-16 12:35:46 +01:00
import java.util.Optional;
2021-08-04 15:38:03 +02:00
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtDouble;
import net.minecraft.nbt.NbtHelper;
2021-08-04 15:38:03 +02:00
import net.minecraft.nbt.NbtList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
2020-01-16 12:35:46 +01:00
2020-04-15 18:12:00 +02:00
public interface NbtSerialisable {
2020-01-16 12:35:46 +01:00
/**
* Called to save this to nbt to persist state on file or to transmit over the network
*
* @param compound Compound tag to write to.
*/
void toNBT(NbtCompound compound);
2020-01-16 12:35:46 +01:00
/**
* Called to load this state from nbt
*
* @param compound Compound tag to read from.
*/
void fromNBT(NbtCompound compound);
2020-01-16 12:35:46 +01:00
2021-08-04 15:38:03 +02:00
default NbtCompound toNBT() {
NbtCompound compound = new NbtCompound();
2020-01-16 12:35:46 +01:00
toNBT(compound);
return compound;
}
2021-08-04 15:38:03 +02:00
static NbtList writeVector(Vec3d vector) {
NbtList list = new NbtList();
list.add(NbtDouble.of(vector.getX()));
list.add(NbtDouble.of(vector.getY()));
list.add(NbtDouble.of(vector.getZ()));
return list;
2020-01-16 12:35:46 +01:00
}
2021-08-04 15:38:03 +02:00
static Vec3d readVector(NbtList list) {
return new Vec3d(list.getDouble(0), list.getDouble(1), list.getDouble(2));
2020-01-16 12:35:46 +01:00
}
static void writeBlockPos(String name, Optional<BlockPos> pos, NbtCompound nbt) {
pos.map(NbtHelper::fromBlockPos).ifPresent(p -> nbt.put("hoveringPosition", p));
}
static Optional<BlockPos> readBlockPos(String name, NbtCompound nbt) {
return nbt.contains(name) ? Optional.ofNullable(NbtHelper.toBlockPos(nbt.getCompound(name))) : Optional.empty();
}
2020-01-16 12:35:46 +01:00
}