Interface Crafting, and fixed crash with import bus gui.

This commit is contained in:
AlgorithmX2 2014-07-06 01:48:21 -05:00
parent 2625b788b1
commit e658c40381
8 changed files with 163 additions and 8 deletions

View file

@ -24,6 +24,7 @@ import appeng.container.slot.SlotRestrictedInput;
import appeng.container.slot.SlotRestrictedInput.PlaceableItemType;
import appeng.items.contents.NetworkToolViewer;
import appeng.items.tools.ToolNetworkTool;
import appeng.parts.automation.PartExportBus;
import appeng.util.Platform;
public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSlotHost
@ -196,8 +197,9 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
protected void loadSettingsFromHost(IConfigManager cm)
{
this.fzMode = (FuzzyMode) cm.getSetting( Settings.FUZZY_MODE );
this.cMode = (YesNo) cm.getSetting( Settings.CRAFT_ONLY );
this.rsMode = (RedstoneMode) cm.getSetting( Settings.REDSTONE_CONTROLLED );
if ( myte instanceof PartExportBus )
this.cMode = (YesNo) cm.getSetting( Settings.CRAFT_ONLY );
}
protected void standardDetectAndSendChanges()

View file

@ -24,6 +24,7 @@ import appeng.api.implementations.tiles.ICraftingMachine;
import appeng.api.implementations.tiles.ISegmentedInventory;
import appeng.api.networking.GridFlags;
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;
@ -62,6 +63,9 @@ import appeng.util.Platform;
import appeng.util.inv.AdaptorIInventory;
import appeng.util.inv.IInventoryDestination;
import appeng.util.inv.WrapperInvSlot;
import appeng.util.item.AEItemStack;
import com.google.common.collect.ImmutableSet;
public class DualityInterface implements IGridTickable, ISegmentedInventory, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory,
IConfigureableObject, IConfigManagerHost, ICraftingProvider, IUpgradeableHost
@ -69,6 +73,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
final int sides[] = new int[] { 0, 1, 2, 3, 4, 5, 6, 7 };
final IAEItemStack requireWork[] = new IAEItemStack[] { null, null, null, null, null, null, null, null };
final MultiCraftingTracker craftingTracker;
boolean hasConfig = false;
AENetworkProxy gridProxy;
@ -186,6 +191,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
cm.registerSetting( Settings.BLOCK, YesNo.NO );
iHost = ih;
craftingTracker = new MultiCraftingTracker( iHost, 9 );
mySrc = fluids.changeSource = items.changeSource = new MachineSource( iHost );
}
@ -240,6 +246,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
config.writeToNBT( data, "config" );
patterns.writeToNBT( data, "patterns" );
storage.writeToNBT( data, "storage" );
craftingTracker.writeToNBT( data );
NBTTagList waitingToSend = new NBTTagList();
if ( this.waitingToSend != null )
@ -271,6 +278,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
}
}
craftingTracker.readFromNBT( data );
config.readFromNBT( data, "config" );
patterns.readFromNBT( data, "patterns" );
storage.readFromNBT( data, "storage" );
@ -388,7 +396,9 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
destination = gridProxy.getStorage().getItemInventory();
IEnergySource src = gridProxy.getEnergy();
if ( itemStack.getStackSize() > 0 )
if ( craftingTracker.isBusy( x ) )
changed = handleCrafting( x, adaptor, itemStack ) || changed;
else if ( itemStack.getStackSize() > 0 )
{
// make sure strange things didn't happen...
if ( adaptor.simulateAdd( itemStack.getItemStack() ) != null )
@ -405,6 +415,8 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
if ( issue != null )
throw new RuntimeException( "bad attempt at managing inventory. ( addItems )" );
}
else
changed = handleCrafting( x, adaptor, itemStack ) || changed;
}
else if ( itemStack.getStackSize() < 0 )
{
@ -451,6 +463,24 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
return changed;
}
private boolean handleCrafting(int x, InventoryAdaptor d, IAEItemStack itemStack)
{
try
{
if ( getInstalledUpgrades( Upgrades.CRAFTING ) > 0 )
{
return craftingTracker.handleCrafting( x, itemStack.getStackSize(), itemStack, d, getTile().getWorldObj(), gridProxy.getGrid(),
gridProxy.getCrafting(), mySrc );
}
}
catch (GridAccessException e)
{
// :P
}
return false;
}
public IInventory getConfig()
{
return config;
@ -652,8 +682,7 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
private void cancelCrafting()
{
// TODO Auto-generated method stub
craftingTracker.cancel();
}
public IStorageMonitorable getMonitorable(ForgeDirection side, BaseActionSource src, IStorageMonitorable myInterface)
@ -819,6 +848,10 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
drops.add( is );
}
for (ItemStack is : upgrades)
if ( is != null )
drops.add( is );
for (ItemStack is : storage)
if ( is != null )
drops.add( is );
@ -858,4 +891,35 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt
return null;
}
public ImmutableSet<ICraftingLink> getRequestedJobs()
{
return craftingTracker.getRequestedJobs();
}
public IAEItemStack injectCratedItems(ICraftingLink link, IAEItemStack aquired, Actionable mode)
{
int x = craftingTracker.getSlot( link );
if ( aquired != null && x >= 0 && x <= requireWork.length )
{
slotInv.setSlot( x );
if ( mode == Actionable.SIMULATE )
return AEItemStack.create( adaptor.simulateAdd( aquired.getItemStack() ) );
else
{
IAEItemStack is = AEItemStack.create( adaptor.addItems( aquired.getItemStack() ) );
updatePlan( x );
return is;
}
}
return aquired;
}
public void jobStateChange(ICraftingLink link)
{
craftingTracker.jobStateChange( link );
}
}

View file

@ -6,9 +6,10 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.implementations.IUpgradeableHost;
import appeng.api.networking.crafting.ICraftingProvider;
import appeng.api.networking.crafting.ICraftingRequester;
import appeng.api.networking.security.IActionHost;
public interface IInterfaceHost extends IActionHost, ICraftingProvider, IUpgradeableHost
public interface IInterfaceHost extends IActionHost, ICraftingProvider, IUpgradeableHost, ICraftingRequester
{
DualityInterface getInterfaceDuality();

View file

@ -184,4 +184,48 @@ public class MultiCraftingTracker
}
}
}
public int getSlot(ICraftingLink link)
{
if ( links != null )
{
for (int x = 0; x < links.length; x++)
{
if ( links[x] == link )
return x;
}
}
return -1;
}
public void cancel()
{
if ( links != null )
{
for (ICraftingLink l : links)
{
if ( l != null )
l.cancel();
}
links = null;
}
if ( jobs != null )
{
for (Future<ICraftingJob> l : jobs)
{
if ( l != null )
l.cancel( true );
}
jobs = null;
}
}
public boolean isBusy(int slot)
{
return getLink( slot ) != null || getJob( slot ) != null;
}
}

View file

@ -727,7 +727,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
{
tasks.clear();
inventory.getItemList().resetStatus();
AELog.error( e );
// AELog.error( e );
}
return null;

View file

@ -46,8 +46,8 @@ import cpw.mods.fml.relauncher.SideOnly;
public class PartExportBus extends PartSharedItemBus implements IGridTickable, ICraftingRequester
{
MultiCraftingTracker cratingTracker = new MultiCraftingTracker( this, 9 );
BaseActionSource mySrc;
final MultiCraftingTracker cratingTracker = new MultiCraftingTracker( this, 9 );
final BaseActionSource mySrc;
public PartExportBus(ItemStack is) {
super( PartExportBus.class, is );

View file

@ -14,10 +14,12 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.Vec3;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.Actionable;
import appeng.api.config.Upgrades;
import appeng.api.implementations.tiles.ISegmentedInventory;
import appeng.api.implementations.tiles.ITileStorageMonitorable;
import appeng.api.networking.IGridNode;
import appeng.api.networking.crafting.ICraftingLink;
import appeng.api.networking.crafting.ICraftingPatternDetails;
import appeng.api.networking.crafting.ICraftingProviderHelper;
import appeng.api.networking.events.MENetworkChannelsChanged;
@ -43,6 +45,9 @@ import appeng.tile.inventory.IAEAppEngInventory;
import appeng.tile.inventory.InvOperation;
import appeng.util.Platform;
import appeng.util.inv.IInventoryDestination;
import com.google.common.collect.ImmutableSet;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -361,4 +366,22 @@ public class PartInterface extends PartBasicState implements IGridTickable, ISeg
return duality.getInstalledUpgrades( u );
}
@Override
public ImmutableSet<ICraftingLink> getRequestedJobs()
{
return duality.getRequestedJobs();
}
@Override
public IAEItemStack injectCratedItems(ICraftingLink link, IAEItemStack items, Actionable mode)
{
return duality.injectCratedItems( link, items, mode );
}
@Override
public void jobStateChange(ICraftingLink link)
{
duality.jobStateChange( link );
}
}

View file

@ -10,10 +10,12 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import appeng.api.config.Actionable;
import appeng.api.config.Upgrades;
import appeng.api.implementations.tiles.ISegmentedInventory;
import appeng.api.implementations.tiles.ITileStorageMonitorable;
import appeng.api.networking.IGridNode;
import appeng.api.networking.crafting.ICraftingLink;
import appeng.api.networking.crafting.ICraftingPatternDetails;
import appeng.api.networking.crafting.ICraftingProviderHelper;
import appeng.api.networking.events.MENetworkChannelsChanged;
@ -40,6 +42,8 @@ import appeng.tile.inventory.InvOperation;
import appeng.util.Platform;
import appeng.util.inv.IInventoryDestination;
import com.google.common.collect.ImmutableSet;
public class TileInterface extends AENetworkInvTile implements IGridTickable, ISegmentedInventory, ITileStorageMonitorable, IStorageMonitorable,
IInventoryDestination, IInterfaceHost, IConfigureableObject
{
@ -262,4 +266,21 @@ public class TileInterface extends AENetworkInvTile implements IGridTickable, IS
return duality.getInstalledUpgrades( u );
}
@Override
public ImmutableSet<ICraftingLink> getRequestedJobs()
{
return duality.getRequestedJobs();
}
@Override
public IAEItemStack injectCratedItems(ICraftingLink link, IAEItemStack items, Actionable mode)
{
return duality.injectCratedItems( link, items, mode );
}
@Override
public void jobStateChange(ICraftingLink link)
{
duality.jobStateChange( link );
}
}