Fix a few issues when dealing with NBT items during crafting calculation.
This commit is contained in:
@@ -49,7 +49,8 @@ public class CraftingTreeNode
|
|||||||
this.job = job;
|
this.job = job;
|
||||||
sim = false;
|
sim = false;
|
||||||
|
|
||||||
for (ICraftingPatternDetails details : cc.getCraftingFor( what ))// in order.
|
for (ICraftingPatternDetails details : cc.getCraftingFor( what, parent == null ? null : parent.details, slot, world ))// in
|
||||||
|
// order.
|
||||||
{
|
{
|
||||||
if ( parent == null || parent.notRecurive( details ) )
|
if ( parent == null || parent.notRecurive( details ) )
|
||||||
nodes.add( new CraftingTreeProcess( cc, job, details, this, depth + 1, world ) );
|
nodes.add( new CraftingTreeProcess( cc, job, details, this, depth + 1, world ) );
|
||||||
@@ -151,10 +152,12 @@ public class CraftingTreeNode
|
|||||||
|
|
||||||
while (pro.possible && l > 0)
|
while (pro.possible && l > 0)
|
||||||
{
|
{
|
||||||
pro.request( inv, pro.getTimes( l, pro.getAmountCrafted( what ).getStackSize() ), src );
|
IAEItemStack madeWhat = pro.getAmountCrafted( what );
|
||||||
|
|
||||||
what.setStackSize( l );
|
pro.request( inv, pro.getTimes( l, madeWhat.getStackSize() ), src );
|
||||||
IAEItemStack available = inv.extractItems( what, Actionable.MODULATE, src );
|
|
||||||
|
madeWhat.setStackSize( l );
|
||||||
|
IAEItemStack available = inv.extractItems( madeWhat, Actionable.MODULATE, src );
|
||||||
|
|
||||||
if ( available != null )
|
if ( available != null )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -137,6 +137,17 @@ public class CraftingTreeProcess
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// more fuzzy!
|
||||||
|
for (IAEItemStack is : details.getCondencedOutputs())
|
||||||
|
{
|
||||||
|
if ( is.getItem() == what2.getItem() && (is.getItem().isDamageable() || is.getItemDamage() == what2.getItemDamage()) )
|
||||||
|
{
|
||||||
|
what2 = is.copy();
|
||||||
|
what2.setStackSize( is.getStackSize() );
|
||||||
|
return what2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
throw new RuntimeException( "Crafting Tree construction failed." );
|
throw new RuntimeException( "Crafting Tree construction failed." );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
+21
-2
@@ -448,11 +448,30 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImmutableCollection<ICraftingPatternDetails> getCraftingFor(IAEItemStack what)
|
@Override
|
||||||
|
public ImmutableCollection<ICraftingPatternDetails> getCraftingFor(IAEItemStack whatToCraft, ICraftingPatternDetails details, int slotIndex, World world)
|
||||||
{
|
{
|
||||||
ImmutableSet<ICraftingPatternDetails> res = craftableItems.get( what );
|
ImmutableSet<ICraftingPatternDetails> res = craftableItems.get( whatToCraft );
|
||||||
|
|
||||||
if ( res == null )
|
if ( res == null )
|
||||||
|
{
|
||||||
|
if ( details != null && details.isCraftable() )
|
||||||
|
{
|
||||||
|
for (IAEItemStack ais : craftableItems.keySet())
|
||||||
|
{
|
||||||
|
if ( ais.getItem() == whatToCraft.getItem() && (!ais.getItem().getHasSubtypes() || ais.getItemDamage() == whatToCraft.getItemDamage()) )
|
||||||
|
{
|
||||||
|
if ( details.isValidItemForSlot( slotIndex, ais.getItemStack(), world ) )
|
||||||
|
{
|
||||||
|
return craftableItems.get( ais );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return ImmutableSet.of();
|
return ImmutableSet.of();
|
||||||
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -1640,7 +1640,9 @@ public class Platform
|
|||||||
ci.setInventorySlotContents( slot, cp );
|
ci.setInventorySlotContents( slot, cp );
|
||||||
if ( r.matches( ci, w ) && Platform.isSameItem( r.getCraftingResult( ci ), output ) )
|
if ( r.matches( ci, w ) && Platform.isSameItem( r.getCraftingResult( ci ), output ) )
|
||||||
{
|
{
|
||||||
IAEItemStack ex = src.extractItems( AEItemStack.create( cp ), realForFake, mySrc );
|
IAEItemStack ax = x.copy();
|
||||||
|
ax.setStackSize( 1 );
|
||||||
|
IAEItemStack ex = src.extractItems( ax, realForFake, mySrc );
|
||||||
if ( ex != null )
|
if ( ex != null )
|
||||||
{
|
{
|
||||||
energySrc.extractAEPower( 1, realForFake, PowerMultiplier.CONFIG );
|
energySrc.extractAEPower( 1, realForFake, PowerMultiplier.CONFIG );
|
||||||
|
|||||||
Reference in New Issue
Block a user