Crafting Emitter Progress.
This commit is contained in:
@@ -130,7 +130,7 @@ public class GuiLevelEmitter extends GuiUpgradeable
|
|||||||
|
|
||||||
NetworkHandler.instance.sendToServer( new PacketValueConfig( "LevelEmitter.Value", Out ) );
|
NetworkHandler.instance.sendToServer( new PacketValueConfig( "LevelEmitter.Value", Out ) );
|
||||||
}
|
}
|
||||||
catch(NumberFormatException e )
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
// nope..
|
// nope..
|
||||||
level.setText( "0" );
|
level.setText( "0" );
|
||||||
@@ -187,6 +187,21 @@ public class GuiLevelEmitter extends GuiUpgradeable
|
|||||||
@Override
|
@Override
|
||||||
public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY)
|
public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY)
|
||||||
{
|
{
|
||||||
|
boolean notCraftingMode = bc.getInstalledUpgrades( Upgrades.CRAFTING ) == 0;
|
||||||
|
|
||||||
|
// configure enabled status...
|
||||||
|
level.setEnabled( notCraftingMode );
|
||||||
|
plus1.enabled = notCraftingMode;
|
||||||
|
plus10.enabled = notCraftingMode;
|
||||||
|
plus100.enabled = notCraftingMode;
|
||||||
|
plus1000.enabled = notCraftingMode;
|
||||||
|
minus1.enabled = notCraftingMode;
|
||||||
|
minus10.enabled = notCraftingMode;
|
||||||
|
minus100.enabled = notCraftingMode;
|
||||||
|
minus1000.enabled = notCraftingMode;
|
||||||
|
levelMode.enabled = notCraftingMode;
|
||||||
|
redstoneMode.enabled = notCraftingMode;
|
||||||
|
|
||||||
super.drawFG( offsetX, offsetY, mouseX, mouseY );
|
super.drawFG( offsetX, offsetY, mouseX, mouseY );
|
||||||
|
|
||||||
if ( levelMode != null )
|
if ( levelMode != null )
|
||||||
|
|||||||
+11
-10
@@ -589,31 +589,32 @@ public class Registration
|
|||||||
Api.instance.partHelper.initFMPSupport();
|
Api.instance.partHelper.initFMPSupport();
|
||||||
((BlockCableBus) AEApi.instance().blocks().blockMultiPart.block()).setupTile();
|
((BlockCableBus) AEApi.instance().blocks().blockMultiPart.block()).setupTile();
|
||||||
|
|
||||||
// interface
|
// Interface
|
||||||
Upgrades.CRAFTING.registerItem( AEApi.instance().parts().partInterface.stack( 1 ), 1 );
|
Upgrades.CRAFTING.registerItem( AEApi.instance().parts().partInterface.stack( 1 ), 1 );
|
||||||
Upgrades.CRAFTING.registerItem( AEApi.instance().blocks().blockInterface.stack( 1 ), 1 );
|
Upgrades.CRAFTING.registerItem( AEApi.instance().blocks().blockInterface.stack( 1 ), 1 );
|
||||||
|
|
||||||
// IO PORT!
|
// IO Port!
|
||||||
Upgrades.SPEED.registerItem( AEApi.instance().blocks().blockIOPort.stack( 1 ), 3 );
|
Upgrades.SPEED.registerItem( AEApi.instance().blocks().blockIOPort.stack( 1 ), 3 );
|
||||||
Upgrades.REDSTONE.registerItem( AEApi.instance().blocks().blockIOPort.stack( 1 ), 1 );
|
Upgrades.REDSTONE.registerItem( AEApi.instance().blocks().blockIOPort.stack( 1 ), 1 );
|
||||||
|
|
||||||
// partLevelEmitter
|
// Level Emitter!
|
||||||
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partLevelEmitter.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partLevelEmitter.stack( 1 ), 1 );
|
||||||
|
Upgrades.CRAFTING.registerItem( AEApi.instance().parts().partLevelEmitter.stack( 1 ), 1 );
|
||||||
|
|
||||||
// partImportBus
|
// Import Bus
|
||||||
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 1 );
|
||||||
Upgrades.REDSTONE.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 1 );
|
Upgrades.REDSTONE.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 1 );
|
||||||
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 2 );
|
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 2 );
|
||||||
Upgrades.SPEED.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 4 );
|
Upgrades.SPEED.registerItem( AEApi.instance().parts().partImportBus.stack( 1 ), 4 );
|
||||||
|
|
||||||
// partExportBus
|
// Export Bus
|
||||||
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
||||||
Upgrades.REDSTONE.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
Upgrades.REDSTONE.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
||||||
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 2 );
|
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 2 );
|
||||||
Upgrades.SPEED.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 4 );
|
Upgrades.SPEED.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 4 );
|
||||||
Upgrades.CRAFTING.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
Upgrades.CRAFTING.registerItem( AEApi.instance().parts().partExportBus.stack( 1 ), 1 );
|
||||||
|
|
||||||
// blockCellWorkbench
|
// Storage Cells
|
||||||
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemCell1k.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemCell1k.stack( 1 ), 1 );
|
||||||
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemCell1k.stack( 1 ), 1 );
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemCell1k.stack( 1 ), 1 );
|
||||||
|
|
||||||
@@ -632,22 +633,22 @@ public class Registration
|
|||||||
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemViewCell.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemViewCell.stack( 1 ), 1 );
|
||||||
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemViewCell.stack( 1 ), 1 );
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemViewCell.stack( 1 ), 1 );
|
||||||
|
|
||||||
// partStorageBus
|
// Storage Bus
|
||||||
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 1 );
|
||||||
Upgrades.INVERTER.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 1 );
|
Upgrades.INVERTER.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 1 );
|
||||||
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 5 );
|
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partStorageBus.stack( 1 ), 5 );
|
||||||
|
|
||||||
// partFormationPlane
|
// Formation Plane
|
||||||
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partFormationPlane.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().parts().partFormationPlane.stack( 1 ), 1 );
|
||||||
Upgrades.INVERTER.registerItem( AEApi.instance().parts().partFormationPlane.stack( 1 ), 1 );
|
Upgrades.INVERTER.registerItem( AEApi.instance().parts().partFormationPlane.stack( 1 ), 1 );
|
||||||
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partFormationPlane.stack( 1 ), 5 );
|
Upgrades.CAPACITY.registerItem( AEApi.instance().parts().partFormationPlane.stack( 1 ), 5 );
|
||||||
|
|
||||||
// matter cannon
|
// Matter Cannon
|
||||||
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 1 );
|
Upgrades.FUZZY.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 1 );
|
||||||
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 1 );
|
Upgrades.INVERTER.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 1 );
|
||||||
Upgrades.SPEED.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 4 );
|
Upgrades.SPEED.registerItem( AEApi.instance().items().itemMassCannon.stack( 1 ), 4 );
|
||||||
|
|
||||||
// molecular assembler
|
// Molecular Assembler
|
||||||
Upgrades.SPEED.registerItem( AEApi.instance().blocks().blockMolecularAssembler.stack( 1 ), 5 );
|
Upgrades.SPEED.registerItem( AEApi.instance().blocks().blockMolecularAssembler.stack( 1 ), 5 );
|
||||||
|
|
||||||
AEApi.instance().registries().wireless().registerWirelessHandler( (IWirelessTermHandler) AEApi.instance().items().itemWirelessTerminal.item() );
|
AEApi.instance().registries().wireless().registerWirelessHandler( (IWirelessTermHandler) AEApi.instance().items().itemWirelessTerminal.item() );
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ public class CraftingTreeNode
|
|||||||
// what are the crafting patterns for this?
|
// what are the crafting patterns for this?
|
||||||
private ArrayList<CraftingTreeProcess> nodes = new ArrayList();
|
private ArrayList<CraftingTreeProcess> nodes = new ArrayList();
|
||||||
|
|
||||||
|
boolean canEmit = false;
|
||||||
boolean cannotUse = false;
|
boolean cannotUse = false;
|
||||||
long missing = 0;
|
long missing = 0;
|
||||||
|
|
||||||
@@ -49,12 +50,17 @@ public class CraftingTreeNode
|
|||||||
this.job = job;
|
this.job = job;
|
||||||
sim = false;
|
sim = false;
|
||||||
|
|
||||||
|
canEmit = cc.canEmitFor( what );
|
||||||
|
if ( canEmit )
|
||||||
|
return; // if you can emit for something, you can't make it with patterns.
|
||||||
|
|
||||||
for (ICraftingPatternDetails details : cc.getCraftingFor( what, parent == null ? null : parent.details, slot, world ))// in
|
for (ICraftingPatternDetails details : cc.getCraftingFor( what, parent == null ? null : parent.details, slot, world ))// in
|
||||||
// order.
|
// 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 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IAEItemStack getStack(long size)
|
public IAEItemStack getStack(long size)
|
||||||
|
|||||||
@@ -0,0 +1,171 @@
|
|||||||
|
package appeng.crafting;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import appeng.api.networking.crafting.ICraftingWatcher;
|
||||||
|
import appeng.api.networking.crafting.ICraftingWatcherHost;
|
||||||
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
import appeng.me.cache.CraftingGridCache;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maintain my interests, and a global watch list, they should always be fully synchronized.
|
||||||
|
*/
|
||||||
|
public class CraftingWatcher implements ICraftingWatcher
|
||||||
|
{
|
||||||
|
|
||||||
|
class ItemWatcherIterator implements Iterator<IAEStack>
|
||||||
|
{
|
||||||
|
|
||||||
|
final CraftingWatcher watcher;
|
||||||
|
final Iterator<IAEStack> interestIterator;
|
||||||
|
IAEStack myLast;
|
||||||
|
|
||||||
|
public ItemWatcherIterator(CraftingWatcher parent, Iterator<IAEStack> i) {
|
||||||
|
watcher = parent;
|
||||||
|
interestIterator = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasNext()
|
||||||
|
{
|
||||||
|
return interestIterator.hasNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IAEStack next()
|
||||||
|
{
|
||||||
|
return myLast = interestIterator.next();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove()
|
||||||
|
{
|
||||||
|
gsc.interestManager.remove( myLast, watcher );
|
||||||
|
interestIterator.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
CraftingGridCache gsc;
|
||||||
|
ICraftingWatcherHost myObject;
|
||||||
|
HashSet<IAEStack> myInterests = new HashSet();
|
||||||
|
|
||||||
|
public CraftingWatcher(CraftingGridCache cache, ICraftingWatcherHost host) {
|
||||||
|
gsc = cache;
|
||||||
|
myObject = host;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICraftingWatcherHost getHost()
|
||||||
|
{
|
||||||
|
return myObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean add(IAEStack e)
|
||||||
|
{
|
||||||
|
if ( myInterests.contains( e ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return myInterests.add( e.copy() ) && gsc.interestManager.put( e, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean addAll(Collection<? extends IAEStack> c)
|
||||||
|
{
|
||||||
|
boolean didChange = false;
|
||||||
|
|
||||||
|
for (IAEStack o : c)
|
||||||
|
didChange = add( o ) || didChange;
|
||||||
|
|
||||||
|
return didChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void clear()
|
||||||
|
{
|
||||||
|
Iterator<IAEStack> i = myInterests.iterator();
|
||||||
|
while (i.hasNext())
|
||||||
|
{
|
||||||
|
gsc.interestManager.remove( i.next(), this );
|
||||||
|
i.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean contains(Object o)
|
||||||
|
{
|
||||||
|
return myInterests.contains( o );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean containsAll(Collection<?> c)
|
||||||
|
{
|
||||||
|
return myInterests.containsAll( c );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEmpty()
|
||||||
|
{
|
||||||
|
return myInterests.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Iterator<IAEStack> iterator()
|
||||||
|
{
|
||||||
|
return new ItemWatcherIterator( this, myInterests.iterator() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean remove(Object o)
|
||||||
|
{
|
||||||
|
return myInterests.remove( o ) && gsc.interestManager.remove( (IAEStack) o, this );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeAll(Collection<?> c)
|
||||||
|
{
|
||||||
|
boolean didSomething = false;
|
||||||
|
for (Object o : c)
|
||||||
|
didSomething = remove( o ) || didSomething;
|
||||||
|
return didSomething;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean retainAll(Collection<?> c)
|
||||||
|
{
|
||||||
|
boolean changed = false;
|
||||||
|
Iterator<IAEStack> i = iterator();
|
||||||
|
|
||||||
|
while (i.hasNext())
|
||||||
|
{
|
||||||
|
if ( !c.contains( i.next() ) )
|
||||||
|
{
|
||||||
|
i.remove();
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size()
|
||||||
|
{
|
||||||
|
return myInterests.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object[] toArray()
|
||||||
|
{
|
||||||
|
return myInterests.toArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T> T[] toArray(T[] a)
|
||||||
|
{
|
||||||
|
return myInterests.toArray( a );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Vendored
+45
@@ -32,6 +32,8 @@ import appeng.api.networking.crafting.ICraftingPatternDetails;
|
|||||||
import appeng.api.networking.crafting.ICraftingProvider;
|
import appeng.api.networking.crafting.ICraftingProvider;
|
||||||
import appeng.api.networking.crafting.ICraftingProviderHelper;
|
import appeng.api.networking.crafting.ICraftingProviderHelper;
|
||||||
import appeng.api.networking.crafting.ICraftingRequester;
|
import appeng.api.networking.crafting.ICraftingRequester;
|
||||||
|
import appeng.api.networking.crafting.ICraftingWatcher;
|
||||||
|
import appeng.api.networking.crafting.ICraftingWatcherHost;
|
||||||
import appeng.api.networking.energy.IEnergyGrid;
|
import appeng.api.networking.energy.IEnergyGrid;
|
||||||
import appeng.api.networking.events.MENetworkCraftingCpuChange;
|
import appeng.api.networking.events.MENetworkCraftingCpuChange;
|
||||||
import appeng.api.networking.events.MENetworkCraftingPatternChange;
|
import appeng.api.networking.events.MENetworkCraftingPatternChange;
|
||||||
@@ -48,15 +50,20 @@ import appeng.api.storage.data.IItemList;
|
|||||||
import appeng.crafting.CraftingJob;
|
import appeng.crafting.CraftingJob;
|
||||||
import appeng.crafting.CraftingLink;
|
import appeng.crafting.CraftingLink;
|
||||||
import appeng.crafting.CraftingLinkNexus;
|
import appeng.crafting.CraftingLinkNexus;
|
||||||
|
import appeng.crafting.CraftingWatcher;
|
||||||
import appeng.me.cluster.implementations.CraftingCPUCluster;
|
import appeng.me.cluster.implementations.CraftingCPUCluster;
|
||||||
|
import appeng.me.helpers.GenericInterestManager;
|
||||||
|
import appeng.me.storage.ItemWatcher;
|
||||||
import appeng.tile.crafting.TileCraftingStorageTile;
|
import appeng.tile.crafting.TileCraftingStorageTile;
|
||||||
import appeng.tile.crafting.TileCraftingTile;
|
import appeng.tile.crafting.TileCraftingTile;
|
||||||
import appeng.util.ItemSorters;
|
import appeng.util.ItemSorters;
|
||||||
|
|
||||||
|
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;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.ImmutableSortedSet;
|
import com.google.common.collect.ImmutableSortedSet;
|
||||||
|
import com.google.common.collect.SetMultimap;
|
||||||
|
|
||||||
public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper, ICellProvider, IMEInventoryHandler
|
public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper, ICellProvider, IMEInventoryHandler
|
||||||
{
|
{
|
||||||
@@ -64,15 +71,20 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
HashSet<CraftingCPUCluster> cpuClusters = new HashSet();
|
HashSet<CraftingCPUCluster> cpuClusters = new HashSet();
|
||||||
HashSet<ICraftingProvider> providers = new HashSet();
|
HashSet<ICraftingProvider> providers = new HashSet();
|
||||||
|
|
||||||
|
private HashMap<IGridNode, ICraftingWatcher> watchers = new HashMap<IGridNode, ICraftingWatcher>();
|
||||||
|
|
||||||
IGrid grid;
|
IGrid grid;
|
||||||
IStorageGrid sg;
|
IStorageGrid sg;
|
||||||
IEnergyGrid eg;
|
IEnergyGrid eg;
|
||||||
|
|
||||||
HashMap<ICraftingPatternDetails, List<ICraftingMedium>> craftingMethods = new HashMap();
|
HashMap<ICraftingPatternDetails, List<ICraftingMedium>> craftingMethods = new HashMap();
|
||||||
HashMap<IAEItemStack, ImmutableSet<ICraftingPatternDetails>> craftableItems = new HashMap();
|
HashMap<IAEItemStack, ImmutableSet<ICraftingPatternDetails>> craftableItems = new HashMap();
|
||||||
|
HashSet<IAEItemStack> emitableItems = new HashSet();
|
||||||
HashMap<String, CraftingLinkNexus> links = new HashMap();
|
HashMap<String, CraftingLinkNexus> links = new HashMap();
|
||||||
|
|
||||||
boolean updateList = false;
|
boolean updateList = false;
|
||||||
|
final private SetMultimap<IAEStack, ItemWatcher> interests = HashMultimap.create();
|
||||||
|
final public GenericInterestManager interestManager = new GenericInterestManager( interests );
|
||||||
|
|
||||||
class ActiveCpuIterator implements Iterator<ICraftingCPU>
|
class ActiveCpuIterator implements Iterator<ICraftingCPU>
|
||||||
{
|
{
|
||||||
@@ -183,6 +195,16 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
@Override
|
@Override
|
||||||
public void removeNode(IGridNode gridNode, IGridHost machine)
|
public void removeNode(IGridNode gridNode, IGridHost machine)
|
||||||
{
|
{
|
||||||
|
if ( machine instanceof ICraftingWatcherHost )
|
||||||
|
{
|
||||||
|
ICraftingWatcher myWatcher = watchers.get( machine );
|
||||||
|
if ( myWatcher != null )
|
||||||
|
{
|
||||||
|
myWatcher.clear();
|
||||||
|
watchers.remove( machine );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( machine instanceof ICraftingRequester )
|
if ( machine instanceof ICraftingRequester )
|
||||||
{
|
{
|
||||||
Iterator<CraftingLinkNexus> nex = links.values().iterator();
|
Iterator<CraftingLinkNexus> nex = links.values().iterator();
|
||||||
@@ -206,6 +228,14 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
@Override
|
@Override
|
||||||
public void addNode(IGridNode gridNode, IGridHost machine)
|
public void addNode(IGridNode gridNode, IGridHost machine)
|
||||||
{
|
{
|
||||||
|
if ( machine instanceof ICraftingWatcherHost )
|
||||||
|
{
|
||||||
|
ICraftingWatcherHost swh = (ICraftingWatcherHost) machine;
|
||||||
|
CraftingWatcher iw = new CraftingWatcher( this, (ICraftingWatcherHost) swh );
|
||||||
|
watchers.put( gridNode, iw );
|
||||||
|
swh.updateWatcher( iw );
|
||||||
|
}
|
||||||
|
|
||||||
if ( machine instanceof ICraftingRequester )
|
if ( machine instanceof ICraftingRequester )
|
||||||
{
|
{
|
||||||
for (ICraftingLink l : ((ICraftingRequester) machine).getRequestedJobs())
|
for (ICraftingLink l : ((ICraftingRequester) machine).getRequestedJobs())
|
||||||
@@ -523,4 +553,19 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
|||||||
return cpuClusters.contains( cpu );
|
return cpuClusters.contains( cpu );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRequesting(IAEItemStack what)
|
||||||
|
{
|
||||||
|
for (CraftingCPUCluster c : cpuClusters)
|
||||||
|
if ( c.isMaking( what ) )
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canEmitFor(IAEItemStack what)
|
||||||
|
{
|
||||||
|
return emitableItems.contains( what );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+2
-2
@@ -27,7 +27,7 @@ import appeng.api.storage.data.IAEFluidStack;
|
|||||||
import appeng.api.storage.data.IAEItemStack;
|
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.helpers.StorageInterestManager;
|
import appeng.me.helpers.GenericInterestManager;
|
||||||
import appeng.me.storage.ItemWatcher;
|
import appeng.me.storage.ItemWatcher;
|
||||||
import appeng.me.storage.NetworkInventoryHandler;
|
import appeng.me.storage.NetworkInventoryHandler;
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@ public class GridStorageCache implements IStorageGrid
|
|||||||
{
|
{
|
||||||
|
|
||||||
final private SetMultimap<IAEStack, ItemWatcher> interests = HashMultimap.create();
|
final private SetMultimap<IAEStack, ItemWatcher> interests = HashMultimap.create();
|
||||||
final public StorageInterestManager interestManager = new StorageInterestManager( interests );
|
final public GenericInterestManager interestManager = new GenericInterestManager( interests );
|
||||||
|
|
||||||
final HashSet<ICellProvider> activeCellProviders = new HashSet();
|
final HashSet<ICellProvider> activeCellProviders = new HashSet();
|
||||||
final HashSet<ICellProvider> inactiveCellProviders = new HashSet();
|
final HashSet<ICellProvider> inactiveCellProviders = new HashSet();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.Iterator;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import net.minecraft.inventory.InventoryCrafting;
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -44,6 +45,7 @@ import appeng.core.AELog;
|
|||||||
import appeng.crafting.CraftBranchFailure;
|
import appeng.crafting.CraftBranchFailure;
|
||||||
import appeng.crafting.CraftingJob;
|
import appeng.crafting.CraftingJob;
|
||||||
import appeng.crafting.CraftingLink;
|
import appeng.crafting.CraftingLink;
|
||||||
|
import appeng.crafting.CraftingWatcher;
|
||||||
import appeng.crafting.MECraftingInventory;
|
import appeng.crafting.MECraftingInventory;
|
||||||
import appeng.me.cache.CraftingGridCache;
|
import appeng.me.cache.CraftingGridCache;
|
||||||
import appeng.me.cluster.IAECluster;
|
import appeng.me.cluster.IAECluster;
|
||||||
@@ -51,6 +53,9 @@ import appeng.tile.crafting.TileCraftingMonitorTile;
|
|||||||
import appeng.tile.crafting.TileCraftingTile;
|
import appeng.tile.crafting.TileCraftingTile;
|
||||||
import appeng.util.Platform;
|
import appeng.util.Platform;
|
||||||
import appeng.util.item.AEItemStack;
|
import appeng.util.item.AEItemStack;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
import cpw.mods.fml.common.FMLCommonHandler;
|
import cpw.mods.fml.common.FMLCommonHandler;
|
||||||
|
|
||||||
public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||||
@@ -269,6 +274,22 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void postCraftingStatusChange(IAEItemStack diff)
|
||||||
|
{
|
||||||
|
CraftingGridCache sg = getGrid().getCache( ICraftingGrid.class );
|
||||||
|
|
||||||
|
if ( sg.interestManager.containsKey( diff ) )
|
||||||
|
{
|
||||||
|
Set<CraftingWatcher> list = sg.interestManager.get( diff );
|
||||||
|
if ( !list.isEmpty() )
|
||||||
|
{
|
||||||
|
for (CraftingWatcher iw : list)
|
||||||
|
iw.getHost().onRequestChange( sg, diff );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public IAEStack injectItems(IAEStack input, Actionable type, BaseActionSource src)
|
public IAEStack injectItems(IAEStack input, Actionable type, BaseActionSource src)
|
||||||
{
|
{
|
||||||
if ( input instanceof IAEItemStack && type == Actionable.SIMULATE )// causes crafting to lock up?
|
if ( input instanceof IAEItemStack && type == Actionable.SIMULATE )// causes crafting to lock up?
|
||||||
@@ -325,11 +346,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
|||||||
{
|
{
|
||||||
is.decStackSize( input.getStackSize() );
|
is.decStackSize( input.getStackSize() );
|
||||||
markDirty();
|
markDirty();
|
||||||
|
postCraftingStatusChange( is );
|
||||||
// AELog.info( "Task: " + is.getStackSize() + " remaining : " + getRemainingTasks() +
|
|
||||||
// " remaining : "
|
|
||||||
// + (is.getStackSize() + getRemainingTasks()) + " total left : waiting: " + (waiting ? "yes" :
|
|
||||||
// "no") );
|
|
||||||
|
|
||||||
if ( finalOutput.equals( input ) )
|
if ( finalOutput.equals( input ) )
|
||||||
{
|
{
|
||||||
@@ -478,8 +495,14 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
|||||||
isComplete = true;
|
isComplete = true;
|
||||||
myLastLink = null;
|
myLastLink = null;
|
||||||
tasks.clear();
|
tasks.clear();
|
||||||
|
|
||||||
|
ImmutableSet<IAEItemStack> items = ImmutableSet.copyOf( waitingFor );
|
||||||
|
|
||||||
waitingFor.resetStatus();
|
waitingFor.resetStatus();
|
||||||
|
|
||||||
|
for (IAEItemStack is : items)
|
||||||
|
postCraftingStatusChange( is );
|
||||||
|
|
||||||
finalOutput = null;
|
finalOutput = null;
|
||||||
updateCPU();
|
updateCPU();
|
||||||
|
|
||||||
@@ -642,6 +665,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
|||||||
{
|
{
|
||||||
postChange( out, machineSrc );
|
postChange( out, machineSrc );
|
||||||
waitingFor.add( out.copy() );
|
waitingFor.add( out.copy() );
|
||||||
|
postCraftingStatusChange( out.copy() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( details.isCraftable() )
|
if ( details.isCraftable() )
|
||||||
@@ -1037,4 +1061,9 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
|||||||
return getCore().getActionableNode().isActive();
|
return getCore().getActionableNode().isActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMaking(IAEItemStack what)
|
||||||
|
{
|
||||||
|
return waitingFor.findPrecise( what ) != null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,30 +4,31 @@ import java.util.LinkedList;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
import appeng.me.storage.ItemWatcher;
|
|
||||||
|
|
||||||
import com.google.common.collect.SetMultimap;
|
import com.google.common.collect.SetMultimap;
|
||||||
|
|
||||||
public class StorageInterestManager {
|
public class GenericInterestManager<T>
|
||||||
|
{
|
||||||
|
|
||||||
|
class SavedTransactions
|
||||||
|
{
|
||||||
|
|
||||||
class SavedTransactions {
|
|
||||||
public final boolean put;
|
public final boolean put;
|
||||||
public final IAEStack stack;
|
public final IAEStack stack;
|
||||||
public final ItemWatcher iw;
|
public final T iw;
|
||||||
|
|
||||||
public SavedTransactions( boolean putOperation, IAEStack myStack, ItemWatcher watcher )
|
public SavedTransactions(boolean putOperation, IAEStack myStack, T watcher) {
|
||||||
{
|
|
||||||
put = putOperation;
|
put = putOperation;
|
||||||
stack = myStack;
|
stack = myStack;
|
||||||
iw = watcher;
|
iw = watcher;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final SetMultimap<IAEStack, ItemWatcher> container;
|
private final SetMultimap<IAEStack, T> container;
|
||||||
private LinkedList<SavedTransactions> transactions = null;
|
private LinkedList<SavedTransactions> transactions = null;
|
||||||
private int transDepth=0;
|
private int transDepth = 0;
|
||||||
|
|
||||||
public StorageInterestManager(SetMultimap<IAEStack, ItemWatcher> interests) {
|
public GenericInterestManager(SetMultimap<IAEStack, T> interests) {
|
||||||
container = interests;
|
container = interests;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,10 +46,10 @@ public class StorageInterestManager {
|
|||||||
|
|
||||||
if ( transDepth == 0 )
|
if ( transDepth == 0 )
|
||||||
{
|
{
|
||||||
LinkedList<SavedTransactions> myActions = transactions;
|
LinkedList<SavedTransactions> myActions = transactions;
|
||||||
transactions = null;
|
transactions = null;
|
||||||
|
|
||||||
for ( SavedTransactions t : myActions )
|
for (SavedTransactions t : myActions)
|
||||||
{
|
{
|
||||||
if ( t.put )
|
if ( t.put )
|
||||||
put( t.stack, t.iw );
|
put( t.stack, t.iw );
|
||||||
@@ -58,17 +59,17 @@ public class StorageInterestManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean containsKey( IAEStack stack )
|
public boolean containsKey(IAEStack stack)
|
||||||
{
|
{
|
||||||
return container.containsKey( stack );
|
return container.containsKey( stack );
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<ItemWatcher> get( IAEStack stack )
|
public Set<T> get(IAEStack stack)
|
||||||
{
|
{
|
||||||
return container.get( stack );
|
return container.get( stack );
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean put( IAEStack stack, ItemWatcher iw )
|
public boolean put(IAEStack stack, T iw)
|
||||||
{
|
{
|
||||||
if ( transactions != null )
|
if ( transactions != null )
|
||||||
{
|
{
|
||||||
@@ -79,9 +80,9 @@ public class StorageInterestManager {
|
|||||||
return container.put( stack, iw );
|
return container.put( stack, iw );
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean remove( IAEStack stack, ItemWatcher iw )
|
public boolean remove(IAEStack stack, T iw)
|
||||||
{
|
{
|
||||||
if ( transactions != null )
|
if ( transactions != null )
|
||||||
{
|
{
|
||||||
transactions.add( new SavedTransactions( true, stack, iw ) );
|
transactions.add( new SavedTransactions( true, stack, iw ) );
|
||||||
return true;
|
return true;
|
||||||
@@ -7,6 +7,7 @@ import net.minecraft.client.renderer.RenderBlocks;
|
|||||||
import net.minecraft.client.renderer.Tessellator;
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
@@ -19,6 +20,13 @@ import appeng.api.config.LevelType;
|
|||||||
import appeng.api.config.RedstoneMode;
|
import appeng.api.config.RedstoneMode;
|
||||||
import appeng.api.config.Settings;
|
import appeng.api.config.Settings;
|
||||||
import appeng.api.config.Upgrades;
|
import appeng.api.config.Upgrades;
|
||||||
|
import appeng.api.config.YesNo;
|
||||||
|
import appeng.api.networking.crafting.ICraftingGrid;
|
||||||
|
import appeng.api.networking.crafting.ICraftingPatternDetails;
|
||||||
|
import appeng.api.networking.crafting.ICraftingProvider;
|
||||||
|
import appeng.api.networking.crafting.ICraftingProviderHelper;
|
||||||
|
import appeng.api.networking.crafting.ICraftingWatcher;
|
||||||
|
import appeng.api.networking.crafting.ICraftingWatcherHost;
|
||||||
import appeng.api.networking.energy.IEnergyGrid;
|
import appeng.api.networking.energy.IEnergyGrid;
|
||||||
import appeng.api.networking.energy.IEnergyWatcher;
|
import appeng.api.networking.energy.IEnergyWatcher;
|
||||||
import appeng.api.networking.energy.IEnergyWatcherHost;
|
import appeng.api.networking.energy.IEnergyWatcherHost;
|
||||||
@@ -48,7 +56,8 @@ import appeng.util.Platform;
|
|||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
import cpw.mods.fml.relauncher.SideOnly;
|
import cpw.mods.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherHost, IStackWatcherHost, IMEMonitorHandlerReceiver<IAEItemStack>
|
public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherHost, IStackWatcherHost, ICraftingWatcherHost,
|
||||||
|
IMEMonitorHandlerReceiver<IAEItemStack>, ICraftingProvider
|
||||||
{
|
{
|
||||||
|
|
||||||
final int FLAG_ON = 4;
|
final int FLAG_ON = 4;
|
||||||
@@ -62,6 +71,7 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
|
|
||||||
IStackWatcher myWatcher;
|
IStackWatcher myWatcher;
|
||||||
IEnergyWatcher myEnergyWatcher;
|
IEnergyWatcher myEnergyWatcher;
|
||||||
|
ICraftingWatcher myCraftingWatcher;
|
||||||
|
|
||||||
public long getReportingValue()
|
public long getReportingValue()
|
||||||
{
|
{
|
||||||
@@ -102,13 +112,17 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
|
|
||||||
private void updateState()
|
private void updateState()
|
||||||
{
|
{
|
||||||
if ( prevState != isLevelEmitterOn() && proxy.isActive() )
|
if ( proxy.isActive() )
|
||||||
{
|
{
|
||||||
host.markForUpdate();
|
boolean isOn = isLevelEmitterOn();
|
||||||
TileEntity te = host.getTile();
|
if ( prevState != isOn )
|
||||||
prevState = isLevelEmitterOn();
|
{
|
||||||
Platform.notifyBlocksOfNeighbors( te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord );
|
host.markForUpdate();
|
||||||
Platform.notifyBlocksOfNeighbors( te.getWorldObj(), te.xCoord + side.offsetX, te.yCoord + side.offsetY, te.zCoord + side.offsetZ );
|
TileEntity te = host.getTile();
|
||||||
|
prevState = isOn;
|
||||||
|
Platform.notifyBlocksOfNeighbors( te.getWorldObj(), te.xCoord, te.yCoord, te.zCoord );
|
||||||
|
Platform.notifyBlocksOfNeighbors( te.getWorldObj(), te.xCoord + side.offsetX, te.yCoord + side.offsetY, te.zCoord + side.offsetZ );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,6 +150,13 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
return cf | (prevState ? FLAG_ON : 0);
|
return cf | (prevState ? FLAG_ON : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateWatcher(ICraftingWatcher newWatcher)
|
||||||
|
{
|
||||||
|
myCraftingWatcher = newWatcher;
|
||||||
|
confgiureWatchers();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateWatcher(IStackWatcher newWatcher)
|
public void updateWatcher(IStackWatcher newWatcher)
|
||||||
{
|
{
|
||||||
@@ -161,6 +182,17 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
if ( myEnergyWatcher != null )
|
if ( myEnergyWatcher != null )
|
||||||
myEnergyWatcher.clear();
|
myEnergyWatcher.clear();
|
||||||
|
|
||||||
|
if ( myCraftingWatcher != null )
|
||||||
|
myCraftingWatcher.clear();
|
||||||
|
|
||||||
|
if ( getInstalledUpgrades( Upgrades.CRAFTING ) > 0 )
|
||||||
|
{
|
||||||
|
if ( myCraftingWatcher != null )
|
||||||
|
myCraftingWatcher.add( myStack );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( getConfigManager().getSetting( Settings.LEVEL_TYPE ) == LevelType.ENERGY_LEVEL )
|
if ( getConfigManager().getSetting( Settings.LEVEL_TYPE ) == LevelType.ENERGY_LEVEL )
|
||||||
{
|
{
|
||||||
if ( myEnergyWatcher != null )
|
if ( myEnergyWatcher != null )
|
||||||
@@ -278,6 +310,12 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestChange(ICraftingGrid craftingGrid, IAEItemStack what)
|
||||||
|
{
|
||||||
|
updateState();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onThreshholdPass(IEnergyGrid energyGrid)
|
public void onThreshholdPass(IEnergyGrid energyGrid)
|
||||||
{
|
{
|
||||||
@@ -300,6 +338,7 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
getConfigManager().registerSetting( Settings.REDSTONE_EMITTER, RedstoneMode.HIGH_SIGNAL );
|
getConfigManager().registerSetting( Settings.REDSTONE_EMITTER, RedstoneMode.HIGH_SIGNAL );
|
||||||
getConfigManager().registerSetting( Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL );
|
getConfigManager().registerSetting( Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL );
|
||||||
getConfigManager().registerSetting( Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL );
|
getConfigManager().registerSetting( Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL );
|
||||||
|
getConfigManager().registerSetting( Settings.CRAFT_VIA_REDSTONE, YesNo.NO );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -499,6 +538,20 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
if ( Platform.isClient() )
|
if ( Platform.isClient() )
|
||||||
return (clientFlags & FLAG_ON) == FLAG_ON;
|
return (clientFlags & FLAG_ON) == FLAG_ON;
|
||||||
|
|
||||||
|
if ( getInstalledUpgrades( Upgrades.CRAFTING ) > 0 )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return proxy.getCrafting().isRequesting( config.getAEStackInSlot( 0 ) );
|
||||||
|
}
|
||||||
|
catch (GridAccessException e)
|
||||||
|
{
|
||||||
|
// :P
|
||||||
|
}
|
||||||
|
|
||||||
|
return prevState;
|
||||||
|
}
|
||||||
|
|
||||||
boolean flipState = getConfigManager().getSetting( Settings.REDSTONE_EMITTER ) == RedstoneMode.LOW_SIGNAL;
|
boolean flipState = getConfigManager().getSetting( Settings.REDSTONE_EMITTER ) == RedstoneMode.LOW_SIGNAL;
|
||||||
return flipState ? reportingValue >= lastReportedValue + 1 : reportingValue < lastReportedValue + 1;
|
return flipState ? reportingValue >= lastReportedValue + 1 : reportingValue < lastReportedValue + 1;
|
||||||
}
|
}
|
||||||
@@ -596,4 +649,29 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCrafting table)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isBusy()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void provideCrafting(ICraftingProviderHelper craftingTracker)
|
||||||
|
{
|
||||||
|
if ( getInstalledUpgrades( Upgrades.CRAFTING ) > 0 )
|
||||||
|
{
|
||||||
|
if ( settings.getSetting( Settings.CRAFT_VIA_REDSTONE ) == YesNo.YES )
|
||||||
|
{
|
||||||
|
IAEItemStack what = config.getAEStackInSlot( 0 );
|
||||||
|
if ( what != null )
|
||||||
|
craftingTracker.setEmitable( what );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user