Make unload of computers only suspend devices, only unload in destroy.

Avoids persisted data getting killed when it shouldn't.
This commit is contained in:
Florian Nücke
2020-12-20 21:36:50 +01:00
parent 4ba5009aae
commit a5054736ac
2 changed files with 16 additions and 1 deletions

View File

@@ -271,6 +271,15 @@ public final class ComputerTileEntity extends AbstractTileEntity implements ITic
}
}
@Override
public void remove() {
super.remove();
// Regular dispose only suspends, but we want to do a full unload when we get
// destroyed, so stuff inside us can delete out-of-nbt persisted data.
virtualMachine.vmAdapter.unload();
}
@Override
public CompoundNBT getUpdateTag() {
final CompoundNBT result = super.getUpdateTag();
@@ -381,7 +390,9 @@ public final class ComputerTileEntity extends AbstractTileEntity implements ITic
ServerScheduler.removeOnUnload(getWorld(), onWorldUnloaded);
stopRunnerAndResetVM();
joinVirtualMachine();
virtualMachine.vmAdapter.suspend();
busController.dispose();
busElement.dispose();
}

View File

@@ -69,6 +69,10 @@ public final class VirtualMachineDeviceBusAdapter {
public void unload() {
fireLifecycleEvent(VMDeviceLifecycleEventType.UNLOAD);
suspend();
}
public void suspend() {
deviceContexts.forEach((device, context) -> {
if (context != null) {
context.invalidate();