From 426a50fdfe421ca029bceb329fc05e04b64443d6 Mon Sep 17 00:00:00 2001 From: davidog23 Date: Mon, 21 Nov 2016 20:02:27 +0100 Subject: [PATCH] New API method to allow to connect graphically other tiles to cables (#650) * Added to the API the a method to connect graphically tile entities to cables * Changed a Set of Class to Predicate and moved it to the API class * Unneeded imports. Sorry. * Moved the addition of the connectable condition of INetworkMaster and INetworkNode to ProxyCommon class --- .../java/com/raoulvdberge/refinedstorage/api/IRSAPI.java | 8 ++++++++ .../com/raoulvdberge/refinedstorage/apiimpl/API.java | 9 +++++++++ .../raoulvdberge/refinedstorage/block/BlockCable.java | 9 ++++----- .../raoulvdberge/refinedstorage/proxy/ProxyCommon.java | 4 ++++ 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java index ea70e00cc..f90577c71 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java @@ -12,9 +12,12 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IFluidStackList; import com.raoulvdberge.refinedstorage.api.util.IItemStackList; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import javax.annotation.Nonnull; +import java.util.Set; +import java.util.function.Predicate; /** * Represents a Refined Storage API implementation. @@ -89,4 +92,9 @@ public interface IRSAPI { * @return a hashcode for the given stack */ int getFluidStackHashCode(FluidStack stack); + + /** + * @return a set with the predicates to check if a block is connectable + */ + Set> getConnectableConditions(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java index 31bcd6c81..2bb24efb3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java @@ -24,12 +24,15 @@ import com.raoulvdberge.refinedstorage.apiimpl.util.Comparer; import com.raoulvdberge.refinedstorage.apiimpl.util.FluidStackList; import com.raoulvdberge.refinedstorage.apiimpl.util.ItemStackList; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.discovery.ASMDataTable; import javax.annotation.Nonnull; import java.lang.reflect.Field; +import java.util.HashSet; import java.util.Set; +import java.util.function.Predicate; public class API implements IRSAPI { private static final IRSAPI INSTANCE = new API(); @@ -40,6 +43,7 @@ public class API implements IRSAPI { private ICraftingMonitorElementRegistry craftingMonitorElementRegistry = new CraftingMonitorElementRegistry(); private ICraftingPreviewElementRegistry craftingPreviewElementRegistry = new CraftingPreviewElementRegistry(); private IReaderWriterHandlerRegistry readerWriterHandlerRegistry = new ReaderWriterHandlerRegistry(); + private Set> connectableConditions = new HashSet<>(); @Nonnull @Override @@ -111,6 +115,11 @@ public class API implements IRSAPI { return stack.getFluid().hashCode() * (stack.tag != null ? stack.tag.hashCode() : 1); } + @Override + public Set> getConnectableConditions() { + return connectableConditions; + } + public static IRSAPI instance() { return INSTANCE; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java index f2b4f4da2..5bf862a8e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java @@ -2,7 +2,7 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; -import com.raoulvdberge.refinedstorage.api.network.INetworkNode; +import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.tile.TileBase; import com.raoulvdberge.refinedstorage.tile.TileCable; import com.raoulvdberge.refinedstorage.tile.TileMultipartNode; @@ -30,9 +30,7 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; +import java.util.*; public class BlockCable extends BlockCoverable { protected static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); @@ -151,7 +149,8 @@ public class BlockCable extends BlockCoverable { private boolean hasConnectionWith(IBlockAccess world, BlockPos pos, EnumFacing direction) { TileEntity facing = world.getTileEntity(pos.offset(direction)); - if (facing instanceof INetworkMaster || facing instanceof INetworkNode) { + boolean isConnectable = API.instance().getConnectableConditions().stream().anyMatch(p -> p.test(facing)); + if (isConnectable) { // Do not render a cable extension where our cable "head" is (e.g. importer, exporter, external storage heads). if (getPlacementType() != null && ((TileMultipartNode) world.getTileEntity(pos)).getFacingTile() == facing) { return false; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 52c6ed814..a294f9d9e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -4,6 +4,8 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.RSUtils; +import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; +import com.raoulvdberge.refinedstorage.api.network.INetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.*; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementFluidStack; @@ -84,6 +86,8 @@ public class ProxyCommon { API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerRedstone.ID, tag -> new ReaderWriterHandlerRedstone()); API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerForgeEnergy.ID, ReaderWriterHandlerForgeEnergy::new); + API.instance().getConnectableConditions().add(tile -> tile instanceof INetworkMaster || tile instanceof INetworkNode); + if (IntegrationTesla.isLoaded()) { API.instance().getReaderWriterHandlerRegistry().add(ReaderWriterHandlerTesla.ID, ReaderWriterHandlerTesla::new); }