Bug fixes

- Fixed synced storage no longer syncing after world reload
- Fixed trains disappearing on assembly
This commit is contained in:
simibubi 2025-01-25 17:53:33 +01:00
parent 80850134ad
commit 18e6d90a37
3 changed files with 29 additions and 16 deletions

View file

@ -825,7 +825,7 @@ public abstract class Contraption {
} }
} }
(spawnPacket ? getStorageForSpawnPacket() : storage).write(nbt, spawnPacket); writeStorage(nbt, spawnPacket);
ListTag interactorNBT = new ListTag(); ListTag interactorNBT = new ListTag();
for (BlockPos pos : interactors.keySet()) { for (BlockPos pos : interactors.keySet()) {
@ -868,8 +868,8 @@ public abstract class Contraption {
return nbt; return nbt;
} }
protected MountedStorageManager getStorageForSpawnPacket() { public void writeStorage(CompoundTag nbt, boolean spawnPacket) {
return storage; storage.write(nbt, spawnPacket);
} }
private CompoundTag writeBlocksCompound() { private CompoundTag writeBlocksCompound() {
@ -1470,7 +1470,7 @@ public abstract class Contraption {
} }
public void tickStorage(AbstractContraptionEntity entity) { public void tickStorage(AbstractContraptionEntity entity) {
this.storage.tick(entity); getStorage().tick(entity);
} }
public boolean containsBlockBreakers() { public boolean containsBlockBreakers() {

View file

@ -255,7 +255,11 @@ public class MountedStorageManager {
MountedItemStorage.CODEC.decode(NbtOps.INSTANCE, data) MountedItemStorage.CODEC.decode(NbtOps.INSTANCE, data)
.result() .result()
.map(Pair::getFirst) .map(Pair::getFirst)
.ifPresent(storage -> this.itemsBuilder.put(pos, storage)); .ifPresent(storage -> {
this.itemsBuilder.put(pos, storage);
if (storage instanceof SyncedMountedStorage sms)
this.syncedItemsBuilder.put(pos, sms);
});
}); });
NBTHelper.iterateCompoundList(nbt.getList("fluids", Tag.TAG_COMPOUND), tag -> { NBTHelper.iterateCompoundList(nbt.getList("fluids", Tag.TAG_COMPOUND), tag -> {
@ -264,7 +268,11 @@ public class MountedStorageManager {
MountedFluidStorage.CODEC.decode(NbtOps.INSTANCE, data) MountedFluidStorage.CODEC.decode(NbtOps.INSTANCE, data)
.result() .result()
.map(Pair::getFirst) .map(Pair::getFirst)
.ifPresent(storage -> this.fluidsBuilder.put(pos, storage)); .ifPresent(storage -> {
this.fluidsBuilder.put(pos, storage);
if (storage instanceof SyncedMountedStorage sms)
this.syncedFluidsBuilder.put(pos, sms);
});
}); });
this.readLegacy(nbt); this.readLegacy(nbt);
@ -411,7 +419,7 @@ public class MountedStorageManager {
if (info == null) if (info == null)
return false; return false;
MountedStorageManager storageManager = contraption.getStorageForSpawnPacket(); MountedStorageManager storageManager = contraption.getStorage();
MountedItemStorage storage = storageManager.getAllItemStorages().get(localPos); MountedItemStorage storage = storageManager.getAllItemStorages().get(localPos);
if (storage != null) { if (storage != null) {

View file

@ -121,7 +121,8 @@ public class CarriageContraption extends Contraption {
StructureBlockInfo info = blocks.get(controlsPos); StructureBlockInfo info = blocks.get(controlsPos);
if (!AllBlocks.TRAIN_CONTROLS.has(info.state())) if (!AllBlocks.TRAIN_CONTROLS.has(info.state()))
return false; return false;
return info.state().getValue(ControlsBlock.FACING) == direction.getOpposite(); return info.state()
.getValue(ControlsBlock.FACING) == direction.getOpposite();
} }
public void swapStorageAfterAssembly(CarriageContraptionEntity cce) { public void swapStorageAfterAssembly(CarriageContraptionEntity cce) {
@ -226,11 +227,6 @@ public class CarriageContraption extends Contraption {
return false; return false;
} }
@Override
protected MountedStorageManager getStorageForSpawnPacket() {
return storageProxy;
}
@Override @Override
public ContraptionType getType() { public ContraptionType getType() {
return ContraptionType.CARRIAGE; return ContraptionType.CARRIAGE;
@ -322,4 +318,13 @@ public class CarriageContraption extends Contraption {
public MountedStorageManager getStorage() { public MountedStorageManager getStorage() {
return storageProxy == null ? fallbackStorage : storageProxy; return storageProxy == null ? fallbackStorage : storageProxy;
} }
@Override
public void writeStorage(CompoundTag nbt, boolean spawnPacket) {
if (!spawnPacket)
return;
if (storageProxy != null)
storageProxy.write(nbt, spawnPacket);
}
} }