diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/IPipeConnectable.java b/src/main/java/de/ellpeck/prettypipes/pipe/IPipeConnectable.java index c9c3e86..ed8c71a 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/IPipeConnectable.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/IPipeConnectable.java @@ -19,4 +19,8 @@ public interface IPipeConnectable { default ItemStack insertItem(World world, BlockPos pipePos, Direction direction, PipeItem item) { return item.stack; } + + default boolean allowsModules(World world, BlockPos pipePos, Direction direction) { + return false; + } } diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java b/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java index 1897415..bc1cec2 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/PipeBlock.java @@ -72,7 +72,7 @@ public class PipeBlock extends ContainerBlock implements IPipeConnectable { PipeTileEntity tile = Utility.getTileEntity(PipeTileEntity.class, worldIn, pos); if (tile == null) return ActionResultType.PASS; - if (!tile.isConnectedInventory()) + if (!tile.canHaveModules()) return ActionResultType.PASS; if (!worldIn.isRemote) NetworkHooks.openGui((ServerPlayerEntity) player, tile, pos); @@ -185,7 +185,7 @@ public class PipeBlock extends ContainerBlock implements IPipeConnectable { public static void onStateChanged(World world, BlockPos pos, BlockState newState) { PipeTileEntity tile = Utility.getTileEntity(PipeTileEntity.class, world, pos); - if (tile != null && !tile.isConnectedInventory()) + if (tile != null && !tile.canHaveModules()) Utility.dropInventory(tile, tile.modules); PipeNetwork network = PipeNetwork.get(world); diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java b/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java index a67eb78..147e8aa 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java @@ -228,8 +228,15 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide return this.getItemHandler(dir, null) != null; } - public boolean isConnectedInventory() { - return Arrays.stream(Direction.values()).anyMatch(this::isConnectedInventory); + public boolean canHaveModules() { + for (Direction dir : Direction.values()) { + if (this.isConnectedInventory(dir)) + return true; + IPipeConnectable connectable = this.getPipeConnectable(dir); + if (connectable != null && connectable.allowsModules(this.world, this.pos, dir)) + return true; + } + return false; } public boolean canNetworkSee() { diff --git a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java index dd09f82..1841643 100644 --- a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java +++ b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalBlock.java @@ -77,6 +77,11 @@ public class ItemTerminalBlock extends ContainerBlock implements IPipeConnectabl return item.stack; } + @Override + public boolean allowsModules(World world, BlockPos pipePos, Direction direction) { + return true; + } + @Override public BlockRenderType getRenderType(BlockState state) { return BlockRenderType.MODEL;