Fix Crafting Dupe on Extraction, if extraction fails roll back and fail.
This commit is contained in:
@@ -44,7 +44,8 @@ public class CraftingTreeNode
|
||||
|
||||
boolean sim;
|
||||
|
||||
public CraftingTreeNode(ICraftingGrid cc, CraftingJob job, IAEItemStack wat, CraftingTreeProcess par, int slot, int depth) {
|
||||
public CraftingTreeNode(ICraftingGrid cc, CraftingJob job, IAEItemStack wat, CraftingTreeProcess par, int slot, int depth)
|
||||
{
|
||||
what = wat;
|
||||
parent = par;
|
||||
this.slot = slot;
|
||||
@@ -206,7 +207,8 @@ public class CraftingTreeNode
|
||||
|
||||
if ( available != null )
|
||||
{
|
||||
subInv.commit( src );
|
||||
if ( !subInv.commit( src ) )
|
||||
throw new CraftBranchFailure( what, l );
|
||||
|
||||
bytes += available.getStackSize();
|
||||
l -= available.getStackSize();
|
||||
|
||||
@@ -153,18 +153,59 @@ public class MECraftingInventory implements IMEInventory<IAEItemStack>
|
||||
return StorageChannel.ITEMS;
|
||||
}
|
||||
|
||||
public void commit(BaseActionSource src)
|
||||
public boolean commit(BaseActionSource src)
|
||||
{
|
||||
IItemList<IAEItemStack> added = AEApi.instance().storage().createItemList();
|
||||
IItemList<IAEItemStack> pulled = AEApi.instance().storage().createItemList();
|
||||
boolean failed = false;
|
||||
|
||||
if ( logExtracted )
|
||||
{
|
||||
for (IAEItemStack extra : extractedCache)
|
||||
{
|
||||
IAEItemStack result = null;
|
||||
pulled.add( result = target.extractItems( extra, Actionable.MODULATE, src ) );
|
||||
|
||||
if ( result == null || result.getStackSize() != extra.getStackSize() )
|
||||
{
|
||||
failed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( failed )
|
||||
{
|
||||
for (IAEItemStack is : pulled)
|
||||
target.injectItems( is, Actionable.MODULATE, src );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( logInjections )
|
||||
{
|
||||
for (IAEItemStack injec : injectedCache)
|
||||
target.injectItems( injec, Actionable.MODULATE, src );
|
||||
{
|
||||
IAEItemStack result = null;
|
||||
added.add( result = target.injectItems( injec, Actionable.MODULATE, src ) );
|
||||
|
||||
if ( result != null )
|
||||
{
|
||||
failed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( logExtracted )
|
||||
if ( failed )
|
||||
{
|
||||
for (IAEItemStack extra : extractedCache)
|
||||
target.extractItems( extra, Actionable.MODULATE, src );
|
||||
for (IAEItemStack is : added)
|
||||
target.extractItems( is, Actionable.MODULATE, src );
|
||||
|
||||
for (IAEItemStack is : pulled)
|
||||
target.injectItems( is, Actionable.MODULATE, src );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if ( logMissing && par != null )
|
||||
@@ -172,6 +213,8 @@ public class MECraftingInventory implements IMEInventory<IAEItemStack>
|
||||
for (IAEItemStack extra : missingCache)
|
||||
par.addMissing( extra );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void addMissing(IAEItemStack extra)
|
||||
|
||||
Reference in New Issue
Block a user