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:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user