diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java index a3a09eff5..82c3e3520 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java @@ -11,6 +11,8 @@ import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRegistry; import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IStackList; import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; @@ -74,9 +76,20 @@ public interface IRSAPI { @Nonnull IStackList createFluidStackList(); + /** + * @return an empty crafting monitor element list + */ @Nonnull ICraftingMonitorElementList createCraftingMonitorElementList(); + /** + * Let's the neighbors of a node know that there is a node placed at the given position. + * + * @param world the world + * @param pos the position of the node + */ + void discoverNode(World world, BlockPos pos); + /** * @param stack the stack * @return a hashcode for the given stack diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java index d27230953..c684cc726 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java @@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftin import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElementRegistry; import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskRegistry; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; +import com.raoulvdberge.refinedstorage.api.network.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandlerRegistry; import com.raoulvdberge.refinedstorage.api.solderer.ISoldererRegistry; @@ -22,9 +23,12 @@ import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRegistry; import com.raoulvdberge.refinedstorage.apiimpl.util.Comparer; import com.raoulvdberge.refinedstorage.apiimpl.util.StackListFluid; import com.raoulvdberge.refinedstorage.apiimpl.util.StackListItem; +import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNode; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.discovery.ASMDataTable; @@ -128,6 +132,23 @@ public class API implements IRSAPI { return new CraftingMonitorElementList(); } + @Override + public void discoverNode(World world, BlockPos pos) { + for (EnumFacing facing : EnumFacing.VALUES) { + TileEntity tile = world.getTileEntity(pos.offset(facing)); + + if (tile != null && tile.hasCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite())) { + INetworkNode node = tile.getCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite()); + + if (node.getNetwork() != null) { + node.getNetwork().getNodeGraph().rebuild(); + + return; + } + } + } + } + @Override public int getItemStackHashCode(ItemStack stack) { return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java index 77da9db57..82f833616 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java @@ -1,15 +1,12 @@ package com.raoulvdberge.refinedstorage.block; -import com.raoulvdberge.refinedstorage.api.network.INetworkNode; -import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNode; +import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.tile.TileNode; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; @@ -31,19 +28,7 @@ public abstract class BlockNode extends BlockBase { super.onBlockPlacedBy(world, pos, state, placer, stack); if (!world.isRemote) { - for (EnumFacing facing : EnumFacing.VALUES) { - TileEntity tile = world.getTileEntity(pos.offset(facing)); - - if (tile != null && tile.hasCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite())) { - INetworkNode node = tile.getCapability(CapabilityNetworkNode.NETWORK_NODE_CAPABILITY, facing.getOpposite()); - - if (node.getNetwork() != null) { - node.getNetwork().getNodeGraph().rebuild(); - - break; - } - } - } + API.instance().discoverNode(world, pos); } }