diff --git a/src/main/java/de/ellpeck/prettypipes/Registry.java b/src/main/java/de/ellpeck/prettypipes/Registry.java index 555cbd3..12e7d12 100644 --- a/src/main/java/de/ellpeck/prettypipes/Registry.java +++ b/src/main/java/de/ellpeck/prettypipes/Registry.java @@ -5,6 +5,7 @@ import de.ellpeck.prettypipes.entities.PipeFrameRenderer; import de.ellpeck.prettypipes.items.*; import de.ellpeck.prettypipes.pipe.modules.FilterModifierModule; import de.ellpeck.prettypipes.pipe.modules.LowPriorityModuleItem; +import de.ellpeck.prettypipes.pipe.modules.RedstoneModuleItem; import de.ellpeck.prettypipes.pipe.modules.SpeedModuleItem; import de.ellpeck.prettypipes.pipe.modules.extraction.ExtractionModuleContainer; import de.ellpeck.prettypipes.pipe.modules.extraction.ExtractionModuleGui; @@ -107,6 +108,7 @@ public final class Registry { registry.registerAll(createTieredModule("retrieval_module", RetrievalModuleItem::new)); registry.register(new StackSizeModuleItem("stack_size_module")); registry.registerAll(Arrays.stream(FilterModifierModule.Type.values()).map(t -> new FilterModifierModule(t.name().toLowerCase(Locale.ROOT) + "_filter_modifier", t)).toArray(Item[]::new)); + registry.register(new RedstoneModuleItem("redstone_module")); ForgeRegistries.BLOCKS.getValues().stream() .filter(b -> b.getRegistryName().getNamespace().equals(PrettyPipes.ID)) diff --git a/src/main/java/de/ellpeck/prettypipes/items/IModule.java b/src/main/java/de/ellpeck/prettypipes/items/IModule.java index b9542e9..f4f5b17 100644 --- a/src/main/java/de/ellpeck/prettypipes/items/IModule.java +++ b/src/main/java/de/ellpeck/prettypipes/items/IModule.java @@ -26,4 +26,6 @@ public interface IModule { AbstractPipeContainer getContainer(ItemStack module, PipeTileEntity tile, int windowId, PlayerInventory inv, PlayerEntity player, int moduleIndex); float getItemSpeedIncrease(ItemStack module, PipeTileEntity tile); + + boolean canPipeWork(ItemStack module, PipeTileEntity tile); } diff --git a/src/main/java/de/ellpeck/prettypipes/items/ModuleItem.java b/src/main/java/de/ellpeck/prettypipes/items/ModuleItem.java index 4ba09ee..35de046 100644 --- a/src/main/java/de/ellpeck/prettypipes/items/ModuleItem.java +++ b/src/main/java/de/ellpeck/prettypipes/items/ModuleItem.java @@ -71,4 +71,9 @@ public abstract class ModuleItem extends Item implements IModule { public float getItemSpeedIncrease(ItemStack module, PipeTileEntity tile) { return 0; } + + @Override + public boolean canPipeWork(ItemStack module, PipeTileEntity tile) { + return true; + } } diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java b/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java index 9228422..af42612 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java @@ -134,6 +134,8 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide } public BlockPos getAvailableDestination(ItemStack stack, boolean internal, boolean preventOversending) { + if (!this.canWork()) + return null; if (!internal && this.streamModules().anyMatch(m -> !m.getRight().canAcceptItem(m.getLeft(), this, stack))) return null; for (Direction dir : Direction.values()) { @@ -179,6 +181,10 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide return 0.05F + speed; } + public boolean canWork() { + return this.streamModules().allMatch(m -> m.getRight().canPipeWork(m.getLeft(), this)); + } + public IItemHandler getItemHandler(Direction dir) { if (!this.isConnected(dir)) return null; diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/modules/RedstoneModuleItem.java b/src/main/java/de/ellpeck/prettypipes/pipe/modules/RedstoneModuleItem.java new file mode 100644 index 0000000..ec3ee94 --- /dev/null +++ b/src/main/java/de/ellpeck/prettypipes/pipe/modules/RedstoneModuleItem.java @@ -0,0 +1,29 @@ +package de.ellpeck.prettypipes.pipe.modules; + +import de.ellpeck.prettypipes.items.IModule; +import de.ellpeck.prettypipes.items.ModuleItem; +import de.ellpeck.prettypipes.pipe.PipeTileEntity; +import net.minecraft.item.ItemStack; + +public class RedstoneModuleItem extends ModuleItem { + + public RedstoneModuleItem(String name) { + super(name); + this.setRegistryName(name); + } + + @Override + public boolean canPipeWork(ItemStack module, PipeTileEntity tile) { + return !tile.getWorld().isBlockPowered(tile.getPos()); + } + + @Override + public boolean isCompatible(ItemStack module, PipeTileEntity tile, IModule other) { + return other != this; + } + + @Override + public boolean hasContainer(ItemStack module, PipeTileEntity tile) { + return false; + } +} diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/modules/extraction/ExtractionModuleItem.java b/src/main/java/de/ellpeck/prettypipes/pipe/modules/extraction/ExtractionModuleItem.java index b8afe4d..051568b 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/modules/extraction/ExtractionModuleItem.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/modules/extraction/ExtractionModuleItem.java @@ -33,6 +33,8 @@ public class ExtractionModuleItem extends ModuleItem { public void tick(ItemStack module, PipeTileEntity tile) { if (tile.getWorld().getGameTime() % this.speed != 0) return; + if(!tile.canWork()) + return; ItemFilter filter = new ItemFilter(this.filterSlots, module, tile); PipeNetwork network = PipeNetwork.get(tile.getWorld()); diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/modules/retrieval/RetrievalModuleItem.java b/src/main/java/de/ellpeck/prettypipes/pipe/modules/retrieval/RetrievalModuleItem.java index db7b5fd..ddee637 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/modules/retrieval/RetrievalModuleItem.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/modules/retrieval/RetrievalModuleItem.java @@ -38,6 +38,8 @@ public class RetrievalModuleItem extends ModuleItem { public void tick(ItemStack module, PipeTileEntity tile) { if (tile.getWorld().getGameTime() % this.speed != 0) return; + if (!tile.canWork()) + return; PipeNetwork network = PipeNetwork.get(tile.getWorld()); List locations = null; diff --git a/src/main/resources/assets/prettypipes/lang/en_us.json b/src/main/resources/assets/prettypipes/lang/en_us.json index 15a5885..5cdb048 100644 --- a/src/main/resources/assets/prettypipes/lang/en_us.json +++ b/src/main/resources/assets/prettypipes/lang/en_us.json @@ -22,6 +22,7 @@ "item.prettypipes.damage_filter_modifier": "Damage Filter Modifier", "item.prettypipes.nbt_filter_modifier": "Data Filter Modifier", "item.prettypipes.tag_filter_modifier": "Tag Filter Modifier", + "item.prettypipes.redstone_module": "Redstone Module", "info.prettypipes.extraction_module": "Pulls items from adjacent inventories\nFilters and pull rates vary by tier\nHigh tiers prevent over-sending", "info.prettypipes.filter_module": "Restricts flow from pipes into adjacent inventories\nFilter amount varies by tier", "info.prettypipes.speed_module": "Increases speed of items exiting adjacent inventories\nSpeed varies by tier", @@ -31,6 +32,7 @@ "info.prettypipes.damage_filter_modifier": "Causes any filter slots to filter by item damage", "info.prettypipes.nbt_filter_modifier": "Causes any filter slots to filter by item data (NBT)", "info.prettypipes.tag_filter_modifier": "Causes any filter slots to filter by tags\n(Modern equivalent of the Ore Dictionary)", + "info.prettypipes.redstone_module": "Allows disabling the pipe with a redstone signal\nWorks for both extraction and retrieval", "block.prettypipes.pipe": "Pipe", "itemGroup.prettypipes": "Pretty Pipes", "container.prettypipes.pipe": "Pipe", diff --git a/src/main/resources/assets/prettypipes/models/item/redstone_module.json b/src/main/resources/assets/prettypipes/models/item/redstone_module.json new file mode 100644 index 0000000..71a5196 --- /dev/null +++ b/src/main/resources/assets/prettypipes/models/item/redstone_module.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "prettypipes:item/redstone_module" + } +} diff --git a/src/main/resources/assets/prettypipes/textures/item/redstone_module.png b/src/main/resources/assets/prettypipes/textures/item/redstone_module.png new file mode 100644 index 0000000..60d29a8 Binary files /dev/null and b/src/main/resources/assets/prettypipes/textures/item/redstone_module.png differ diff --git a/src/main/resources/data/prettypipes/recipes/redstone_module.json b/src/main/resources/data/prettypipes/recipes/redstone_module.json new file mode 100644 index 0000000..0ca185b --- /dev/null +++ b/src/main/resources/data/prettypipes/recipes/redstone_module.json @@ -0,0 +1,22 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + " S ", + "RMR", + " R " + ], + "key": { + "R": { + "item": "minecraft:redstone" + }, + "S": { + "item": "minecraft:redstone_torch" + }, + "M": { + "item": "prettypipes:blank_module" + } + }, + "result": { + "item": "prettypipes:redstone_module" + } +} \ No newline at end of file