Fix ReplicatorJob not serializing it's values

This commit is contained in:
DBotThePony 2022-09-03 15:58:42 +07:00
parent 86660e639e
commit 49fd0dc105
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 25 additions and 6 deletions

View File

@ -15,7 +15,7 @@ abstract class MatteryWorkerBlockEntity<JobType : MatteryWorkerBlockEntity.Job>(
type: BlockEntityType<*>, type: BlockEntityType<*>,
blockPos: BlockPos, blockPos: BlockPos,
blockState: BlockState, blockState: BlockState,
val jobDeserializer: (tag: CompoundTag) -> JobType val jobDeserializer: (tag: CompoundTag) -> JobType?
) : MatteryPoweredBlockEntity(type, blockPos, blockState) { ) : MatteryPoweredBlockEntity(type, blockPos, blockState) {
open class Job( open class Job(
open val ticks: Double, open val ticks: Double,

View File

@ -31,7 +31,13 @@ import ru.dbotthepony.mc.otm.container.set
import ru.dbotthepony.mc.otm.core.* import ru.dbotthepony.mc.otm.core.*
class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
MatteryWorkerBlockEntity<MatterReplicatorBlockEntity.ReplicatorJob>(MBlockEntities.MATTER_REPLICATOR, p_155229_, p_155230_, ::ReplicatorJob), IMatterGraphNode { MatteryWorkerBlockEntity<MatterReplicatorBlockEntity.ReplicatorJob>(MBlockEntities.MATTER_REPLICATOR, p_155229_, p_155230_, {
try {
ReplicatorJob(it)
} catch(err: NoSuchElementException) {
null
}
}), IMatterGraphNode {
class ReplicatorJob : ItemJob { class ReplicatorJob : ItemJob {
val matterPerTick: ImpreciseFraction val matterPerTick: ImpreciseFraction
@ -41,11 +47,11 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
val asDust: Boolean val asDust: Boolean
constructor(tag: CompoundTag) : super(tag) { constructor(tag: CompoundTag) : super(tag) {
matterPerTick = tag.getImpreciseFraction("matter_per_tick") matterPerTick = tag.getImpreciseFraction("matterPerTick")
matterValue = tag.getImpreciseFraction("value") matterValue = tag.getImpreciseFraction("matterValue")
pattern = tag.map("pattern", PatternState::deserializeNBT) pattern = tag.map("pattern", PatternState::deserializeNBT)
asDust = tag.getBoolean("as_dust") asDust = tag.getBoolean("asDust")
task = tag.map("task", ReplicationTask::deserializeNBT) ?: throw NullPointerException("Unable to deserialize matter task") task = tag.map("task", ReplicationTask::deserializeNBT) ?: throw NoSuchElementException("Unable to deserialize matter task")
} }
constructor( constructor(
@ -63,6 +69,19 @@ class MatterReplicatorBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) :
this.pattern = pattern this.pattern = pattern
this.asDust = asDust this.asDust = asDust
} }
override fun serializeNBT(): CompoundTag {
return super.serializeNBT().also {
it["matterPerTick"] = this.matterPerTick
it["task"] = this.task.serializeNBT()
it["matterValue"] = this.matterValue
if (this.pattern != null)
it["pattern"] = this.pattern.serializeNBT()
it["asDust"] = this.asDust
}
}
} }
override val energy = WorkerEnergyStorage(this::powerLevelUpdated, STORAGE, MAX_IO) override val energy = WorkerEnergyStorage(this::powerLevelUpdated, STORAGE, MAX_IO)