From 1fc1d5517ddb32a91ce5aa7ff36f002154e4dd61 Mon Sep 17 00:00:00 2001 From: yueh Date: Sun, 26 Jan 2020 13:36:06 +0100 Subject: [PATCH] Fixes #4213: Prevent NPE when inserting via conversion monitor (#4265) --- .../reporting/PartConversionMonitor.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/appeng/parts/reporting/PartConversionMonitor.java b/src/main/java/appeng/parts/reporting/PartConversionMonitor.java index 3695c6d44..fd2bc5514 100644 --- a/src/main/java/appeng/parts/reporting/PartConversionMonitor.java +++ b/src/main/java/appeng/parts/reporting/PartConversionMonitor.java @@ -179,25 +179,29 @@ public class PartConversionMonitor extends AbstractPartMonitor final IEnergySource energy = this.getProxy().getEnergy(); final IMEMonitor cell = this.getProxy() .getStorage() - .getInventory( - AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ); + .getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ); + if( allItems ) { - final IAEItemStack input = this.getDisplayed().copy(); - IItemHandler inv = new PlayerMainInvWrapper( player.inventory ); - - for( int x = 0; x < inv.getSlots(); x++ ) + if( this.getDisplayed() != null ) { - final ItemStack targetStack = inv.getStackInSlot( x ); - if( input.equals( targetStack ) ) + final IAEItemStack input = this.getDisplayed().copy(); + IItemHandler inv = new PlayerMainInvWrapper( player.inventory ); + + for( int x = 0; x < inv.getSlots(); x++ ) { - final ItemStack canExtract = inv.extractItem( x, targetStack.getCount(), true ); - if( !canExtract.isEmpty() ) + final ItemStack targetStack = inv.getStackInSlot( x ); + if( input.equals( targetStack ) ) { - input.setStackSize( canExtract.getCount() ); - final IAEItemStack failedToInsert = Platform.poweredInsert( energy, cell, input, new PlayerSource( player, this ) ); - inv.extractItem( x, failedToInsert == null ? canExtract.getCount() : canExtract.getCount() - (int) failedToInsert.getStackSize(), - false ); + final ItemStack canExtract = inv.extractItem( x, targetStack.getCount(), true ); + if( !canExtract.isEmpty() ) + { + input.setStackSize( canExtract.getCount() ); + final IAEItemStack failedToInsert = Platform.poweredInsert( energy, cell, input, new PlayerSource( player, this ) ); + inv.extractItem( x, + failedToInsert == null ? canExtract.getCount() : canExtract.getCount() - (int) failedToInsert.getStackSize(), + false ); + } } } }