cache more itemstacks

This commit is contained in:
PrototypeTrousers
2022-02-19 23:02:40 -03:00
parent a2bda8f449
commit 66bc243b41
2 changed files with 61 additions and 38 deletions
@@ -893,12 +893,21 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
else if( itemStack.getStackSize() > 0 ) else if( itemStack.getStackSize() > 0 )
{ {
// make sure strange things didn't happen... // make sure strange things didn't happen...
ItemStack inputStack = itemStack.createItemStack();
if( !adaptor.simulateAdd( inputStack ).isEmpty() ) ItemStack inputStack = itemStack.getCachedItemStack( itemStack.getStackSize() );
ItemStack remaining = adaptor.simulateAdd( inputStack );
if( !remaining.isEmpty() )
{ {
itemStack.setCachedItemStack( remaining );
changed = true; changed = true;
throw new GridAccessException(); throw new GridAccessException();
} }
else
{
itemStack.setCachedItemStack( inputStack );
}
IAEItemStack storedStack = this.gridProxy.getStorage().getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ).getStorageList().findPrecise( itemStack ); IAEItemStack storedStack = this.gridProxy.getStorage().getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ).getStorageList().findPrecise( itemStack );
if( storedStack != null ) if( storedStack != null )
@@ -24,6 +24,7 @@ import java.util.concurrent.Future;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World; import net.minecraft.world.World;
@@ -83,57 +84,70 @@ public class MultiCraftingTracker
public boolean handleCrafting( final int x, final long itemToCraft, final IAEItemStack ais, final InventoryAdaptor d, final World w, final IGrid g, final ICraftingGrid cg, final IActionSource mySrc ) public boolean handleCrafting( final int x, final long itemToCraft, final IAEItemStack ais, final InventoryAdaptor d, final World w, final IGrid g, final ICraftingGrid cg, final IActionSource mySrc )
{ {
if( ais != null && d.simulateAdd( ais.createItemStack() ).isEmpty() ) if( ais != null )
{ {
final Future<ICraftingJob> craftingJob = this.getJob( x ); ItemStack inputStack = ais.getCachedItemStack( ais.getStackSize() );
if( this.getLink( x ) != null ) ItemStack remaining = d.simulateAdd( inputStack );
{
return false;
}
else if( craftingJob != null )
{
try if( remaining.isEmpty() )
{
ais.setCachedItemStack( inputStack );
final Future<ICraftingJob> craftingJob = this.getJob( x );
if( this.getLink( x ) != null )
{ {
ICraftingJob job = null; return false;
if( craftingJob.isDone() ) }
else if( craftingJob != null )
{
try
{ {
job = craftingJob.get(); ICraftingJob job = null;
} if( craftingJob.isDone() )
if( job != null )
{
final ICraftingLink link = cg.submitJob( job, this.owner, null, false, mySrc );
this.setJob( x, null );
if( link != null )
{ {
this.setLink( x, link ); job = craftingJob.get();
}
return true; if( job != null )
{
final ICraftingLink link = cg.submitJob( job, this.owner, null, false, mySrc );
this.setJob( x, null );
if( link != null )
{
this.setLink( x, link );
return true;
}
} }
} }
catch( final InterruptedException e )
{
// :P
}
catch( final ExecutionException e )
{
// :P
}
} }
catch( final InterruptedException e ) else
{ {
// :P if( this.getLink( x ) == null )
} {
catch( final ExecutionException e ) final IAEItemStack aisC = ais.copy();
{ aisC.setStackSize( itemToCraft );
// :P
this.setJob( x, cg.beginCraftingJob( w, g, mySrc, aisC, null ) );
}
} }
} }
else else
{ {
if( this.getLink( x ) == null ) ais.setCachedItemStack( remaining );
{
final IAEItemStack aisC = ais.copy();
aisC.setStackSize( itemToCraft );
this.setJob( x, cg.beginCraftingJob( w, g, mySrc, aisC, null ) );
}
} }
} }
return false; return false;