From f031972fcd111eb96bb4707fb34904ecf2347950 Mon Sep 17 00:00:00 2001 From: AlgorithmX2 Date: Thu, 8 May 2014 23:10:12 -0500 Subject: [PATCH] Started working on crafting infrastructure and C-Cpus --- block/crafting/BlockCraftingMonitor.java | 2 + block/crafting/BlockCraftingStorage.java | 2 + block/crafting/BlockCraftingUnit.java | 2 + container/implementations/ContainerMAC.java | 2 +- container/slot/SlotRestrictedInput.java | 2 +- helpers/DualityInterface.java | 183 +++++++++++++++++- helpers/IInterfaceHost.java | 8 +- helpers/PatternHelper.java | 29 ++- items/misc/ItemEncodedPattern.java | 2 +- me/cache/CraftingCache.java | 65 +++++++ .../CraftingCPUCalculator.java | 74 +++++++ .../implementations/CraftingCPUCluster.java | 45 +++++ parts/misc/PartInterface.java | 23 +++ tile/crafting/TileCraftingTile.java | 31 +++ tile/crafting/TileMolecularAssembler.java | 4 +- tile/misc/TileInterface.java | 23 +++ 16 files changed, 476 insertions(+), 21 deletions(-) create mode 100644 me/cache/CraftingCache.java create mode 100644 me/cluster/implementations/CraftingCPUCalculator.java create mode 100644 me/cluster/implementations/CraftingCPUCluster.java create mode 100644 tile/crafting/TileCraftingTile.java diff --git a/block/crafting/BlockCraftingMonitor.java b/block/crafting/BlockCraftingMonitor.java index f0e7d086..65a88cc6 100644 --- a/block/crafting/BlockCraftingMonitor.java +++ b/block/crafting/BlockCraftingMonitor.java @@ -5,6 +5,7 @@ import java.util.EnumSet; import net.minecraft.block.material.Material; import appeng.block.AEBaseBlock; import appeng.core.features.AEFeature; +import appeng.tile.crafting.TileCraftingTile; public class BlockCraftingMonitor extends AEBaseBlock { @@ -12,6 +13,7 @@ public class BlockCraftingMonitor extends AEBaseBlock public BlockCraftingMonitor() { super( BlockCraftingMonitor.class, Material.iron ); setfeature( EnumSet.of( AEFeature.Crafting ) ); + setTileEntiy( TileCraftingTile.class ); } } diff --git a/block/crafting/BlockCraftingStorage.java b/block/crafting/BlockCraftingStorage.java index 72c70083..67538387 100644 --- a/block/crafting/BlockCraftingStorage.java +++ b/block/crafting/BlockCraftingStorage.java @@ -5,6 +5,7 @@ import java.util.EnumSet; import net.minecraft.block.material.Material; import appeng.block.AEBaseBlock; import appeng.core.features.AEFeature; +import appeng.tile.crafting.TileCraftingTile; public class BlockCraftingStorage extends AEBaseBlock { @@ -12,6 +13,7 @@ public class BlockCraftingStorage extends AEBaseBlock public BlockCraftingStorage() { super( BlockCraftingStorage.class, Material.iron ); setfeature( EnumSet.of( AEFeature.Crafting ) ); + setTileEntiy( TileCraftingTile.class ); } } diff --git a/block/crafting/BlockCraftingUnit.java b/block/crafting/BlockCraftingUnit.java index decba098..477acfa2 100644 --- a/block/crafting/BlockCraftingUnit.java +++ b/block/crafting/BlockCraftingUnit.java @@ -5,6 +5,7 @@ import java.util.EnumSet; import net.minecraft.block.material.Material; import appeng.block.AEBaseBlock; import appeng.core.features.AEFeature; +import appeng.tile.crafting.TileCraftingTile; public class BlockCraftingUnit extends AEBaseBlock { @@ -12,6 +13,7 @@ public class BlockCraftingUnit extends AEBaseBlock public BlockCraftingUnit() { super( BlockCraftingUnit.class, Material.iron ); setfeature( EnumSet.of( AEFeature.Crafting ) ); + setTileEntiy( TileCraftingTile.class ); } } diff --git a/container/implementations/ContainerMAC.java b/container/implementations/ContainerMAC.java index e64fb7ef..6b6c29c0 100644 --- a/container/implementations/ContainerMAC.java +++ b/container/implementations/ContainerMAC.java @@ -7,7 +7,7 @@ import net.minecraft.world.World; import appeng.api.config.RedstoneMode; import appeng.api.config.SecurityPermissions; import appeng.api.config.Settings; -import appeng.api.crafting.ICraftingPatternDetails; +import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.container.guisync.GuiSync; import appeng.container.slot.SlotMACPattern; import appeng.container.slot.SlotOutput; diff --git a/container/slot/SlotRestrictedInput.java b/container/slot/SlotRestrictedInput.java index 927a0fef..21edd49f 100644 --- a/container/slot/SlotRestrictedInput.java +++ b/container/slot/SlotRestrictedInput.java @@ -10,13 +10,13 @@ import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; import appeng.api.AEApi; import appeng.api.IAppEngApi; -import appeng.api.crafting.ICraftingPatternDetails; import appeng.api.features.INetworkEncodable; import appeng.api.implementations.ICraftingPatternItem; import appeng.api.implementations.items.IBiometricCard; import appeng.api.implementations.items.ISpatialStorageCell; import appeng.api.implementations.items.IStorageComponent; import appeng.api.implementations.items.IUpgradeModule; +import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.api.storage.ICellWorkbenchItem; import appeng.items.misc.ItemEncodedPattern; import appeng.recipes.handlers.Inscribe; diff --git a/helpers/DualityInterface.java b/helpers/DualityInterface.java index 8503de48..04006cb9 100644 --- a/helpers/DualityInterface.java +++ b/helpers/DualityInterface.java @@ -1,16 +1,30 @@ package appeng.helpers; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import appeng.api.AEApi; import appeng.api.config.Actionable; +import appeng.api.implementations.ICraftingPatternItem; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.networking.GridFlags; import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingMedium; +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.events.MECraftingPatternUpdate; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.security.MachineSource; import appeng.api.networking.ticking.IGridTickable; @@ -45,7 +59,7 @@ import appeng.util.inv.IInventoryDestination; import appeng.util.inv.WrapperInvSlot; public class DualityInterface implements IGridTickable, ISegmentedInventory, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory, - IConfigureableObject, IConfigManagerHost + IConfigureableObject, IConfigManagerHost, ICraftingProvider { final int sides[] = new int[] { 0, 1, 2, 3, 4, 5, 6, 7 }; @@ -57,6 +71,45 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt BaseActionSource mySrc; ConfigManager cm = new ConfigManager( this ); + List craftingList = null; + List waitingToSend = null; + + public boolean hasItemsToSend() + { + return waitingToSend != null && !waitingToSend.isEmpty(); + } + + public void addToCraftingList(ItemStack is) + { + if ( is == null ) + return; + + if ( is.getItem() instanceof ICraftingPatternItem ) + { + ICraftingPatternItem cpi = (ICraftingPatternItem) is.getItem(); + ICraftingPatternDetails details = cpi.getPatternForItem( is, iHost.getTileEntity().getWorldObj() ); + + if ( details != null ) + { + if ( craftingList == null ) + craftingList = new LinkedList(); + + craftingList.add( details ); + } + } + } + + public void addToSendList(ItemStack is) + { + if ( is == null ) + return; + + if ( waitingToSend == null ) + waitingToSend = new LinkedList(); + + waitingToSend.add( is ); + } + public DualityInterface(AENetworkProxy prox, IInterfaceHost ih) { gridProxy = prox; gridProxy.setFlags( GridFlags.REQUIRE_CHANNEL ); @@ -120,10 +173,37 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt config.writeToNBT( data, "config" ); patterns.writeToNBT( data, "patterns" ); storage.writeToNBT( data, "storage" ); + + NBTTagList waitingToSend = new NBTTagList(); + if ( this.waitingToSend != null ) + { + for (ItemStack is : this.waitingToSend) + { + NBTTagCompound item = new NBTTagCompound(); + is.writeToNBT( item ); + waitingToSend.appendTag( item ); + } + } + data.setTag( "waitingToSend", waitingToSend ); } public void readFromNBT(NBTTagCompound data) { + this.waitingToSend = null; + NBTTagList waitingList = data.getTagList( "waitingToSend", 10 ); + if ( waitingList != null ) + { + for (int x = 0; x < waitingList.tagCount(); x++) + { + NBTTagCompound c = waitingList.getCompoundTagAt( x ); + if ( c != null ) + { + ItemStack is = ItemStack.loadItemStackFromNBT( c ); + addToSendList( is ); + } + } + } + config.readFromNBT( data, "config" ); patterns.readFromNBT( data, "patterns" ); storage.readFromNBT( data, "storage" ); @@ -349,7 +429,14 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt readConfig(); else if ( inv == patterns ) { - + try + { + gridProxy.getGrid().postEvent( new MECraftingPatternUpdate( this ) ); + } + catch (GridAccessException e) + { + // :P + } } else if ( inv == storage && slot >= 0 ) { @@ -378,8 +465,8 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt public boolean hasWorkToDo() { - return requireWork[0] != null || requireWork[1] != null || requireWork[2] != null || requireWork[3] != null || requireWork[4] != null - || requireWork[5] != null || requireWork[6] != null || requireWork[7] != null; + return hasItemsToSend() || requireWork[0] != null || requireWork[1] != null || requireWork[2] != null || requireWork[3] != null + || requireWork[4] != null || requireWork[5] != null || requireWork[6] != null || requireWork[7] != null; } private boolean updateStorage() @@ -501,6 +588,92 @@ public class DualityInterface implements IGridTickable, ISegmentedInventory, ISt return null; } }; - }; + } + + @Override + public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCrafting table, ForgeDirection where) + { + if ( hasItemsToSend() ) + return false; + + TileEntity tile = iHost.getTileEntity(); + World w = tile.getWorldObj(); + + EnumSet possibleDirections = iHost.getTargets(); + for (ForgeDirection s : possibleDirections) + { + TileEntity te = w.getTileEntity( tile.xCoord + s.offsetX, tile.yCoord + s.offsetY, tile.zCoord + s.offsetZ ); + if ( te instanceof ICraftingMedium ) + { + if ( ((ICraftingMedium) te).pushPattern( patternDetails, table, s.getOpposite() ) ) + return true; + } + else + { + InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() ); + if ( ad != null ) + { + possibleDirections.remove( s ); + + for (int x = 0; x < table.getSizeInventory(); x++) + { + ItemStack is = table.getStackInSlot( x ); + if ( is != null ) + { + addToSendList( ad.addItems( is ) ); + } + } + + pushItemsOut( possibleDirections ); + return true; + } + } + } + + return false; + } + + private void pushItemsOut(EnumSet possibleDirections) + { + if ( hasItemsToSend() ) + return; + + TileEntity tile = iHost.getTileEntity(); + World w = tile.getWorldObj(); + + Iterator i = waitingToSend.iterator(); + while (i.hasNext()) + { + ItemStack whatToSend = i.next(); + + for (ForgeDirection s : possibleDirections) + { + TileEntity te = w.getTileEntity( tile.xCoord + s.offsetX, tile.yCoord + s.offsetY, tile.zCoord + s.offsetZ ); + + InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() ); + if ( ad != null ) + { + whatToSend = ad.addItems( whatToSend ); + if ( whatToSend == null ) + break; + } + } + + if ( whatToSend == null ) + i.remove(); + else + whatToSend.stackSize = whatToSend.stackSize; + } + + if ( waitingToSend.isEmpty() ) + waitingToSend = null; + } + + @Override + public void provideCrafting(ICraftingProviderHelper craftingTracker) + { + for (ICraftingPatternDetails details : craftingList) + craftingTracker.addCraftingOption( details ); + } } diff --git a/helpers/IInterfaceHost.java b/helpers/IInterfaceHost.java index 2d1c22a0..0924296a 100644 --- a/helpers/IInterfaceHost.java +++ b/helpers/IInterfaceHost.java @@ -1,13 +1,19 @@ package appeng.helpers; +import java.util.EnumSet; + import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import appeng.api.networking.crafting.ICraftingProvider; import appeng.api.networking.security.IActionHost; -public interface IInterfaceHost extends IActionHost +public interface IInterfaceHost extends IActionHost, ICraftingProvider { DualityInterface getInterfaceDuality(); + EnumSet getTargets(); + TileEntity getTileEntity(); void saveChanges(); diff --git a/helpers/PatternHelper.java b/helpers/PatternHelper.java index 3a75dcdd..08e9cbfa 100644 --- a/helpers/PatternHelper.java +++ b/helpers/PatternHelper.java @@ -13,7 +13,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import appeng.api.AEApi; -import appeng.api.crafting.ICraftingPatternDetails; +import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.api.storage.data.IAEItemStack; import appeng.container.ContainerNull; import appeng.util.Platform; @@ -21,16 +21,18 @@ import appeng.util.Platform; public class PatternHelper implements ICraftingPatternDetails { - InventoryCrafting crafting = new InventoryCrafting( new ContainerNull(), 3, 3 ); - InventoryCrafting testFrame = new InventoryCrafting( new ContainerNull(), 3, 3 ); + final ItemStack patternItem; - ItemStack correctOutput; - IRecipe standardRecipe; + final InventoryCrafting crafting = new InventoryCrafting( new ContainerNull(), 3, 3 ); + final InventoryCrafting testFrame = new InventoryCrafting( new ContainerNull(), 3, 3 ); - IAEItemStack inputs[]; - IAEItemStack outputs[]; + final ItemStack correctOutput; + final IRecipe standardRecipe; - boolean isCrafting = false; + final IAEItemStack inputs[]; + final IAEItemStack outputs[]; + + final boolean isCrafting; class TestLookup { @@ -75,7 +77,7 @@ public class PatternHelper implements ICraftingPatternDetails private void markItemAs(int slotIndex, ItemStack i, TestStatus b) { - if ( b == TestStatus.TEST ||i.hasTagCompound()) + if ( b == TestStatus.TEST || i.hasTagCompound() ) return; (b == TestStatus.ACCEPT ? passCache : failCache).add( new TestLookup( slotIndex, i ) ); @@ -105,11 +107,12 @@ public class PatternHelper implements ICraftingPatternDetails NBTTagCompound encodedValue = is.getTagCompound(); if ( encodedValue == null ) - return; + throw new RuntimeException( "No pattern here!" ); NBTTagList inTag = encodedValue.getTagList( "in", 10 ); NBTTagList outTag = encodedValue.getTagList( "out", 10 ); isCrafting = encodedValue.getBoolean( "crafting" ); + patternItem = is; if ( isCrafting == false ) throw new RuntimeException( "Only crafting recipes supported." ); @@ -243,4 +246,10 @@ public class PatternHelper implements ICraftingPatternDetails return outputs; } + @Override + public ItemStack getPattern() + { + return patternItem; + } + } diff --git a/items/misc/ItemEncodedPattern.java b/items/misc/ItemEncodedPattern.java index 6da2a308..d2fbb92e 100644 --- a/items/misc/ItemEncodedPattern.java +++ b/items/misc/ItemEncodedPattern.java @@ -9,8 +9,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; -import appeng.api.crafting.ICraftingPatternDetails; import appeng.api.implementations.ICraftingPatternItem; +import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.client.render.items.ItemEncodedPatternRenderer; import appeng.core.features.AEFeature; import appeng.core.localization.GuiText; diff --git a/me/cache/CraftingCache.java b/me/cache/CraftingCache.java new file mode 100644 index 00000000..aaf6365e --- /dev/null +++ b/me/cache/CraftingCache.java @@ -0,0 +1,65 @@ +package appeng.me.cache; + +import java.util.HashSet; + +import appeng.api.networking.IGridCache; +import appeng.api.networking.IGridHost; +import appeng.api.networking.IGridNode; +import appeng.api.networking.IGridStorage; +import appeng.api.networking.crafting.ICraftingProvider; +import appeng.me.cluster.implementations.CraftingCPUCluster; + +public class CraftingCache implements IGridCache +{ + + HashSet cpuClusters = new HashSet(); + HashSet providers = new HashSet(); + + @Override + public void onUpdateTick() + { + + } + + @Override + public void removeNode(IGridNode gridNode, IGridHost machine) + { + if ( machine instanceof ICraftingProvider ) + providers.remove( machine ); + + updatePatterns(); + } + + @Override + public void addNode(IGridNode gridNode, IGridHost machine) + { + if ( machine instanceof ICraftingProvider ) + providers.add( (ICraftingProvider) machine ); + + updatePatterns(); + } + + private void updatePatterns() + { + // TODO Auto-generated method stub + + } + + @Override + public void onSplit(IGridStorage destinationStorage) + { // nothing! + } + + @Override + public void onJoin(IGridStorage sourceStorage) + { + // nothing! + } + + @Override + public void populateGridStorage(IGridStorage destinationStorage) + { + // nothing! + } + +} diff --git a/me/cluster/implementations/CraftingCPUCalculator.java b/me/cluster/implementations/CraftingCPUCalculator.java new file mode 100644 index 00000000..c4367234 --- /dev/null +++ b/me/cluster/implementations/CraftingCPUCalculator.java @@ -0,0 +1,74 @@ +package appeng.me.cluster.implementations; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import appeng.api.util.WorldCoord; +import appeng.me.cluster.IAECluster; +import appeng.me.cluster.IAEMultiBlock; +import appeng.me.cluster.MBCalculator; +import appeng.tile.crafting.TileCraftingTile; +import appeng.tile.qnb.TileQuantumBridge; + +public class CraftingCPUCalculator extends MBCalculator +{ + + TileCraftingTile tqb; + + public CraftingCPUCalculator(IAEMultiBlock t) { + super( t ); + tqb = (TileCraftingTile) t; + } + + @Override + public boolean isValidTile(TileEntity te) + { + return te instanceof TileQuantumBridge; + } + + @Override + public boolean checkMultiblockScale(WorldCoord min, WorldCoord max) + { + return true; + } + + @Override + public void updateTiles(IAECluster cl, World w, WorldCoord min, WorldCoord max) + { + + } + + @Override + public IAECluster createCluster(World w, WorldCoord min, WorldCoord max) + { + return new CraftingCPUCluster( min, max ); + } + + @Override + public void disconnect() + { + tqb.disconnect(); + } + + @Override + public boolean verifyInternalStructure(World w, WorldCoord min, WorldCoord max) + { + + for (int x = min.x; x <= max.x; x++) + { + for (int y = min.y; y <= max.y; y++) + { + for (int z = min.z; z <= max.z; z++) + { + IAEMultiBlock te = (IAEMultiBlock) w.getTileEntity( x, y, z ); + + if ( !te.isValid() ) + return false; + + } + } + } + + return true; + } + +} diff --git a/me/cluster/implementations/CraftingCPUCluster.java b/me/cluster/implementations/CraftingCPUCluster.java new file mode 100644 index 00000000..2fc0200e --- /dev/null +++ b/me/cluster/implementations/CraftingCPUCluster.java @@ -0,0 +1,45 @@ +package appeng.me.cluster.implementations; + +import java.util.Iterator; +import java.util.LinkedList; + +import appeng.api.networking.IGridHost; +import appeng.api.util.WorldCoord; +import appeng.me.cluster.IAECluster; + +public class CraftingCPUCluster implements IAECluster +{ + + public WorldCoord min; + public WorldCoord max; + public boolean isDestroyed = false; + + private LinkedList tiles = new LinkedList(); + + @Override + public Iterator getTiles() + { + return tiles.iterator(); + } + + public CraftingCPUCluster(WorldCoord _min, WorldCoord _max) { + min = _min; + max = _max; + } + + @Override + public void updateStatus(boolean updateGrid) + { + + } + + @Override + public void destroy() + { + if ( isDestroyed ) + return; + isDestroyed = true; + + } + +} diff --git a/parts/misc/PartInterface.java b/parts/misc/PartInterface.java index 3fc20e63..14236ce9 100644 --- a/parts/misc/PartInterface.java +++ b/parts/misc/PartInterface.java @@ -1,11 +1,13 @@ package appeng.parts.misc; +import java.util.EnumSet; import java.util.List; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; +import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -14,6 +16,8 @@ import net.minecraftforge.common.util.ForgeDirection; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.implementations.tiles.ITileStorageMonitorable; import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingPatternDetails; +import appeng.api.networking.crafting.ICraftingProviderHelper; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.ticking.IGridTickable; import appeng.api.networking.ticking.TickRateModulation; @@ -313,4 +317,23 @@ public class PartInterface extends PartBasicState implements IGridTickable, ISeg { return duality.getMonitorable( side, src, this ); } + + @Override + public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCrafting table, ForgeDirection where) + { + return duality.pushPattern( patternDetails, table, where ); + } + + @Override + public void provideCrafting(ICraftingProviderHelper craftingTracker) + { + duality.provideCrafting( craftingTracker ); + } + + @Override + public EnumSet getTargets() + { + return EnumSet.of( side ); + } + } diff --git a/tile/crafting/TileCraftingTile.java b/tile/crafting/TileCraftingTile.java new file mode 100644 index 00000000..c8867a38 --- /dev/null +++ b/tile/crafting/TileCraftingTile.java @@ -0,0 +1,31 @@ +package appeng.tile.crafting; + +import appeng.me.cluster.IAECluster; +import appeng.me.cluster.IAEMultiBlock; +import appeng.tile.AEBaseTile; + +public class TileCraftingTile extends AEBaseTile implements IAEMultiBlock +{ + + @Override + public void disconnect() + { + // TODO Auto-generated method stub + + } + + @Override + public IAECluster getCluster() + { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean isValid() + { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/tile/crafting/TileMolecularAssembler.java b/tile/crafting/TileMolecularAssembler.java index c467fb1e..dd79c045 100644 --- a/tile/crafting/TileMolecularAssembler.java +++ b/tile/crafting/TileMolecularAssembler.java @@ -14,10 +14,10 @@ import appeng.api.config.PowerMultiplier; import appeng.api.config.RedstoneMode; import appeng.api.config.Settings; import appeng.api.config.Upgrades; -import appeng.api.crafting.ICraftingMedium; -import appeng.api.crafting.ICraftingPatternDetails; import appeng.api.implementations.IUpgradeableHost; import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingMedium; +import appeng.api.networking.crafting.ICraftingPatternDetails; import appeng.api.networking.ticking.IGridTickable; import appeng.api.networking.ticking.TickRateModulation; import appeng.api.networking.ticking.TickingRequest; diff --git a/tile/misc/TileInterface.java b/tile/misc/TileInterface.java index a54c2f63..99ecb9b8 100644 --- a/tile/misc/TileInterface.java +++ b/tile/misc/TileInterface.java @@ -3,6 +3,7 @@ package appeng.tile.misc; import java.util.EnumSet; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; @@ -10,6 +11,8 @@ import net.minecraftforge.common.util.ForgeDirection; import appeng.api.implementations.tiles.ISegmentedInventory; import appeng.api.implementations.tiles.ITileStorageMonitorable; import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingPatternDetails; +import appeng.api.networking.crafting.ICraftingProviderHelper; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.ticking.IGridTickable; import appeng.api.networking.ticking.TickRateModulation; @@ -203,4 +206,24 @@ public class TileInterface extends AENetworkInvTile implements IGridTickable, IS return duality.getConfigManager(); } + @Override + public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCrafting table, ForgeDirection where) + { + return duality.pushPattern( patternDetails, table, where ); + } + + @Override + public void provideCrafting(ICraftingProviderHelper craftingTracker) + { + duality.provideCrafting( craftingTracker ); + } + + @Override + public EnumSet getTargets() + { + if ( pointAt == null || pointAt == ForgeDirection.UNKNOWN ) + return EnumSet.complementOf( EnumSet.of( ForgeDirection.UNKNOWN ) ); + return EnumSet.of( pointAt ); + } + }