Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e09f74cb5f | |||
| facc1b4ef4 | |||
| 618e9390c6 | |||
| 9a71bfb0f0 | |||
| 9680123906 | |||
| 87730894e9 | |||
| 71c944daea |
+13
-2
@@ -15,6 +15,10 @@ Fixes:
|
|||||||
- Exclusive Blocking mode for GTCE ( shapes, molds and configured circuits do not block GTCE machines )
|
- Exclusive Blocking mode for GTCE ( shapes, molds and configured circuits do not block GTCE machines )
|
||||||
- Blocking modes default to block on any item in the iventory the entity exposes
|
- Blocking modes default to block on any item in the iventory the entity exposes
|
||||||
- Fuzzy includes items that report that they're damageable, but report a maxDamage of 0 ( auto-crafting of basic capacitors -> resonant capacitors is now possible ) <- Broken item implementation.
|
- Fuzzy includes items that report that they're damageable, but report a maxDamage of 0 ( auto-crafting of basic capacitors -> resonant capacitors is now possible ) <- Broken item implementation.
|
||||||
|
- Fix CME exceptions on the energy grid
|
||||||
|
- Fix AE going offline even with enough power by extracting from the local buffer always last
|
||||||
|
- Fix IO-Port copying craftable flag into items
|
||||||
|
- Fix NBT of old items not clearing on drives that reached 64 types once
|
||||||
|
|
||||||
Performance:
|
Performance:
|
||||||
|
|
||||||
@@ -24,6 +28,9 @@ Performance:
|
|||||||
- Count items set in interfaces before queuing crafting for them needlessly
|
- Count items set in interfaces before queuing crafting for them needlessly
|
||||||
- Backported b7ca98d ( Avoid copying items on simulated item extraction )
|
- Backported b7ca98d ( Avoid copying items on simulated item extraction )
|
||||||
- Cache some level emitters functions
|
- Cache some level emitters functions
|
||||||
|
- Reduced import bus insert simulation to 1 before real insertion (if possible)
|
||||||
|
- Backported itemlist re-implementation along with pattern changes to avoid CraftingManager fallback issues
|
||||||
|
- Instead of recalculating all the content of the network on every change, track the changes properly and apply them to the cached list of items
|
||||||
|
|
||||||
QOL:
|
QOL:
|
||||||
|
|
||||||
@@ -31,7 +38,7 @@ QOL:
|
|||||||
- Added bar on the interface terminal that search by inputs ( The one on the LEFT, also searchs by interface name )
|
- Added bar on the interface terminal that search by inputs ( The one on the LEFT, also searchs by interface name )
|
||||||
- Shortcut to molecular assemblers with free slots on the terminal interface by @Theisyat
|
- Shortcut to molecular assemblers with free slots on the terminal interface by @Theisyat
|
||||||
- Toggle button on interface terminal to hide full interfaces
|
- Toggle button on interface terminal to hide full interfaces
|
||||||
- JEI "U""R" and "A" (Usages/Recipes/Bookmark) now work on the Crafting Status GUI. ( the one that shows the total items to craft, and whats missing)
|
- JEI "U", "R" and "A" (Usages/Recipes/Bookmark) now work on the Crafting Status GUI. ( the one that shows the total items to craft, and whats missing)
|
||||||
- Patterns can now be made with items currently showing on JEI. ( This is overriden by Just Enough Energistics. )
|
- Patterns can now be made with items currently showing on JEI. ( This is overriden by Just Enough Energistics. )
|
||||||
- Added multiplier buttons to processing pattern gui
|
- Added multiplier buttons to processing pattern gui
|
||||||
- Switched crafting terminal JEI search to fuzzy mode. If the recipe uses a damageable item, AE will try to grab it ( damaged tools )
|
- Switched crafting terminal JEI search to fuzzy mode. If the recipe uses a damageable item, AE will try to grab it ( damaged tools )
|
||||||
@@ -39,7 +46,11 @@ QOL:
|
|||||||
- Encoded patterns can be draggred on the interface terminal.
|
- Encoded patterns can be draggred on the interface terminal.
|
||||||
- Storage Monitor and Conversion Monitor now also ccepts fluids
|
- Storage Monitor and Conversion Monitor now also ccepts fluids
|
||||||
- Draggable JEI ghost items (also works on bookmarked items. SHIFT + Click will move the hovered item into the first free target slot)
|
- Draggable JEI ghost items (also works on bookmarked items. SHIFT + Click will move the hovered item into the first free target slot)
|
||||||
-JEI auto switches between crafting and processing patterns
|
- JEI auto switches between crafting and processing patterns
|
||||||
|
- GTCE Blocking mode work through phantom itemfaces
|
||||||
|
- Shift-clicking blank patterns into the pattern terminal will try to fill the blank pattern slots first
|
||||||
|
- Mismached simulated/real item count ( most often due to compacting drawers ) will now tell the player wich item cause the failure when trying to start a craft
|
||||||
|
- Added 'pattern expansion' cards that adds an extra row of patterns to interfaces. up to 3 card on an interface. (each card will increase the interface idle power draw by 4 times)
|
||||||
|
|
||||||
HOTKEYS:
|
HOTKEYS:
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@ aechannel=stable
|
|||||||
aebuild=7
|
aebuild=7
|
||||||
aegroup=appeng
|
aegroup=appeng
|
||||||
aebasename=appliedenergistics2
|
aebasename=appliedenergistics2
|
||||||
trousers=omni-fixes-v46
|
trousers=omni-fixes-v47
|
||||||
|
|
||||||
#########################################################
|
#########################################################
|
||||||
# Versions #
|
# Versions #
|
||||||
|
|||||||
@@ -270,12 +270,15 @@ public class GuiUpgradeable extends AEBaseGui implements IJEIGhostIngredients
|
|||||||
@Override
|
@Override
|
||||||
public Rectangle getArea()
|
public Rectangle getArea()
|
||||||
{
|
{
|
||||||
if( slot instanceof SlotFake )
|
if( slot instanceof SlotFake && ( (SlotFake) slot ).isSlotEnabled() )
|
||||||
|
{
|
||||||
return new Rectangle( getGuiLeft() + ( (SlotFake) slot ).xPos, getGuiTop() + ( (SlotFake) slot ).yPos, 16, 16 );
|
return new Rectangle( getGuiLeft() + ( (SlotFake) slot ).xPos, getGuiTop() + ( (SlotFake) slot ).yPos, 16, 16 );
|
||||||
else
|
}
|
||||||
|
else if( slot instanceof GuiFluidSlot && ( (GuiFluidSlot) slot ).isSlotEnabled() )
|
||||||
{
|
{
|
||||||
return new Rectangle( getGuiLeft() + ( (GuiFluidSlot) slot ).xPos(), getGuiTop() + ( (GuiFluidSlot) slot ).yPos(), 16, 16 );
|
return new Rectangle( getGuiLeft() + ( (GuiFluidSlot) slot ).xPos(), getGuiTop() + ( (GuiFluidSlot) slot ).yPos(), 16, 16 );
|
||||||
}
|
}
|
||||||
|
return new Rectangle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -284,7 +287,7 @@ public class GuiUpgradeable extends AEBaseGui implements IJEIGhostIngredients
|
|||||||
PacketInventoryAction p = null;
|
PacketInventoryAction p = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if( slot instanceof SlotFake )
|
if( slot instanceof SlotFake && ( (SlotFake) slot ).isSlotEnabled() )
|
||||||
{
|
{
|
||||||
if( finalItemStack.isEmpty() && finalFluidStack != null )
|
if( finalItemStack.isEmpty() && finalFluidStack != null )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ package appeng.crafting;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import appeng.me.cache.CraftingGridCache;
|
||||||
import com.google.common.base.Stopwatch;
|
import com.google.common.base.Stopwatch;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@@ -71,6 +72,8 @@ public class CraftingJob implements Runnable, ICraftingJob
|
|||||||
private boolean done = false;
|
private boolean done = false;
|
||||||
private int time;
|
private int time;
|
||||||
private int incTime;
|
private int incTime;
|
||||||
|
private final ICraftingGrid cc;
|
||||||
|
private final IStorageGrid sg;
|
||||||
|
|
||||||
private World wrapWorld( final World w )
|
private World wrapWorld( final World w )
|
||||||
{
|
{
|
||||||
@@ -84,10 +87,9 @@ public class CraftingJob implements Runnable, ICraftingJob
|
|||||||
this.actionSrc = actionSrc;
|
this.actionSrc = actionSrc;
|
||||||
|
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
final ICraftingGrid cc = grid.getCache( ICraftingGrid.class );
|
this.cc = grid.getCache( ICraftingGrid.class );
|
||||||
final IStorageGrid sg = grid.getCache( IStorageGrid.class );
|
this.sg = grid.getCache( IStorageGrid.class );
|
||||||
this.original = new MECraftingInventory( sg
|
this.original = new MECraftingInventory( sg.getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ), actionSrc, false, false, false );
|
||||||
.getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ), actionSrc, false, false, false );
|
|
||||||
|
|
||||||
this.setTree( this.getCraftingTree( cc, what ) );
|
this.setTree( this.getCraftingTree( cc, what ) );
|
||||||
this.availableCheck = null;
|
this.availableCheck = null;
|
||||||
@@ -380,6 +382,11 @@ public class CraftingJob implements Runnable, ICraftingJob
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addIncompletablePattern( ICraftingPatternDetails details, IAEItemStack stack )
|
||||||
|
{
|
||||||
|
( (CraftingGridCache) cc ).getPatternStatusManager().put( details, stack );
|
||||||
|
}
|
||||||
|
|
||||||
private static class TwoIntegers
|
private static class TwoIntegers
|
||||||
{
|
{
|
||||||
private final long perOp = 0;
|
private final long perOp = 0;
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ package appeng.crafting;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import appeng.util.item.OreHelper;
|
||||||
|
import appeng.util.item.OreReference;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@@ -117,6 +120,11 @@ public class CraftingTreeNode
|
|||||||
return this.parent.notRecursive( details );
|
return this.parent.notRecursive( details );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CraftingTreeProcess getParent()
|
||||||
|
{
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
IAEItemStack request( final MECraftingInventory inv, long l, final IActionSource src ) throws CraftBranchFailure, InterruptedException
|
IAEItemStack request( final MECraftingInventory inv, long l, final IActionSource src ) throws CraftBranchFailure, InterruptedException
|
||||||
{
|
{
|
||||||
this.job.handlePausing();
|
this.job.handlePausing();
|
||||||
@@ -318,6 +326,7 @@ public class CraftingTreeNode
|
|||||||
if( this.missing > 0 )
|
if( this.missing > 0 )
|
||||||
{
|
{
|
||||||
job.addMissing( this.getStack( this.missing ) );
|
job.addMissing( this.getStack( this.missing ) );
|
||||||
|
addMissingIAEStack();
|
||||||
}
|
}
|
||||||
// missing = 0;
|
// missing = 0;
|
||||||
|
|
||||||
@@ -329,6 +338,29 @@ public class CraftingTreeNode
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addMissingIAEStack()
|
||||||
|
{
|
||||||
|
if( parent != null )
|
||||||
|
{
|
||||||
|
parent.addMissingIAEStack();
|
||||||
|
if( missing > 0 )
|
||||||
|
{
|
||||||
|
if( this.parent.details.canSubstitute() && this.getSlot() >= 0 )
|
||||||
|
{
|
||||||
|
final List<IAEItemStack> substitutes = this.parent.details.getSubstituteInputs( this.slot );
|
||||||
|
for( IAEItemStack stack : substitutes )
|
||||||
|
{
|
||||||
|
job.addIncompletablePattern( this.getParent().details, stack.copy().setStackSize( this.missing ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
job.addIncompletablePattern( this.getParent().details, this.getStack( this.missing ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
IAEItemStack getStack( final long size )
|
IAEItemStack getStack( final long size )
|
||||||
{
|
{
|
||||||
final IAEItemStack is = this.what.copy();
|
final IAEItemStack is = this.what.copy();
|
||||||
|
|||||||
@@ -23,11 +23,10 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import appeng.me.cache.CraftingGridCache;
|
||||||
import net.minecraft.inventory.InventoryCrafting;
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraft.world.WorldServer;
|
|
||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
|
||||||
|
|
||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
import appeng.api.config.Actionable;
|
import appeng.api.config.Actionable;
|
||||||
@@ -66,7 +65,7 @@ public class CraftingTreeProcess
|
|||||||
this.depth = depth;
|
this.depth = depth;
|
||||||
final World world = job.getWorld();
|
final World world = job.getWorld();
|
||||||
|
|
||||||
if( details.isCraftable() )
|
if( !( (CraftingGridCache) cc ).getPatternStatusManager().containsIncompletablePattern( details ) && details.isCraftable() )
|
||||||
{
|
{
|
||||||
final IAEItemStack[] list = details.getInputs();
|
final IAEItemStack[] list = details.getInputs();
|
||||||
|
|
||||||
@@ -174,6 +173,11 @@ public class CraftingTreeProcess
|
|||||||
return this.parent == null || this.parent.notRecursive( details );
|
return this.parent == null || this.parent.notRecursive( details );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CraftingTreeNode getParent()
|
||||||
|
{
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
long getTimes( final long remaining, final long stackSize )
|
long getTimes( final long remaining, final long stackSize )
|
||||||
{
|
{
|
||||||
if( this.limitQty || this.fullSimulation )
|
if( this.limitQty || this.fullSimulation )
|
||||||
@@ -317,4 +321,12 @@ public class CraftingTreeProcess
|
|||||||
pro.getPlan( plan );
|
pro.getPlan( plan );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addMissingIAEStack()
|
||||||
|
{
|
||||||
|
if( parent != null )
|
||||||
|
{
|
||||||
|
parent.addMissingIAEStack();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,18 +173,23 @@ public class PartFluidStorageBus extends PartSharedStorageBus implements IMEMoni
|
|||||||
boolean denyRead = false;
|
boolean denyRead = false;
|
||||||
if( in != null )
|
if( in != null )
|
||||||
{
|
{
|
||||||
AccessRestriction currentAccess = (AccessRestriction) ( (ConfigManager) this.getConfigManager() ).getSetting( Settings.ACCESS );
|
|
||||||
AccessRestriction oldAccess = (AccessRestriction) ( (ConfigManager) this.getConfigManager() ).getOldSetting( Settings.ACCESS );
|
|
||||||
if( oldAccess.hasPermission( AccessRestriction.READ ) && !currentAccess.hasPermission( AccessRestriction.READ ) )
|
|
||||||
{
|
|
||||||
denyRead = true;
|
|
||||||
}
|
|
||||||
if( accessChanged )
|
if( accessChanged )
|
||||||
{
|
{
|
||||||
|
AccessRestriction currentAccess = (AccessRestriction) ( (ConfigManager) this.getConfigManager() ).getSetting( Settings.ACCESS );
|
||||||
|
AccessRestriction oldAccess = (AccessRestriction) ( (ConfigManager) this.getConfigManager() ).getOldSetting( Settings.ACCESS );
|
||||||
|
if( oldAccess.hasPermission( AccessRestriction.READ ) && !currentAccess.hasPermission( AccessRestriction.READ ) )
|
||||||
|
{
|
||||||
|
denyRead = true;
|
||||||
|
}
|
||||||
in.setBaseAccess( oldAccess );
|
in.setBaseAccess( oldAccess );
|
||||||
|
before = in.getAvailableItems( before );
|
||||||
|
in.setBaseAccess( currentAccess );
|
||||||
|
accessChanged = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
before = in.getAvailableItems( before );
|
||||||
}
|
}
|
||||||
before = in.getAvailableItems( before );
|
|
||||||
in.setBaseAccess( currentAccess );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.cached = false;
|
this.cached = false;
|
||||||
|
|||||||
@@ -24,9 +24,12 @@ import java.util.*;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import appeng.api.definitions.IItemDefinition;
|
import appeng.api.definitions.IItemDefinition;
|
||||||
|
import appeng.api.networking.crafting.*;
|
||||||
import appeng.integration.modules.gregtech.GTCEInventoryAdaptor;
|
import appeng.integration.modules.gregtech.GTCEInventoryAdaptor;
|
||||||
|
import appeng.me.cache.CraftingGridCache;
|
||||||
import appeng.util.*;
|
import appeng.util.*;
|
||||||
import appeng.util.inv.*;
|
import appeng.util.inv.*;
|
||||||
|
import com.google.common.collect.ImmutableCollection;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
import de.ellpeck.actuallyadditions.api.tile.IPhantomTile;
|
import de.ellpeck.actuallyadditions.api.tile.IPhantomTile;
|
||||||
@@ -65,10 +68,6 @@ import appeng.api.implementations.tiles.ICraftingMachine;
|
|||||||
import appeng.api.networking.GridFlags;
|
import appeng.api.networking.GridFlags;
|
||||||
import appeng.api.networking.IGrid;
|
import appeng.api.networking.IGrid;
|
||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
import appeng.api.networking.crafting.ICraftingLink;
|
|
||||||
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
|
||||||
import appeng.api.networking.crafting.ICraftingProvider;
|
|
||||||
import appeng.api.networking.crafting.ICraftingProviderHelper;
|
|
||||||
import appeng.api.networking.energy.IEnergySource;
|
import appeng.api.networking.energy.IEnergySource;
|
||||||
import appeng.api.networking.events.MENetworkCraftingPatternChange;
|
import appeng.api.networking.events.MENetworkCraftingPatternChange;
|
||||||
import appeng.api.networking.security.IActionHost;
|
import appeng.api.networking.security.IActionHost;
|
||||||
@@ -110,7 +109,6 @@ import static gregtech.api.block.machines.BlockMachine.getMetaTileEntity;
|
|||||||
|
|
||||||
public class DualityInterface implements IGridTickable, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory, IConfigManagerHost, ICraftingProvider, IUpgradeableHost
|
public class DualityInterface implements IGridTickable, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory, IConfigManagerHost, ICraftingProvider, IUpgradeableHost
|
||||||
{
|
{
|
||||||
private int[] failedCraftTriesSlot = {0,0,0,0,0,0,0,0,0};
|
|
||||||
|
|
||||||
public static final int NUMBER_OF_STORAGE_SLOTS = 9;
|
public static final int NUMBER_OF_STORAGE_SLOTS = 9;
|
||||||
public static final int NUMBER_OF_CONFIG_SLOTS = 9;
|
public static final int NUMBER_OF_CONFIG_SLOTS = 9;
|
||||||
@@ -931,17 +929,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
|||||||
{
|
{
|
||||||
if( this.getInstalledUpgrades( Upgrades.CRAFTING ) > 0 && itemStack != null )
|
if( this.getInstalledUpgrades( Upgrades.CRAFTING ) > 0 && itemStack != null )
|
||||||
{
|
{
|
||||||
if (this.failedCraftTriesSlot[x] <= 0)
|
return this.craftingTracker.handleCrafting( x, itemStack.getStackSize(), itemStack, d, this.iHost.getTileEntity().getWorld(), this.gridProxy.getGrid(), this.gridProxy.getCrafting(), this.mySource );
|
||||||
{
|
|
||||||
boolean crafted = this.craftingTracker.handleCrafting( x, itemStack.getStackSize(), itemStack, d, this.iHost.getTileEntity().getWorld(),
|
|
||||||
this.gridProxy.getGrid(), this.gridProxy.getCrafting(), this.mySource );
|
|
||||||
|
|
||||||
if (crafted) this.failedCraftTriesSlot[x] = 0;
|
|
||||||
else{
|
|
||||||
this.failedCraftTriesSlot[x] += 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.failedCraftTriesSlot[x] -= 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch( final GridAccessException e )
|
catch( final GridAccessException e )
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ package appeng.helpers;
|
|||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
|
import appeng.api.networking.crafting.*;
|
||||||
|
import appeng.me.cache.CraftingGridCache;
|
||||||
|
import com.google.common.collect.ImmutableCollection;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
@@ -29,10 +32,6 @@ import net.minecraft.world.World;
|
|||||||
|
|
||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
import appeng.api.networking.IGrid;
|
import appeng.api.networking.IGrid;
|
||||||
import appeng.api.networking.crafting.ICraftingGrid;
|
|
||||||
import appeng.api.networking.crafting.ICraftingJob;
|
|
||||||
import appeng.api.networking.crafting.ICraftingLink;
|
|
||||||
import appeng.api.networking.crafting.ICraftingRequester;
|
|
||||||
import appeng.api.networking.security.IActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.util.InventoryAdaptor;
|
import appeng.util.InventoryAdaptor;
|
||||||
@@ -132,6 +131,17 @@ public class MultiCraftingTracker
|
|||||||
final IAEItemStack aisC = ais.copy();
|
final IAEItemStack aisC = ais.copy();
|
||||||
aisC.setStackSize( itemToCraft );
|
aisC.setStackSize( itemToCraft );
|
||||||
|
|
||||||
|
CraftingGridCache cgc = (CraftingGridCache) cg;
|
||||||
|
|
||||||
|
ImmutableCollection<ICraftingPatternDetails> cl = cgc.getCraftingFor( aisC, null, x, w );
|
||||||
|
for( ICraftingPatternDetails craftingPatternDetails : cl )
|
||||||
|
{
|
||||||
|
if( cgc.getPatternStatusManager().containsIncompletablePattern( craftingPatternDetails ) )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.setJob( x, cg.beginCraftingJob( w, g, mySrc, aisC, null ) );
|
this.setJob( x, cg.beginCraftingJob( w, g, mySrc, aisC, null ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-4
@@ -35,7 +35,7 @@ import java.util.concurrent.Executors;
|
|||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
|
|
||||||
import appeng.api.storage.data.IAEFluidStack;
|
import appeng.me.helpers.PatternStatusManager;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import com.google.common.collect.ImmutableCollection;
|
import com.google.common.collect.ImmutableCollection;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@@ -267,16 +267,17 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
// coalesce change events during a grid traversal to a single rebuild
|
// coalesce change events during a grid traversal to a single rebuild
|
||||||
if (pauseRebuilds != 0)
|
if (pauseRebuilds != 0)
|
||||||
{
|
{
|
||||||
rebuildNeeded.add(this);
|
rebuildNeeded.add( this );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Object2ObjectMap<IAEItemStack, ImmutableList<ICraftingPatternDetails>> oldItems = new Object2ObjectOpenHashMap<>(this.craftableItems);
|
final Object2ObjectMap<IAEItemStack, ImmutableList<ICraftingPatternDetails>> oldItems = new Object2ObjectOpenHashMap<>( this.craftableItems );
|
||||||
|
|
||||||
// erase list.
|
// erase list.
|
||||||
this.craftingMethods.clear();
|
this.craftingMethods.clear();
|
||||||
this.craftableItems.clear();
|
this.craftableItems.clear();
|
||||||
this.emitableItems.clear();
|
this.emitableItems.clear();
|
||||||
|
( (GridStorageCache) this.storageGrid ).clearPatternStatus();
|
||||||
|
|
||||||
// re-create list..
|
// re-create list..
|
||||||
for( final ICraftingProvider provider : this.craftingProviders )
|
for( final ICraftingProvider provider : this.craftingProviders )
|
||||||
@@ -648,7 +649,7 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
|
|
||||||
public boolean hasCpu( final ICraftingCPU cpu )
|
public boolean hasCpu( final ICraftingCPU cpu )
|
||||||
{
|
{
|
||||||
if (cpu instanceof CraftingCPUCluster)
|
if( cpu instanceof CraftingCPUCluster )
|
||||||
{
|
{
|
||||||
return this.craftingCPUClusters.contains( (CraftingCPUCluster) cpu );
|
return this.craftingCPUClusters.contains( (CraftingCPUCluster) cpu );
|
||||||
}
|
}
|
||||||
@@ -660,6 +661,11 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
return this.interestManager;
|
return this.interestManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PatternStatusManager getPatternStatusManager()
|
||||||
|
{
|
||||||
|
return ( (GridStorageCache) this.storageGrid ).getPatternStatusManager();
|
||||||
|
}
|
||||||
|
|
||||||
private static class ActiveCpuIterator implements Iterator<ICraftingCPU>
|
private static class ActiveCpuIterator implements Iterator<ICraftingCPU>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
+19
-2
@@ -26,7 +26,10 @@ import java.util.IdentityHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||||
|
import appeng.me.helpers.PatternStatusManager;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
import com.google.common.collect.SetMultimap;
|
import com.google.common.collect.SetMultimap;
|
||||||
|
|
||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
@@ -65,6 +68,10 @@ public class GridStorageCache implements IStorageGrid
|
|||||||
private final HashSet<ICellProvider> inactiveCellProviders = new HashSet<>();
|
private final HashSet<ICellProvider> inactiveCellProviders = new HashSet<>();
|
||||||
private final SetMultimap<IAEStack, ItemWatcher> interests = HashMultimap.create();
|
private final SetMultimap<IAEStack, ItemWatcher> interests = HashMultimap.create();
|
||||||
private final GenericInterestManager<ItemWatcher> interestManager = new GenericInterestManager<>( this.interests );
|
private final GenericInterestManager<ItemWatcher> interestManager = new GenericInterestManager<>( this.interests );
|
||||||
|
private final Multimap<ICraftingPatternDetails, IAEStack> patternDetails2IAEStackMultimap = HashMultimap.create();
|
||||||
|
private final Multimap<IAEStack, ICraftingPatternDetails> iaeStack2PatternDetailsMultimap = HashMultimap.create();
|
||||||
|
private final PatternStatusManager patternStatusManager = new PatternStatusManager( this.patternDetails2IAEStackMultimap, this.iaeStack2PatternDetailsMultimap );
|
||||||
|
|
||||||
private final HashMap<IGridNode, IStackWatcher> watchers = new HashMap<>();
|
private final HashMap<IGridNode, IStackWatcher> watchers = new HashMap<>();
|
||||||
private Map<IStorageChannel<? extends IAEStack>, NetworkInventoryHandler<?>> storageNetworks;
|
private Map<IStorageChannel<? extends IAEStack>, NetworkInventoryHandler<?>> storageNetworks;
|
||||||
private Map<IStorageChannel<? extends IAEStack>, NetworkMonitor<?>> storageMonitors;
|
private Map<IStorageChannel<? extends IAEStack>, NetworkMonitor<?>> storageMonitors;
|
||||||
@@ -248,8 +255,6 @@ public class GridStorageCache implements IStorageGrid
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.storageMonitors.forEach( ( channel, monitor ) -> monitor.forceUpdate() );
|
|
||||||
|
|
||||||
tracker.applyChanges();
|
tracker.applyChanges();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,6 +311,18 @@ public class GridStorageCache implements IStorageGrid
|
|||||||
return this.interestManager;
|
return this.interestManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PatternStatusManager getPatternStatusManager()
|
||||||
|
{
|
||||||
|
return this.patternStatusManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clearPatternStatus()
|
||||||
|
{
|
||||||
|
System.out.println( "reseting pattern status due to pattern changes" );
|
||||||
|
this.patternDetails2IAEStackMultimap.clear();
|
||||||
|
this.iaeStack2PatternDetailsMultimap.clear();
|
||||||
|
}
|
||||||
|
|
||||||
IGrid getGrid()
|
IGrid getGrid()
|
||||||
{
|
{
|
||||||
return this.myGrid;
|
return this.myGrid;
|
||||||
|
|||||||
+64
-29
@@ -25,6 +25,8 @@ import javax.annotation.Nullable;
|
|||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
import appeng.api.config.AccessRestriction;
|
import appeng.api.config.AccessRestriction;
|
||||||
import appeng.api.config.Actionable;
|
import appeng.api.config.Actionable;
|
||||||
|
import appeng.api.config.FuzzyMode;
|
||||||
|
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||||
import appeng.api.networking.events.MENetworkStorageEvent;
|
import appeng.api.networking.events.MENetworkStorageEvent;
|
||||||
import appeng.api.networking.security.IActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.IMEInventoryHandler;
|
import appeng.api.storage.IMEInventoryHandler;
|
||||||
@@ -33,6 +35,7 @@ import appeng.api.storage.IMEMonitorHandlerReceiver;
|
|||||||
import appeng.api.storage.IStorageChannel;
|
import appeng.api.storage.IStorageChannel;
|
||||||
import appeng.api.storage.channels.IFluidStorageChannel;
|
import appeng.api.storage.channels.IFluidStorageChannel;
|
||||||
import appeng.api.storage.channels.IItemStorageChannel;
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.me.storage.ItemWatcher;
|
import appeng.me.storage.ItemWatcher;
|
||||||
@@ -61,7 +64,6 @@ public class NetworkMonitor<T extends IAEStack<T>> implements IMEMonitor<T>
|
|||||||
private final Object2ObjectMap<IMEMonitorHandlerReceiver<T>, Object> listeners;
|
private final Object2ObjectMap<IMEMonitorHandlerReceiver<T>, Object> listeners;
|
||||||
|
|
||||||
private boolean sendEvent = false;
|
private boolean sendEvent = false;
|
||||||
private boolean forceUpdate = false;
|
|
||||||
@Nonnegative
|
@Nonnegative
|
||||||
private int localDepthSemaphore = 0;
|
private int localDepthSemaphore = 0;
|
||||||
private long gridItemCount;
|
private long gridItemCount;
|
||||||
@@ -153,13 +155,6 @@ public class NetworkMonitor<T extends IAEStack<T>> implements IMEMonitor<T>
|
|||||||
@Override
|
@Override
|
||||||
public IItemList<T> getStorageList()
|
public IItemList<T> getStorageList()
|
||||||
{
|
{
|
||||||
if( forceUpdate )
|
|
||||||
{
|
|
||||||
forceUpdate = false;
|
|
||||||
this.cachedList.resetStatus();
|
|
||||||
return this.getAvailableItems( this.cachedList );
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.cachedList;
|
return this.cachedList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,6 +271,67 @@ public class NetworkMonitor<T extends IAEStack<T>> implements IMEMonitor<T>
|
|||||||
this.myGridCache.getInterestManager().disableTransactions();
|
this.myGridCache.getInterestManager().disableTransactions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if( changedItem instanceof IAEItemStack )
|
||||||
|
{
|
||||||
|
if( this.myGridCache.getPatternStatusManager().containsMissingIAEStack( changedItem ) )
|
||||||
|
{
|
||||||
|
this.myGridCache.getPatternStatusManager().enableTransactions();
|
||||||
|
|
||||||
|
for( ICraftingPatternDetails craftingPatternDetails : this.myGridCache.getPatternStatusManager().getIncompletablePattern( changedItem ) )
|
||||||
|
{
|
||||||
|
for( IAEStack stack : this.myGridCache.getPatternStatusManager().getMissingIAEStack( craftingPatternDetails ) )
|
||||||
|
{
|
||||||
|
if( craftingPatternDetails.canSubstitute() )
|
||||||
|
{
|
||||||
|
if( ( (IAEItemStack) stack ).getItem().isDamageable() )
|
||||||
|
{
|
||||||
|
if( ( (IAEStack) changedItem ).fuzzyComparison( stack, FuzzyMode.IGNORE_ALL ) )
|
||||||
|
{
|
||||||
|
if( changedItem.getStackSize() > 0 )
|
||||||
|
{
|
||||||
|
this.myGridCache.getPatternStatusManager().remove( craftingPatternDetails, stack );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if( ( (IAEItemStack) stack ).sameOre( (IAEItemStack) changedItem ) )
|
||||||
|
{
|
||||||
|
if( changedItem.getStackSize() > 0 )
|
||||||
|
{
|
||||||
|
if( changedItem.getStackSize() >= stack.getStackSize() )
|
||||||
|
{
|
||||||
|
this.myGridCache.getPatternStatusManager().remove( craftingPatternDetails, stack );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stack.decStackSize( changedItem.getStackSize() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( stack.equals( changedItem ) )
|
||||||
|
{
|
||||||
|
if( changedItem.getStackSize() > 0 )
|
||||||
|
{
|
||||||
|
if( changedItem.getStackSize() >= stack.getStackSize() )
|
||||||
|
{
|
||||||
|
this.myGridCache.getPatternStatusManager().remove( craftingPatternDetails, stack );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
stack.decStackSize( changedItem.getStackSize() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.myGridCache.getPatternStatusManager().disableTransactions();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.notifyListenersOfChange( changes, src );
|
this.notifyListenersOfChange( changes, src );
|
||||||
@@ -288,27 +344,6 @@ public class NetworkMonitor<T extends IAEStack<T>> implements IMEMonitor<T>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void forceUpdate()
|
|
||||||
{
|
|
||||||
this.forceUpdate = true;
|
|
||||||
|
|
||||||
final Iterator<Entry<IMEMonitorHandlerReceiver<T>, Object>> i = this.getListeners();
|
|
||||||
while ( i.hasNext() )
|
|
||||||
{
|
|
||||||
final Entry<IMEMonitorHandlerReceiver<T>, Object> o = i.next();
|
|
||||||
final IMEMonitorHandlerReceiver<T> receiver = o.getKey();
|
|
||||||
|
|
||||||
if( receiver.isValid( o.getValue() ) )
|
|
||||||
{
|
|
||||||
receiver.onListUpdate();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
i.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void onTick()
|
void onTick()
|
||||||
{
|
{
|
||||||
if( this.sendEvent )
|
if( this.sendEvent )
|
||||||
|
|||||||
@@ -0,0 +1,166 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Applied Energistics 2.
|
||||||
|
* Copyright (c) 2013 - 2014, AlgorithmX2, All rights reserved.
|
||||||
|
*
|
||||||
|
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package appeng.me.helpers;
|
||||||
|
|
||||||
|
|
||||||
|
import appeng.api.config.FuzzyMode;
|
||||||
|
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||||
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
import com.google.common.collect.Multimap;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class PatternStatusManager
|
||||||
|
{
|
||||||
|
|
||||||
|
private final Multimap<ICraftingPatternDetails, IAEStack> patternDetailsIAEStackMultimap;
|
||||||
|
private final Multimap<IAEStack, ICraftingPatternDetails> iaeStackPatternDetailsMultimap;
|
||||||
|
|
||||||
|
private List<SavedTransactions> transactions = null;
|
||||||
|
private int transDepth = 0;
|
||||||
|
|
||||||
|
public PatternStatusManager( final Multimap<ICraftingPatternDetails, IAEStack> interests, final Multimap<IAEStack, ICraftingPatternDetails> interested )
|
||||||
|
{
|
||||||
|
this.patternDetailsIAEStackMultimap = interests;
|
||||||
|
this.iaeStackPatternDetailsMultimap = interested;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableTransactions()
|
||||||
|
{
|
||||||
|
if( this.transDepth == 0 )
|
||||||
|
{
|
||||||
|
this.transactions = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.transDepth++;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void disableTransactions()
|
||||||
|
{
|
||||||
|
this.transDepth--;
|
||||||
|
|
||||||
|
if( this.transDepth == 0 )
|
||||||
|
{
|
||||||
|
final List<SavedTransactions> myActions = this.transactions;
|
||||||
|
this.transactions = null;
|
||||||
|
|
||||||
|
for( final SavedTransactions t : myActions )
|
||||||
|
{
|
||||||
|
if( t.put )
|
||||||
|
{
|
||||||
|
this.put( t.patternDetails, t.stack );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.remove( t.patternDetails, t.stack );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean put( final ICraftingPatternDetails craftingPatternDetails, final IAEStack debtStack )
|
||||||
|
{
|
||||||
|
if( this.transactions != null )
|
||||||
|
{
|
||||||
|
this.transactions.add( new SavedTransactions( true, craftingPatternDetails, debtStack ) );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.iaeStackPatternDetailsMultimap.put( debtStack, craftingPatternDetails );
|
||||||
|
return this.patternDetailsIAEStackMultimap.put( craftingPatternDetails, debtStack );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean remove( final ICraftingPatternDetails craftingPatternDetails, final IAEStack debtStack )
|
||||||
|
{
|
||||||
|
if( this.transactions != null )
|
||||||
|
{
|
||||||
|
this.transactions.add( new SavedTransactions( false, craftingPatternDetails, debtStack ) );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.iaeStackPatternDetailsMultimap.remove( debtStack, craftingPatternDetails );
|
||||||
|
return this.patternDetailsIAEStackMultimap.remove( craftingPatternDetails, debtStack );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean containsIncompletablePattern( final ICraftingPatternDetails craftingPatternDetails )
|
||||||
|
{
|
||||||
|
return this.patternDetailsIAEStackMultimap.containsKey( craftingPatternDetails );
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean containsMissingIAEStack( final IAEStack stack )
|
||||||
|
{
|
||||||
|
if( ( (IAEItemStack) stack ).getItem().isDamageable() )
|
||||||
|
{
|
||||||
|
for( IAEStack i : iaeStackPatternDetailsMultimap.keySet() )
|
||||||
|
{
|
||||||
|
if( i.fuzzyComparison( stack, FuzzyMode.IGNORE_ALL ) )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return this.iaeStackPatternDetailsMultimap.containsKey( stack );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<IAEStack> getMissingIAEStack( final ICraftingPatternDetails patternDetails )
|
||||||
|
{
|
||||||
|
return this.patternDetailsIAEStackMultimap.get( patternDetails );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<ICraftingPatternDetails> getIncompletablePattern( final IAEStack stack )
|
||||||
|
{
|
||||||
|
Collection<ICraftingPatternDetails> a = new ArrayList<>();
|
||||||
|
if( ( (IAEItemStack) stack ).getItem().isDamageable() )
|
||||||
|
{
|
||||||
|
for( IAEStack i : iaeStackPatternDetailsMultimap.keySet() )
|
||||||
|
{
|
||||||
|
if( i.fuzzyComparison( stack, FuzzyMode.IGNORE_ALL ) )
|
||||||
|
{
|
||||||
|
a.addAll( this.iaeStackPatternDetailsMultimap.get( i ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return this.iaeStackPatternDetailsMultimap.get( stack );
|
||||||
|
}
|
||||||
|
|
||||||
|
private class SavedTransactions
|
||||||
|
{
|
||||||
|
|
||||||
|
private final boolean put;
|
||||||
|
private final ICraftingPatternDetails patternDetails;
|
||||||
|
private final IAEStack stack;
|
||||||
|
|
||||||
|
public SavedTransactions( final boolean putOperation, final ICraftingPatternDetails myPatternDetails, final IAEStack stack )
|
||||||
|
{
|
||||||
|
this.put = putOperation;
|
||||||
|
this.patternDetails = myPatternDetails;
|
||||||
|
this.stack = stack;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,9 @@
|
|||||||
package appeng.parts.automation;
|
package appeng.parts.automation;
|
||||||
|
|
||||||
|
|
||||||
|
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||||
|
import appeng.me.cache.CraftingGridCache;
|
||||||
|
import com.google.common.collect.ImmutableCollection;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
@@ -150,18 +153,14 @@ public class PartExportBus extends PartSharedItemBus implements ICraftingRequest
|
|||||||
|
|
||||||
final IAEItemStack ais = this.getConfig().getAEStackInSlot( slotToExport );
|
final IAEItemStack ais = this.getConfig().getAEStackInSlot( slotToExport );
|
||||||
|
|
||||||
if( ais == null || this.itemToSend <= 0 ) continue;
|
if( ais == null || this.itemToSend <= 0 )
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if ( this.craftOnly() ) {
|
if( this.craftOnly() )
|
||||||
if (this.failedCraftTriesSlot[x] <= 0) {
|
{
|
||||||
|
this.didSomething = this.craftingTracker.handleCrafting( slotToExport, this.itemToSend, ais, destination, this.getTile().getWorld(), this.getProxy().getGrid(), cg, this.mySrc ) || this.didSomething;
|
||||||
this.didSomething = this.craftingTracker.handleCrafting(slotToExport, this.itemToSend, ais, destination, this.getTile().getWorld(),
|
|
||||||
this.getProxy().getGrid(), cg, this.mySrc) || this.didSomething;
|
|
||||||
|
|
||||||
if (this.didSomething) this.failedCraftTriesSlot[x] = 0;
|
|
||||||
else this.failedCraftTriesSlot[x] += 2;
|
|
||||||
}
|
|
||||||
this.failedCraftTriesSlot[x] -= 1;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,15 +187,7 @@ public class PartExportBus extends PartSharedItemBus implements ICraftingRequest
|
|||||||
|
|
||||||
if( this.itemToSend == before && this.isCraftingEnabled() )
|
if( this.itemToSend == before && this.isCraftingEnabled() )
|
||||||
{
|
{
|
||||||
if (this.failedCraftTriesSlot[x] <= 0) {
|
this.didSomething = this.craftingTracker.handleCrafting( slotToExport, this.itemToSend, ais, destination, this.getTile().getWorld(), this.getProxy().getGrid(), cg, this.mySrc ) || this.didSomething;
|
||||||
|
|
||||||
this.didSomething = this.craftingTracker.handleCrafting(slotToExport, this.itemToSend, ais, destination, this.getTile().getWorld(),
|
|
||||||
this.getProxy().getGrid(), cg, this.mySrc) || this.didSomething;
|
|
||||||
|
|
||||||
if (this.didSomething) this.failedCraftTriesSlot[x] = 0;
|
|
||||||
else this.failedCraftTriesSlot[x] += 2;
|
|
||||||
}
|
|
||||||
this.failedCraftTriesSlot[x] -= 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -467,16 +467,6 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC
|
|||||||
return Objects.hash( target, target.getCapability( Capabilities.STORAGE_MONITORABLE_ACCESSOR, targetSide ) );
|
return Objects.hash( target, target.getCapability( Capabilities.STORAGE_MONITORABLE_ACCESSOR, targetSide ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ITEM_REPOSITORY_CAPABILITY != null && target.hasCapability( ITEM_REPOSITORY_CAPABILITY, targetSide ))
|
|
||||||
{
|
|
||||||
final IItemRepository handlerRepo = target.getCapability( ITEM_REPOSITORY_CAPABILITY, targetSide );
|
|
||||||
|
|
||||||
if( handlerRepo != null )
|
|
||||||
{
|
|
||||||
return Objects.hash( target, handlerRepo, handlerRepo.getAllItems().size() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final IItemHandler itemHandler = target.getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetSide );
|
final IItemHandler itemHandler = target.getCapability( CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, targetSide );
|
||||||
|
|
||||||
if( itemHandler != null )
|
if( itemHandler != null )
|
||||||
|
|||||||
Reference in New Issue
Block a user