From 592e524153d0f72037c9dd2e03c6f365c4450c71 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 16 Apr 2020 21:19:40 +0200 Subject: [PATCH] added filter modules --- .../java/de/ellpeck/prettypipes/Registry.java | 10 +++- .../ellpeck/prettypipes/misc/ItemFilter.java | 6 +-- .../pipe/insertion/FilterModuleContainer.java | 39 ++++++++++++++++ .../pipe/insertion/FilterModuleGui.java | 20 ++++++++ .../pipe/insertion/FilterModuleItem.java | 43 ++++++++++++++++++ .../assets/prettypipes/lang/en_us.json | 4 ++ .../models/item/high_filter_module.json | 6 +++ .../models/item/low_filter_module.json | 6 +++ .../models/item/medium_filter_module.json | 6 +++ .../textures/item/high_filter_module.png | Bin 0 -> 339 bytes .../textures/item/low_filter_module.png | Bin 0 -> 327 bytes .../textures/item/medium_filter_module.png | Bin 0 -> 353 bytes 12 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleContainer.java create mode 100644 src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleGui.java create mode 100644 src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleItem.java create mode 100644 src/main/resources/assets/prettypipes/models/item/high_filter_module.json create mode 100644 src/main/resources/assets/prettypipes/models/item/low_filter_module.json create mode 100644 src/main/resources/assets/prettypipes/models/item/medium_filter_module.json create mode 100644 src/main/resources/assets/prettypipes/textures/item/high_filter_module.png create mode 100644 src/main/resources/assets/prettypipes/textures/item/low_filter_module.png create mode 100644 src/main/resources/assets/prettypipes/textures/item/medium_filter_module.png diff --git a/src/main/java/de/ellpeck/prettypipes/Registry.java b/src/main/java/de/ellpeck/prettypipes/Registry.java index 77bec1a..d5800b5 100644 --- a/src/main/java/de/ellpeck/prettypipes/Registry.java +++ b/src/main/java/de/ellpeck/prettypipes/Registry.java @@ -10,6 +10,9 @@ import de.ellpeck.prettypipes.network.PipeNetwork; import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.pipe.*; import de.ellpeck.prettypipes.pipe.containers.*; +import de.ellpeck.prettypipes.pipe.insertion.FilterModuleContainer; +import de.ellpeck.prettypipes.pipe.insertion.FilterModuleGui; +import de.ellpeck.prettypipes.pipe.insertion.FilterModuleItem; import net.minecraft.block.Block; import net.minecraft.client.gui.ScreenManager; import net.minecraft.client.renderer.RenderType; @@ -63,6 +66,7 @@ public final class Registry { public static ContainerType pipeContainer; public static ContainerType extractionModuleContainer; + public static ContainerType filterModuleContainer; @SubscribeEvent public static void registerBlocks(RegistryEvent.Register event) { @@ -78,6 +82,7 @@ public final class Registry { wrenchItem = new WrenchItem().setRegistryName("wrench") ); registry.registerAll(createTieredModule("extraction_module", ExtractionModuleItem::new)); + registry.registerAll(createTieredModule("filter_module", FilterModuleItem::new)); ForgeRegistries.BLOCKS.getValues().stream() .filter(b -> b.getRegistryName().getNamespace().equals(PrettyPipes.ID)) @@ -95,7 +100,9 @@ public final class Registry { public static void registerContainer(RegistryEvent.Register> event) { event.getRegistry().registerAll( pipeContainer = (ContainerType) IForgeContainerType.create((windowId, inv, data) -> new MainPipeContainer(pipeContainer, windowId, inv.player, data.readBlockPos())).setRegistryName("pipe"), - extractionModuleContainer = (ContainerType) IForgeContainerType.create((windowId, inv, data) -> new ExtractionModuleContainer(extractionModuleContainer, windowId, inv.player, data.readBlockPos(), data.readInt())).setRegistryName("extraction_module")); + extractionModuleContainer = (ContainerType) IForgeContainerType.create((windowId, inv, data) -> new ExtractionModuleContainer(extractionModuleContainer, windowId, inv.player, data.readBlockPos(), data.readInt())).setRegistryName("extraction_module"), + filterModuleContainer = (ContainerType) IForgeContainerType.create((windowId, inv, data) -> new FilterModuleContainer(filterModuleContainer, windowId, inv.player, data.readBlockPos(), data.readInt())).setRegistryName("filter_module") + ); } public static void setup(FMLCommonSetupEvent event) { @@ -128,6 +135,7 @@ public final class Registry { ScreenManager.registerFactory(pipeContainer, MainPipeGui::new); ScreenManager.registerFactory(extractionModuleContainer, ExtractionModuleGui::new); + ScreenManager.registerFactory(filterModuleContainer, FilterModuleGui::new); } } } diff --git a/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java b/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java index 2c98e3c..1ef0552 100644 --- a/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java +++ b/src/main/java/de/ellpeck/prettypipes/misc/ItemFilter.java @@ -44,10 +44,8 @@ public class ItemFilter extends ItemStackHandler { public List getSlots(int x, int y) { List slots = new ArrayList<>(); - for (int i = 0; i < this.getSlots(); i++) { - slots.add(new SlotFilter(this, i, x, y)); - x += 18; - } + for (int i = 0; i < this.getSlots(); i++) + slots.add(new SlotFilter(this, i, x + i % 9 * 18, y + i / 9 * 18)); return slots; } diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleContainer.java b/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleContainer.java new file mode 100644 index 0000000..376bf3c --- /dev/null +++ b/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleContainer.java @@ -0,0 +1,39 @@ +package de.ellpeck.prettypipes.pipe.insertion; + +import de.ellpeck.prettypipes.misc.ItemFilter; +import de.ellpeck.prettypipes.misc.ItemFilter.IFilteredContainer; +import de.ellpeck.prettypipes.pipe.containers.AbstractPipeContainer; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.inventory.container.ContainerType; +import net.minecraft.inventory.container.Slot; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; + +import javax.annotation.Nullable; + +public class FilterModuleContainer extends AbstractPipeContainer implements IFilteredContainer { + + public ItemFilter filter; + + public FilterModuleContainer(@Nullable ContainerType type, int id, PlayerEntity player, BlockPos pos, int moduleIndex) { + super(type, id, player, pos, moduleIndex); + } + + @Override + protected void addSlots() { + this.filter = new ItemFilter(this.module.filterSlots, this.moduleStack); + for (Slot slot : this.filter.getSlots((176 - Math.min(this.module.filterSlots, 9) * 18) / 2 + 1, 17 + 32)) + this.addSlot(slot); + } + + @Override + public void onContainerClosed(PlayerEntity playerIn) { + super.onContainerClosed(playerIn); + this.filter.save(); + } + + @Override + public ItemFilter getFilter() { + return this.filter; + } +} diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleGui.java b/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleGui.java new file mode 100644 index 0000000..07d374b --- /dev/null +++ b/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleGui.java @@ -0,0 +1,20 @@ +package de.ellpeck.prettypipes.pipe.insertion; + +import de.ellpeck.prettypipes.pipe.containers.AbstractPipeGui; +import net.minecraft.client.gui.widget.Widget; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; + +public class FilterModuleGui extends AbstractPipeGui { + public FilterModuleGui(FilterModuleContainer screenContainer, PlayerInventory inv, ITextComponent titleIn) { + super(screenContainer, inv, titleIn); + } + + @Override + protected void init() { + super.init(); + for (Widget widget : this.container.filter.getButtons(this.guiLeft + 7, this.guiTop + 17 + 32 + 18 * MathHelper.ceil(this.container.filter.getSlots() / 9F) + 2)) + this.addButton(widget); + } +} diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleItem.java b/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleItem.java new file mode 100644 index 0000000..d9781e5 --- /dev/null +++ b/src/main/java/de/ellpeck/prettypipes/pipe/insertion/FilterModuleItem.java @@ -0,0 +1,43 @@ +package de.ellpeck.prettypipes.pipe.insertion; + +import de.ellpeck.prettypipes.Registry; +import de.ellpeck.prettypipes.items.IModule; +import de.ellpeck.prettypipes.items.ModuleItem; +import de.ellpeck.prettypipes.items.ModuleTier; +import de.ellpeck.prettypipes.misc.ItemFilter; +import de.ellpeck.prettypipes.pipe.PipeTileEntity; +import de.ellpeck.prettypipes.pipe.containers.AbstractPipeContainer; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.ItemStack; + +public class FilterModuleItem extends ModuleItem { + + public final int filterSlots; + + public FilterModuleItem(String name, ModuleTier tier) { + super(name); + this.filterSlots = tier.forTier(5, 9, 18); + } + + @Override + public boolean canAcceptItem(ItemStack module, PipeTileEntity tile, ItemStack stack) { + ItemFilter filter = new ItemFilter(this.filterSlots, module); + return filter.isAllowed(stack); + } + + @Override + public boolean isCompatible(ItemStack module, PipeTileEntity tile, IModule other) { + return !(other instanceof FilterModuleItem); + } + + @Override + public boolean hasContainer(ItemStack module, PipeTileEntity tile) { + return true; + } + + @Override + public AbstractPipeContainer getContainer(ItemStack module, PipeTileEntity tile, int windowId, PlayerInventory inv, PlayerEntity player, int moduleIndex) { + return new FilterModuleContainer(Registry.filterModuleContainer, windowId, player, tile.getPos(), moduleIndex); + } +} diff --git a/src/main/resources/assets/prettypipes/lang/en_us.json b/src/main/resources/assets/prettypipes/lang/en_us.json index 718ce26..1e2b629 100644 --- a/src/main/resources/assets/prettypipes/lang/en_us.json +++ b/src/main/resources/assets/prettypipes/lang/en_us.json @@ -3,7 +3,11 @@ "item.prettypipes.low_extraction_module": "Low Extraction Module", "item.prettypipes.medium_extraction_module": "Medium Extraction Module", "item.prettypipes.high_extraction_module": "High Extraction Module", + "item.prettypipes.low_filter_module": "Low Filter Module", + "item.prettypipes.medium_filter_module": "Medium Filter Module", + "item.prettypipes.high_filter_module": "High Filter Module", "info.prettypipes.extraction_module": "Pulls items from adjacent inventories\nFilters and pull rates vary by tier", + "info.prettypipes.filter_module": "Restricts flow from pipes into adjacent inventories\nFilter amount varies by tier", "block.prettypipes.pipe": "Pipe", "itemGroup.prettypipes": "Pretty Pipes", "container.prettypipes.pipe": "Pipe", diff --git a/src/main/resources/assets/prettypipes/models/item/high_filter_module.json b/src/main/resources/assets/prettypipes/models/item/high_filter_module.json new file mode 100644 index 0000000..3d5ea0d --- /dev/null +++ b/src/main/resources/assets/prettypipes/models/item/high_filter_module.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "prettypipes:item/high_filter_module" + } +} diff --git a/src/main/resources/assets/prettypipes/models/item/low_filter_module.json b/src/main/resources/assets/prettypipes/models/item/low_filter_module.json new file mode 100644 index 0000000..6503d46 --- /dev/null +++ b/src/main/resources/assets/prettypipes/models/item/low_filter_module.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "prettypipes:item/low_filter_module" + } +} diff --git a/src/main/resources/assets/prettypipes/models/item/medium_filter_module.json b/src/main/resources/assets/prettypipes/models/item/medium_filter_module.json new file mode 100644 index 0000000..83463d9 --- /dev/null +++ b/src/main/resources/assets/prettypipes/models/item/medium_filter_module.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "prettypipes:item/medium_filter_module" + } +} diff --git a/src/main/resources/assets/prettypipes/textures/item/high_filter_module.png b/src/main/resources/assets/prettypipes/textures/item/high_filter_module.png new file mode 100644 index 0000000000000000000000000000000000000000..b508762d5f1addceed2b7750b0f43c54a1bc2483 GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%zc|BbmLo9le z6BY;<9Fn-bJ?Dpimz)252DcrIAkP0+XQS6}MMg$Ed~?6P?(osPySt8FxNzmriKg>n zVPauzbDC!s{1f^8vcNf^fpfZB%2}Uyg;NuF4`(s>D93!_7G}OIuGZ#xFSu}*&}wnD z5_4k%AkZ-MFc6t?EoleKdPd=0vn9FS)*t+N(_>ckUG)dwnRvd)rzBgP7d&^Negdza z*~x0HuJ0eJ7GCLYet7=+RGvv;|0SaA6Sgw%=1vIw^5igkoB00!hG1i3Cm(oKvPUnX zu7~;DzT|H`3qNGYT{CI8+VJKOmq^{mb4+*MxtlRWGyMJcSz47hA(;8R4{xcdO6sz< gWnylJR&_8iY(Ekn)Udd#1{g{Vp00i_>zopr01gI@WdHyG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/prettypipes/textures/item/low_filter_module.png b/src/main/resources/assets/prettypipes/textures/item/low_filter_module.png new file mode 100644 index 0000000000000000000000000000000000000000..84adc8b6459c54eca5452024da38619233a0336f GIT binary patch literal 327 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D%z89iMbLo9le z6BY;<9Fn-bJ?Dpimz)252DcrIAkP0+XQS6}MMg$Ed~?6P?(osPySt8FxNzmriKg>n zVPauzPrpw)_;aFHV1aW&1Lt(Nl(YZ$J06+HdpL{1N15l(f3|~xR)H3=omaVqcg=qI zrs+}?&-4eT2~Oq4&I|wQThvQVdKSgzD>awn zVPauzocdJ{{xEe4?NBs0(BiGU>Dm7He})DI1`8zGt}@JUllbxbsr=#l`u`=mLQhG6 zfQ5vG0ndR~t(W8nG3vXP;xP~o7JZ!-Sb=w!mGp)NAZ!o?1KL7p)lLl{I r8)MTeS0_xFDK#rff^)SJ69a?H&V=x=qWeC;Fk|p^^>bP0l+XkKtz?to literal 0 HcmV?d00001