Fixes #4005: Persist cell after cleanup. (#4009)

This commit is contained in:
yueh
2019-04-21 22:30:45 +02:00
committed by GitHub
parent 87643094c3
commit 41a4518c5b
2 changed files with 20 additions and 5 deletions
@@ -192,16 +192,29 @@ public abstract class AbstractCellInventory<T extends IAEStack<T>> implements IC
this.cellItems.resetStatus(); // clears totals and stuff. this.cellItems.resetStatus(); // clears totals and stuff.
final int types = (int) this.getStoredItemTypes(); final int types = (int) this.getStoredItemTypes();
boolean needsUpdate = false;
for( int slot = 0; slot < types; slot++ ) for( int slot = 0; slot < types; slot++ )
{ {
NBTTagCompound compoundTag = this.tagCompound.getCompoundTag( ITEM_SLOT_KEYS[slot] ); NBTTagCompound compoundTag = this.tagCompound.getCompoundTag( ITEM_SLOT_KEYS[slot] );
int stackSize = this.tagCompound.getInteger( ITEM_SLOT_COUNT_KEYS[slot] ); int stackSize = this.tagCompound.getInteger( ITEM_SLOT_COUNT_KEYS[slot] );
this.loadCellItem( compoundTag, stackSize ); needsUpdate |= !this.loadCellItem( compoundTag, stackSize );
}
if( needsUpdate )
{
this.saveChanges();
} }
} }
protected abstract void loadCellItem( NBTTagCompound compoundTag, int stackSize ); /**
* Load a single item.
*
* @param compoundTag
* @param stackSize
* @return true when successfully loaded
*/
protected abstract boolean loadCellItem( NBTTagCompound compoundTag, int stackSize );
@Override @Override
public IItemList<T> getAvailableItems( final IItemList<T> out ) public IItemList<T> getAvailableItems( final IItemList<T> out )
@@ -253,7 +253,7 @@ public class BasicCellInventory<T extends IAEStack<T>> extends AbstractCellInven
} }
@Override @Override
protected void loadCellItem( NBTTagCompound compoundTag, int stackSize ) protected boolean loadCellItem( NBTTagCompound compoundTag, int stackSize )
{ {
// Now load the item stack // Now load the item stack
final T t; final T t;
@@ -263,7 +263,7 @@ public class BasicCellInventory<T extends IAEStack<T>> extends AbstractCellInven
if( t == null ) if( t == null )
{ {
AELog.warn( "Removing item " + compoundTag + " from storage cell because the associated item type couldn't be found." ); AELog.warn( "Removing item " + compoundTag + " from storage cell because the associated item type couldn't be found." );
return; return false;
} }
} }
catch( Throwable ex ) catch( Throwable ex )
@@ -271,7 +271,7 @@ public class BasicCellInventory<T extends IAEStack<T>> extends AbstractCellInven
if( AEConfig.instance().isRemoveCrashingItemsOnLoad() ) if( AEConfig.instance().isRemoveCrashingItemsOnLoad() )
{ {
AELog.warn( ex, "Removing item " + compoundTag + " from storage cell because loading the ItemStack crashed." ); AELog.warn( ex, "Removing item " + compoundTag + " from storage cell because loading the ItemStack crashed." );
return; return false;
} }
throw ex; throw ex;
} }
@@ -282,5 +282,7 @@ public class BasicCellInventory<T extends IAEStack<T>> extends AbstractCellInven
{ {
this.cellItems.add( t ); this.cellItems.add( t );
} }
return true;
} }
} }