From 90e73a537cfdfb557f5bd2442a19945cab3ca5f6 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Tue, 26 Sep 2023 11:21:08 +0200 Subject: [PATCH] added the ability to clear modules by putting them in the crafting grid --- .../java/de/ellpeck/prettypipes/Registry.java | 7 +++ .../misc/ModuleClearingRecipe.java | 50 +++++++++++++++++++ .../prettypipes/recipes/module_clearing.json | 4 ++ 3 files changed, 61 insertions(+) create mode 100644 src/main/java/de/ellpeck/prettypipes/misc/ModuleClearingRecipe.java create mode 100644 src/main/resources/data/prettypipes/recipes/module_clearing.json diff --git a/src/main/java/de/ellpeck/prettypipes/Registry.java b/src/main/java/de/ellpeck/prettypipes/Registry.java index 5d18495..833939a 100644 --- a/src/main/java/de/ellpeck/prettypipes/Registry.java +++ b/src/main/java/de/ellpeck/prettypipes/Registry.java @@ -4,6 +4,7 @@ import de.ellpeck.prettypipes.entities.PipeFrameEntity; import de.ellpeck.prettypipes.entities.PipeFrameRenderer; import de.ellpeck.prettypipes.items.*; import de.ellpeck.prettypipes.misc.ItemEquality; +import de.ellpeck.prettypipes.misc.ModuleClearingRecipe; import de.ellpeck.prettypipes.network.PipeNetwork; import de.ellpeck.prettypipes.packets.PacketHandler; import de.ellpeck.prettypipes.pipe.IPipeConnectable; @@ -189,6 +190,10 @@ public final class Registry { .forEach(b -> output.accept(b.getValue()))).build() ); }); + + event.register(ForgeRegistries.Keys.RECIPE_SERIALIZERS, h -> { + h.register(new ResourceLocation(PrettyPipes.ID, "module_clearing"), ModuleClearingRecipe.SERIALIZER); + }); } private static > MenuType registerPipeContainer(RegisterEvent.RegisterHelper> helper, String name) { @@ -229,5 +234,7 @@ public final class Registry { MenuScreens.register(Registry.craftingModuleContainer, CraftingModuleGui::new); MenuScreens.register(Registry.filterModifierModuleContainer, FilterModifierModuleGui::new); } + } + } diff --git a/src/main/java/de/ellpeck/prettypipes/misc/ModuleClearingRecipe.java b/src/main/java/de/ellpeck/prettypipes/misc/ModuleClearingRecipe.java new file mode 100644 index 0000000..ebcbc93 --- /dev/null +++ b/src/main/java/de/ellpeck/prettypipes/misc/ModuleClearingRecipe.java @@ -0,0 +1,50 @@ +package de.ellpeck.prettypipes.misc; + +import de.ellpeck.prettypipes.items.IModule; +import net.minecraft.core.RegistryAccess; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.CraftingContainer; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.*; +import net.minecraft.world.level.Level; + +public class ModuleClearingRecipe extends CustomRecipe { + + public static final RecipeSerializer SERIALIZER = new SimpleCraftingRecipeSerializer<>(ModuleClearingRecipe::new); + + public ModuleClearingRecipe(ResourceLocation res, CraftingBookCategory cat) { + super(res, cat); + } + + @Override + public boolean matches(CraftingContainer container, Level level) { + var foundModule = false; + for (var stack : container.getItems()) { + if (!foundModule && stack.getItem() instanceof IModule) { + foundModule = true; + } else if (!stack.isEmpty()) { + return false; + } + } + return foundModule; + } + + @Override + public ItemStack assemble(CraftingContainer container, RegistryAccess access) { + var module = container.getItems().stream().filter(i -> i.getItem() instanceof IModule).findFirst().orElse(ItemStack.EMPTY); + if (!module.isEmpty()) + module = new ItemStack(module.getItem()); + return module; + } + + @Override + public boolean canCraftInDimensions(int x, int y) { + return x >= 1 && y >= 1; + } + + @Override + public RecipeSerializer getSerializer() { + return ModuleClearingRecipe.SERIALIZER; + } + +} diff --git a/src/main/resources/data/prettypipes/recipes/module_clearing.json b/src/main/resources/data/prettypipes/recipes/module_clearing.json new file mode 100644 index 0000000..6c43def --- /dev/null +++ b/src/main/resources/data/prettypipes/recipes/module_clearing.json @@ -0,0 +1,4 @@ +{ + "type": "prettypipes:module_clearing", + "category": "misc" +} \ No newline at end of file