diff --git a/dependencies.gradle b/dependencies.gradle index 5df5ab0f9..0a8a2b7cd 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -95,6 +95,7 @@ final def mod_dependencies = [ 'roots-246183:3905074' : [project.debug_roots], 'rustic-256141:3107974' : [project.debug_rustic], 'thaumcraft-223628:2629023' : [project.debug_thaum], + 'thaumic_jei-285492:2705304' : [project.debug_thaum], 'cofh_core-69162:2920433' : [project.debug_thermal], 'cofh_world-271384:2920434' : [project.debug_thermal], 'thermal_expansion-69163:2926431' : [project.debug_thermal], @@ -131,10 +132,6 @@ dependencies { } } - if (project.debug_thaum.toBoolean()) { - runtimeOnly 'curse.maven:thaumic_jei-285492:2705304' - } - compileOnly 'com.enderio:endercore:0.5.78' compileOnly 'crazypants:enderio:5.3.72' if (project.debug_enderio.toBoolean()) { diff --git a/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java b/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java index 0b617c989..ab818917f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java +++ b/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java @@ -14,11 +14,10 @@ import com.cleanroommc.groovyscript.documentation.linkgenerator.LinkGeneratorHooks; import com.cleanroommc.groovyscript.event.EventHandler; import com.cleanroommc.groovyscript.helper.JsonHelper; +import com.cleanroommc.groovyscript.keybind.GroovyScriptKeybinds; import com.cleanroommc.groovyscript.mapper.ObjectMapper; import com.cleanroommc.groovyscript.mapper.ObjectMapperManager; -import com.cleanroommc.groovyscript.network.CReload; import com.cleanroommc.groovyscript.network.NetworkHandler; -import com.cleanroommc.groovyscript.network.NetworkUtils; import com.cleanroommc.groovyscript.registry.ReloadableRegistryManager; import com.cleanroommc.groovyscript.sandbox.*; import com.cleanroommc.groovyscript.sandbox.mapper.GroovyDeobfMapper; @@ -29,19 +28,15 @@ import groovy.lang.GroovySystem; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.settings.KeyBinding; import net.minecraft.command.ICommandSender; import net.minecraft.item.Item; import net.minecraft.util.text.Style; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; -import net.minecraftforge.client.settings.KeyConflictContext; -import net.minecraftforge.client.settings.KeyModifier; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.ModContainer; @@ -51,13 +46,13 @@ import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -import net.minecraftforge.fml.common.gameevent.InputEvent; import net.minecraftforge.fml.relauncher.FMLLaunchHandler; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import org.lwjgl.input.Keyboard; import java.io.File; import java.io.IOException; @@ -95,9 +90,6 @@ public class GroovyScript { private static ModContainer scriptMod; private static Thread languageServerThread; - private static KeyBinding reloadKey; - private static long timeSinceLastUse; - public static final Random RND = new Random(); @Mod.EventHandler @@ -116,17 +108,18 @@ public void onConstruction(FMLConstructionEvent event) { } ModSupport.INSTANCE.setup(event.getASMHarvestedData()); - if (NetworkUtils.isDedicatedClient()) { - // this resource pack must be added in construction - ((DefaultResourcePackAccessor) Minecraft.getMinecraft()).get().add(new GroovyResourcePack()); - reloadKey = new KeyBinding("key.groovyscript.reload", KeyConflictContext.IN_GAME, KeyModifier.CONTROL, Keyboard.KEY_R, "key.categories.groovyscript"); - ClientRegistry.registerKeyBinding(reloadKey); - } - FluidRegistry.enableUniversalBucket(); getRunConfig().initPackmode(); } + @Mod.EventHandler + @SideOnly(Side.CLIENT) + public void onClientConstruction(FMLConstructionEvent event) { + MinecraftForge.EVENT_BUS.register(GroovyScriptKeybinds.class); + // this resource pack must be added in construction + ((DefaultResourcePackAccessor) Minecraft.getMinecraft()).get().add(new GroovyResourcePack()); + } + @Mod.EventHandler public void onInit(FMLInitializationEvent event) { if (ModSupport.TINKERS_CONSTRUCT.isLoaded()) TinkersConstruct.init(); @@ -135,6 +128,12 @@ public void onInit(FMLInitializationEvent event) { } } + @Mod.EventHandler + @SideOnly(Side.CLIENT) + public void onClientInit(FMLInitializationEvent event) { + GroovyScriptKeybinds.initialize(); + } + @SubscribeEvent(priority = EventPriority.LOWEST) public void onRegisterItem(RegistryEvent.Register event) { if (ModSupport.TINKERS_CONSTRUCT.isLoaded()) TinkersConstruct.preInit(); @@ -207,15 +206,6 @@ public void onServerLoad(FMLServerStartingEvent event) { event.registerServerCommand(new GSCommand()); } - @SubscribeEvent - public static void onInput(InputEvent.KeyInputEvent event) { - long time = Minecraft.getSystemTime(); - if (Minecraft.getMinecraft().isIntegratedServerRunning() && reloadKey.isPressed() && time - timeSinceLastUse >= 1000 && Minecraft.getMinecraft().player.getPermissionLevel() >= 4) { - NetworkHandler.sendToServer(new CReload()); - timeSinceLastUse = time; - } - } - @NotNull public static String getScriptPath() { return getScriptFile().getPath(); diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/IJEIRemoval.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/IJEIRemoval.java new file mode 100644 index 000000000..3c2b4a72e --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/IJEIRemoval.java @@ -0,0 +1,128 @@ +package com.cleanroommc.groovyscript.api.jeiremoval; + +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ISlotOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; +import mezz.jei.api.gui.IRecipeLayout; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.List; + +/** + * Interface that should be implemented on {@link com.cleanroommc.groovyscript.api.INamed} registries, + * primarily those that would be iterated through as part of {@link com.cleanroommc.groovyscript.compat.mods.ModSupport#getAllContainers()}, + * and contains methods indicating what JEI Categories the given registry represents + * and how to remove those recipes. + *

+ * Primarily interacted with by {@link com.cleanroommc.groovyscript.compat.mods.jei.removal.JeiRemovalHelper#getRemovalMethod(String, IRecipeLayout)}. + *

+ * In most cases, classes should implement {@link Default} instead of directly implementing {@link IJEIRemoval}. + * + * @see Default + */ +public interface IJEIRemoval { + + /** + * A list containing any number of strings which + * are the UIDs of a JEI recipe category {@link mezz.jei.api.recipe.IRecipeCategory#getUid()}. + *
+ * This list is typically immutable. + * + * @return a list of all UIDs associated with the target recipe category + */ + @NotNull + Collection getCategories(); + + /** + * Generates one or more removal methods for the targeted recipe, if possible, + * using the information from JEI to do so. + *

+ * If possible, the first removal method should only remove a single recipe, + * but this is not required and may not be possible. + *

+ * The path to the recipe will automatically be generated before each entry, only the method name and its parameters should be returned. + *

+ * Any empty list should be returned if generating a removal method is not possible. + * + * @param layout a map of type to group of slots displayed in JEI + * @return a collection of all generated method to remove the targeted recipe + */ + @NotNull + List getRemoval(IRecipeLayout layout); + + /** + * Has a default removal method, {@link #getRemoval(IRecipeLayout)}, + * which returns a method to remove the recipe for each input and output. + *

+ * If changing the operations interacted with is required, implementations should generally override + * the {@link #getJEIOperations()} method instead of {@link #getRemoval(IRecipeLayout)}. + */ + interface Default extends IJEIRemoval { + + /** + * A shorthand method that modifies the default operations so each + * of the default operations includes the provided slots. + *

+ * Should be used inside {@link #getJEIOperations()} to provide the return value. + * + * @param included all slots to be included + * @return a list if operations with the given slots included + * @see OperationHandler#defaultOperations() + */ + static List includeSlots(int... included) { + var operations = OperationHandler.defaultOperations(); + for (var operation : operations) { + if (operation instanceof ISlotOperation op) op.include(included); + } + return operations; + } + + /** + * A shorthand method that modifies the default operations so each + * of the default operations excludes the provided slots. + *

+ * Should be used inside {@link #getJEIOperations()} to provide the return value. + * + * @param excluded all slots to be excluded + * @return a list if operations with the given slots excluded + * @see OperationHandler#defaultOperations() + */ + static List excludeSlots(int... excluded) { + var operations = OperationHandler.defaultOperations(); + for (var operation : operations) { + if (operation instanceof ISlotOperation op) op.exclude(excluded); + } + return operations; + } + + /** + * Calls {@link OperationHandler#removalOptions(IRecipeLayout, List)} with the output of {@link #getJEIOperations()}.\ + *

+ * In almost all cases, this should not be overridden and + * {@link #getJEIOperations()} should be manipulated instead. + * + * @see OperationHandler#removalOptions(IRecipeLayout, List) + */ + @Override + default @NotNull List getRemoval(IRecipeLayout layout) { + return OperationHandler.removalOptions(layout, getJEIOperations()); + } + + /** + * Gets the desired operations that will be parsed through with the target {@link IRecipeLayout}. + *

+ * Should be overridden to modify the excluded slots, override incorrectly labeled input or output slots, + * or to override the names of the methods. + * + * @return a list of operations to process + * @see OperationHandler#defaultOperations() + * @see OperationHandler#removalOptions(IRecipeLayout, List) + */ + default @NotNull List getJEIOperations() { + return OperationHandler.defaultOperations(); + } + + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/BaseSlotOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/BaseSlotOperation.java new file mode 100644 index 000000000..d7c1fd838 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/BaseSlotOperation.java @@ -0,0 +1,108 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import mezz.jei.api.gui.IGuiIngredient; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Abstract class containing the basic logic for input and output slots, what slots are excluded, + * and what method name should be used for a given slot. + */ +@ParametersAreNonnullByDefault +public abstract class BaseSlotOperation implements ISlotOperation> { + + private static final String DEFAULT_INPUT_METHOD_NAME = "removeByInput"; + private static final String DEFAULT_OUTPUT_METHOD_NAME = "removeByOutput"; + + protected final List included = new ArrayList<>(); + protected final List excluded = new ArrayList<>(); + protected final List reallyInputs = new ArrayList<>(); + protected final List reallyOutputs = new ArrayList<>(); + protected String inputMethodName = DEFAULT_INPUT_METHOD_NAME; + protected String outputMethodName = DEFAULT_OUTPUT_METHOD_NAME; + + @Override + public BaseSlotOperation include(int... ints) { + for (var i : ints) this.included.add(i); + return this; + } + + @Override + public BaseSlotOperation exclude(int... ints) { + for (var i : ints) this.excluded.add(i); + return this; + } + + @Override + public BaseSlotOperation input(int... ints) { + for (var i : ints) this.reallyInputs.add(i); + return this; + } + + @Override + public BaseSlotOperation output(int... ints) { + for (var i : ints) this.reallyOutputs.add(i); + return this; + } + + @Override + public BaseSlotOperation input(String name) { + this.inputMethodName = name; + return this; + } + + @Override + public BaseSlotOperation output(String name) { + this.outputMethodName = name; + return this; + } + + /** + * Checks if the slot should be skipped. + * If the slot has no ingredients it is automatically skipped. + * If {@link #included} is empty, checks the {@link #excluded} list and if the slot contains no ingredients. + * Otherwise, if the slot is a member of the {@link #included} list the provided slot will be included. + * + * @param slot the entry slot being parsed + * @return if the slot should be ignored + */ + protected boolean isIgnored(Map.Entry> slot) { + if (slot.getValue().getAllIngredients().isEmpty()) return true; + return this.included.isEmpty() ? this.excluded.contains(slot.getKey()) : !this.included.contains(slot.getKey()); + } + + /** + * Checks if the slot should be considered an input slot. + * By default, checks the {@link #reallyInputs} list for overrides, then if the slot is marked as an input. + * + * @param slot the entry slot being parsed + * @return if the slot is an input + */ + protected boolean isInput(Map.Entry> slot) { + return this.reallyInputs.contains(slot.getKey()) || slot.getValue().isInput(); + } + + + /** + * Checks if the slot should be considered an output slot. + * By default, checks the {@link #reallyOutputs} list for overrides, then if the slot is an input via {@link #isInput(Map.Entry)}. + * + * @param slot the entry slot being parsed + * @return if the slot is an output + */ + protected boolean isOutput(Map.Entry> slot) { + return this.reallyOutputs.contains(slot.getKey()) || !isInput(slot); + } + + /** + * @param slot the entry slot being parsed + * @return the method name used to represent the slot + */ + protected String getMethod(Map.Entry> slot) { + return isOutput(slot) ? this.outputMethodName : this.inputMethodName; + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ClassSlotOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ClassSlotOperation.java new file mode 100644 index 000000000..c510977ac --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ClassSlotOperation.java @@ -0,0 +1,40 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import mezz.jei.api.gui.IGuiIngredient; +import mezz.jei.api.gui.IRecipeLayout; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; + +/** + * Class for ingredient groups obtained via the deprecated {@link IRecipeLayout#getIngredientsGroup(Class)} method. + *

+ * Used to read the gui ingredients added via the deprecated format. + * + * @see IngredientSlotOperation + */ +@SuppressWarnings("deprecation") +@ParametersAreNonnullByDefault +public class ClassSlotOperation extends SlotOperation { + + private final Class clazz; + + /** + * @param clazz the class that is used to get the gui ingredients from the recipe layout through the deprecated format + * @param hasExactInput if slots marked as an input should add to the exactInput list in {@link #parse(IRecipeLayout, List, List)}. + * @param function a bifunction taking the primary ingredient in the slot and all ingredients in the slot and returning + * a String to represent that slot, typically via an {@link com.cleanroommc.groovyscript.mapper.ObjectMapper ObjectMapper}. + */ + public ClassSlotOperation(Class clazz, boolean hasExactInput, BiFunction, String> function) { + super(hasExactInput, function); + this.clazz = clazz; + } + + @Override + protected Map> getGuiIngredients(IRecipeLayout layout) { + return layout.getIngredientsGroup(clazz).getGuiIngredients(); + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/FluidOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/FluidOperation.java new file mode 100644 index 000000000..28b288601 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/FluidOperation.java @@ -0,0 +1,23 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; +import mezz.jei.api.ingredients.VanillaTypes; +import net.minecraftforge.fluids.FluidStack; + +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +public class FluidOperation extends IngredientSlotOperation { + + public FluidOperation() { + super(VanillaTypes.FLUID, true, (stack, all) -> GroovyScriptCodeConverter.getSingleFluidStack(stack, true, false)); + } + + /** + * @return the base {@link FluidOperation} + */ + public static FluidOperation defaultOperation() { + return new FluidOperation(); + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/IOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/IOperation.java new file mode 100644 index 000000000..dd80d34dd --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/IOperation.java @@ -0,0 +1,21 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import mezz.jei.api.gui.IRecipeLayout; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + +/** + * Base operations requirement, merely requires that the implementing classes contain a {@link #parse(IRecipeLayout, List, List)} method. + */ +@ParametersAreNonnullByDefault +public interface IOperation { + + /** + * @param layout the recipe layout to be parsed + * @param removing a list of strings which should be modified, and any removal methods should be added to + * @param exactInput if the implementing class gathers input ingredients, an addition list to manage them for a separate method + */ + void parse(IRecipeLayout layout, List removing, List exactInput); + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ISlotOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ISlotOperation.java new file mode 100644 index 000000000..09d1c3d45 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ISlotOperation.java @@ -0,0 +1,58 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import javax.annotation.ParametersAreNonnullByDefault; + +/** + * Interface for a {@link BaseSlotOperation}, requiring the ability to + * block specific slots from appearing, + * override the input or output state of a slot (due to the slot being incorrectly listed) + * set the method name for the input or output. + * + * @param the operation class + */ +@ParametersAreNonnullByDefault +public interface ISlotOperation extends IOperation { + + /** + * Include all provided slot numbers to be evaluated. If this is called, {@link #exclude(int...)} should be ignored. + * + * @param ints all slots to be included + */ + ISlotOperation include(int... ints); + + /** + * Excludes all provided slot numbers from being evaluated. + * Some slots cannot be parsed properly, are superfluous, contain helper items unrelated to the recipe, + * or otherwise should be ignored when generating methods to remove the recipe. + * + * @param ints all slots to be excluded + */ + ISlotOperation exclude(int... ints); + + /** + * Sets all provided slot numbers as an input slot. + * Some slots incorrectly list themselves as an input or an output. + * + * @param ints all slots to be set as an input + */ + ISlotOperation input(int... ints); + + /** + * Sets all provided slot numbers as an output slot. + * Some slots incorrectly list themselves as an input or an output. + * + * @param ints all slots to be set as an output + */ + ISlotOperation output(int... ints); + + /** + * @param name the name of the method used to remove inputs + */ + ISlotOperation input(String name); + + /** + * @param name the name of the method used to remove outputs + */ + ISlotOperation output(String name); + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/IngredientSlotOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/IngredientSlotOperation.java new file mode 100644 index 000000000..8b7e7015f --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/IngredientSlotOperation.java @@ -0,0 +1,40 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import mezz.jei.api.gui.IGuiIngredient; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.recipe.IIngredientType; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; + +/** + * Class for ingredient groups obtained via {@link IRecipeLayout#getIngredientsGroup(IIngredientType)}. + *

+ * Used to read the gui ingredients added via the modern format. + * + * @see ClassSlotOperation + */ +@ParametersAreNonnullByDefault +public class IngredientSlotOperation extends SlotOperation { + + private final IIngredientType type; + + /** + * @param type the {@link IIngredientType} that is used to get the gui ingredients from the recipe layout + * @param hasExactInput if slots marked as an input should add to the exactInput list in {@link #parse(IRecipeLayout, List, List)}. + * @param function a bifunction taking the primary ingredient in the slot and all ingredients in the slot and returning + * a String to represent that slot, typically via an {@link com.cleanroommc.groovyscript.mapper.ObjectMapper ObjectMapper}. + */ + public IngredientSlotOperation(IIngredientType type, boolean hasExactInput, BiFunction, String> function) { + super(hasExactInput, function); + this.type = type; + } + + @Override + protected Map> getGuiIngredients(IRecipeLayout layout) { + return layout.getIngredientsGroup(type).getGuiIngredients(); + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ItemOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ItemOperation.java new file mode 100644 index 000000000..fa2ac62bb --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/ItemOperation.java @@ -0,0 +1,38 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; +import mezz.jei.api.ingredients.VanillaTypes; +import net.minecraft.item.ItemStack; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; + +@ParametersAreNonnullByDefault +public class ItemOperation extends IngredientSlotOperation { + + public ItemOperation() { + super(VanillaTypes.ITEM, true, + (stack, all) -> { + var oreDict = convertToOreDict(all); + return oreDict.isEmpty() ? GroovyScriptCodeConverter.getSingleItemStack(stack, true, false) : oreDict; + }); + } + + /** + * @param ingredients a list of itemstacks to check + * @return if the list of itemstacks are an oredict, represent them as an oredict + */ + private static String convertToOreDict(List ingredients) { + var dict = OperationHandler.getStackHelper().getOreDictEquivalent(ingredients); + return dict == null ? "" : GroovyScriptCodeConverter.asGroovyCode(dict, true); + } + + /** + * @return the base {@link ItemOperation} + */ + public static ItemOperation defaultOperation() { + return new ItemOperation(); + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/SlotOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/SlotOperation.java new file mode 100644 index 000000000..16faaaa53 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/SlotOperation.java @@ -0,0 +1,55 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; +import mezz.jei.api.gui.IGuiIngredient; +import mezz.jei.api.gui.IRecipeLayout; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; + +/** + * Abstract class containing the core logic of the operation, + * parsing the provided gui ingredients through a provided function. + */ +@ParametersAreNonnullByDefault +public abstract class SlotOperation extends BaseSlotOperation { + + protected final boolean hasExactInput; + protected final BiFunction, String> function; + + /** + * @param hasExactInput if slots marked as an input should add to the exactInput list in {@link #parse(IRecipeLayout, List, List)}. + * @param function a bifunction taking the primary ingredient in the slot and all ingredients in the slot and returning + * a String to represent that slot, typically via an {@link com.cleanroommc.groovyscript.mapper.ObjectMapper ObjectMapper}. + */ + public SlotOperation(boolean hasExactInput, BiFunction, String> function) { + this.hasExactInput = hasExactInput; + this.function = function; + } + + /** + * @param layout the recipe layout being parsed + * @return the ingredients for the target recipe layout + */ + abstract Map> getGuiIngredients(IRecipeLayout layout); + + protected String function(T stack, List list) { + return this.function.apply(stack, list); + } + + @Override + public void parse(IRecipeLayout layout, List removing, List exactInput) { + for (var slot : getGuiIngredients(layout).entrySet()) { + if (isIgnored(slot)) continue; + + var stack = OperationHandler.getIngredientFromSlot(slot.getValue()); + if (stack == null) continue; + + var identity = function(stack, slot.getValue().getAllIngredients()); + if (this.hasExactInput && !isOutput(slot)) exactInput.add(identity); + removing.add(OperationHandler.format(getMethod(slot), identity)); + } + } +} diff --git a/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/WrapperOperation.java b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/WrapperOperation.java new file mode 100644 index 000000000..8f9250055 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/api/jeiremoval/operations/WrapperOperation.java @@ -0,0 +1,51 @@ +package com.cleanroommc.groovyscript.api.jeiremoval.operations; + +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; +import mezz.jei.api.gui.IRecipeLayout; + +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.List; +import java.util.function.Function; + +/** + * Checks that the wrapper is an instance of the given class, then calls the provided function parameter + * to generate a list of methods to remove the recipe based on the recipe wrapper. + *

+ * Note that in most cases, using {@link BaseSlotOperation} and some combination of the + * {@link ISlotOperation#exclude(int...)}, {@link ISlotOperation#input(int...)}, and {@link ISlotOperation#output(int...)} + * methods will be able to generate all the removal methods needed. + *

+ * {@link WrapperOperation} should generally only be used if it isn't possible to access + * the desired information through a {@link BaseSlotOperation}. + * + * @param wrapper type + */ +@ParametersAreNonnullByDefault +public class WrapperOperation implements IOperation { + + private final Class wrapperClass; + private final Function> function; + + /** + * @param wrapperClass the wrapper class that is being parsed + * @param function a function that accepts an instance of the wrapper class and returns a list of strings + * to generate output methods for the given recipe + */ + public WrapperOperation(Class wrapperClass, Function> function) { + this.wrapperClass = wrapperClass; + this.function = function; + } + + protected List function(T wrapper) { + return this.function.apply(wrapper); + } + + @Override + public void parse(IRecipeLayout layout, List removing, List exactInput) { + var wrapper = OperationHandler.getRecipeWrapper(layout); + if (wrapperClass.isInstance(wrapper)) { + removing.addAll(function(wrapperClass.cast(wrapper))); + } + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Burning.java b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Burning.java index 36d68de9b..0a3267b85 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Burning.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Burning.java @@ -3,25 +3,26 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.inworldcrafting.jei.BurningRecipeCategory; import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.cleanroommc.groovyscript.sandbox.ClosureHelper; +import com.google.common.collect.ImmutableList; import groovy.lang.Closure; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.Optional; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; -public class Burning extends VirtualizedRegistry { +public class Burning extends VirtualizedRegistry implements IJEIRemoval.Default { private static final Map runningRecipes = new Object2ObjectOpenHashMap<>(); @@ -62,6 +63,16 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(BurningRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei this + } + public static class BurningRecipe { private final IIngredient input; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Explosion.java b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Explosion.java index c933057fe..b70a9d63f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Explosion.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/Explosion.java @@ -4,23 +4,29 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.inworldcrafting.jei.ExplosionRecipeCategory; import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.cleanroommc.groovyscript.sandbox.ClosureHelper; +import com.google.common.collect.ImmutableList; import groovy.lang.Closure; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.common.Optional; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; -public class Explosion extends VirtualizedRegistry { +public class Explosion extends VirtualizedRegistry implements IJEIRemoval.Default { private final List explosionRecipes = new ArrayList<>(); @@ -53,6 +59,16 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ExplosionRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei this + } + public static class ExplosionRecipe { private final IIngredient input; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToBlock.java b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToBlock.java index c9d9ef08c..8c76743a7 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToBlock.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToBlock.java @@ -2,6 +2,10 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.compat.inworldcrafting.jei.FluidRecipeCategory; import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -16,9 +20,14 @@ import net.minecraft.world.World; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class FluidToBlock extends VirtualizedRegistry { +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class FluidToBlock extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -87,6 +96,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(FluidRecipe.findRecipesOfType(Recipe.class)).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(FluidRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(FluidOperation.defaultOperation()); + } + public static class Recipe extends FluidRecipe { private final IBlockState output; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToFluid.java b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToFluid.java index 64b4bf1ae..6374518d6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToFluid.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToFluid.java @@ -2,6 +2,10 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.compat.inworldcrafting.jei.FluidRecipeCategory; import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -14,9 +18,14 @@ import net.minecraft.world.World; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class FluidToFluid extends VirtualizedRegistry { +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class FluidToFluid extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -85,6 +94,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(FluidRecipe.findRecipesOfType(Recipe.class)).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(FluidRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(FluidOperation.defaultOperation()); + } + public static class Recipe extends FluidRecipe { private final Fluid output; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToItem.java b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToItem.java index 8c51d2b26..d8080f7d9 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToItem.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/FluidToItem.java @@ -3,6 +3,10 @@ import com.cleanroommc.groovyscript.GroovyScript; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.compat.inworldcrafting.jei.FluidRecipeCategory; import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -16,9 +20,14 @@ import net.minecraft.world.World; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class FluidToItem extends VirtualizedRegistry { +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class FluidToItem extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -75,6 +84,11 @@ public boolean removeByInput(FluidStack fluid, ItemStack... input) { return true; } + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(FluidOperation.defaultOperation()); + } + public boolean removeAll() { return FluidRecipe.removeIf(fluidRecipe -> fluidRecipe.getClass() == Recipe.class, fluidRecipe -> addBackup((Recipe) fluidRecipe)); } @@ -87,6 +101,12 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(FluidRecipe.findRecipesOfType(Recipe.class)).setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(FluidRecipeCategory.UID); + } + public static class Recipe extends FluidRecipe { private final ItemStack output; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/PistonPush.java b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/PistonPush.java index 57d447070..8b91e6854 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/PistonPush.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/inworldcrafting/PistonPush.java @@ -3,25 +3,31 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.inworldcrafting.jei.PistonPushRecipeCategory; import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.cleanroommc.groovyscript.sandbox.ClosureHelper; +import com.google.common.collect.ImmutableList; import groovy.lang.Closure; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.common.Optional; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.function.Consumer; import java.util.stream.Collectors; -public class PistonPush extends VirtualizedRegistry { +public class PistonPush extends VirtualizedRegistry implements IJEIRemoval.Default { private final List pistonPushRecipes = new ArrayList<>(); @@ -54,6 +60,16 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(PistonPushRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei this + } + public static class PistonPushRecipe { private final IIngredient input; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/AtomicReconstructor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/AtomicReconstructor.java index 86a25d56b..363caf78b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/AtomicReconstructor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/AtomicReconstructor.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -12,11 +13,16 @@ import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.lens.Lens; import de.ellpeck.actuallyadditions.api.recipe.LensConversionRecipe; +import de.ellpeck.actuallyadditions.mod.jei.reconstructor.ReconstructorRecipeCategory; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class AtomicReconstructor extends VirtualizedRegistry { +public class AtomicReconstructor extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).energyUse(1000)"), @@ -90,6 +96,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ReconstructorRecipeCategory.NAME); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Compost.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Compost.java index b93891fac..04c2fff86 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Compost.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Compost.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -11,14 +12,19 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CompostRecipe; +import de.ellpeck.actuallyadditions.mod.jei.compost.CompostRecipeCategory; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Compost extends VirtualizedRegistry { +public class Compost extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).inputDisplay(blockstate('minecraft:clay')).outputDisplay(blockstate('minecraft:diamond_block'))")) public RecipeBuilder recipeBuilder() { @@ -89,6 +95,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CompostRecipeCategory.NAME); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Crusher.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Crusher.java index af4f977f1..17f7e0f05 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Crusher.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Crusher.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -11,12 +12,17 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.CrusherRecipe; +import de.ellpeck.actuallyadditions.mod.jei.crusher.CrusherRecipeCategory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Crusher extends VirtualizedRegistry { +public class Crusher extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'), item('minecraft:diamond')).chance(100)"), @@ -90,6 +96,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CrusherRecipeCategory.NAME); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Empowerer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Empowerer.java index 4926f94ef..fd2e1caac 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Empowerer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/actuallyadditions/Empowerer.java @@ -4,21 +4,30 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.recipe.EmpowererRecipe; +import de.ellpeck.actuallyadditions.mod.jei.empowerer.EmpowererRecipeCategory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class Empowerer extends VirtualizedRegistry { +public class Empowerer extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".mainInput(item('minecraft:clay')).input(item('minecraft:clay'),item('minecraft:clay'),item('minecraft:clay'),item('minecraft:clay')).output(item('minecraft:diamond')).time(50).energy(1000).red(0.5).green(0.3).blue(0.2)"), @@ -90,6 +99,15 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(EmpowererRecipeCategory.NAME); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1, 2, 3, 4)); + } @Property(property = "input", valid = {@Comp(value = "4", type = Comp.Type.GTE), @Comp(value = "5", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/advancedmortars/Mortar.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/advancedmortars/Mortar.java index e8deea556..62f5b6313 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/advancedmortars/Mortar.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/advancedmortars/Mortar.java @@ -4,6 +4,8 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.core.mixin.advancedmortars.RegistryRecipeMortarAccessor; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -11,17 +13,16 @@ import com.codetaylor.mc.advancedmortars.modules.mortar.api.MortarAPI; import com.codetaylor.mc.advancedmortars.modules.mortar.recipe.RecipeMortar; import com.codetaylor.mc.advancedmortars.modules.mortar.reference.EnumMortarType; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class Mortar extends VirtualizedRegistry { +public class Mortar extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".type('stone').duration(2).output(item('minecraft:grass')).input(item('minecraft:dirt'))"), @@ -87,6 +88,18 @@ public static List getTypes(RecipeMortar recipe) { .collect(Collectors.toList()); } + /** + * @see com.codetaylor.mc.advancedmortars.modules.mortar.integration.jei.PluginJEI#createUID + */ + @Override + public @NotNull Collection getCategories() { + return Arrays.stream(EnumMortarType.values()).map(Enum::name).map(x -> "advancedmortars_" + x).collect(Collectors.toList()); + } + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "8")}) @Property(property = "output", valid = @Comp("1")) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Enchanter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Enchanter.java index cb95f1985..b13cde563 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Enchanter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Enchanter.java @@ -3,16 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.gildedgames.the_aether.api.enchantments.AetherEnchantment; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.registry.GameRegistry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Enchanter extends ForgeRegistryWrapper { +public class Enchanter extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Enchanter() { super(GameRegistry.findRegistry(AetherEnchantment.class)); @@ -38,6 +46,19 @@ public void removeByOutput(IIngredient output) { }); } + /** + * @see com.gildedgames.the_aether.universal.jei.AetherJEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("aether_legacy.enchantment"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(2).output(2)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Freezer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Freezer.java index 5ce5a9a6c..cd0b77d53 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Freezer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/aetherlegacy/Freezer.java @@ -3,16 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.gildedgames.the_aether.api.freezables.AetherFreezable; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.registry.GameRegistry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Freezer extends ForgeRegistryWrapper { +public class Freezer extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Freezer() { super(GameRegistry.findRegistry(AetherFreezable.class)); @@ -38,6 +46,19 @@ public void removeByOutput(IIngredient output) { }); } + /** + * @see com.gildedgames.the_aether.universal.jei.AetherJEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("aether_legacy.freezable"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(2).output(2)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Atomizer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Atomizer.java index 35d100571..04b857f9c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Atomizer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Atomizer.java @@ -1,21 +1,27 @@ package com.cleanroommc.groovyscript.compat.mods.alchemistry; +import al132.alchemistry.compat.jei.AlchemistryRecipeUID; import al132.alchemistry.recipes.AtomizerRecipe; import al132.alchemistry.recipes.LiquifierRecipe; import al132.alchemistry.recipes.ModRecipes; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Atomizer extends VirtualizedRegistry { +public class Atomizer extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -85,6 +91,11 @@ public void removeAll() { ModRecipes.INSTANCE.getAtomizerRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlchemistryRecipeUID.INSTANCE.getATOMIZER()); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Combiner.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Combiner.java index cfa72919c..42061ef65 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Combiner.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Combiner.java @@ -1,10 +1,12 @@ package com.cleanroommc.groovyscript.compat.mods.alchemistry; +import al132.alchemistry.compat.jei.AlchemistryRecipeUID; import al132.alchemistry.recipes.CombinerRecipe; import al132.alchemistry.recipes.ModRecipes; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -12,13 +14,16 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Combiner extends VirtualizedRegistry { +public class Combiner extends VirtualizedRegistry implements IJEIRemoval.Default { public Combiner() { super(Alias.generateOfClass(Combiner.class).andGenerate("ChemicalCombiner")); @@ -89,6 +94,11 @@ public void removeAll() { ModRecipes.INSTANCE.getCombinerRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlchemistryRecipeUID.INSTANCE.getCOMBINER()); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "9")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Dissolver.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Dissolver.java index fe29545dd..8ecb6e6b5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Dissolver.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Dissolver.java @@ -1,25 +1,27 @@ package com.cleanroommc.groovyscript.compat.mods.alchemistry; +import al132.alchemistry.compat.jei.AlchemistryRecipeUID; import al132.alchemistry.recipes.*; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class Dissolver extends VirtualizedRegistry { +public class Dissolver extends VirtualizedRegistry implements IJEIRemoval.Default { public Dissolver() { super(Alias.generateOfClass(Dissolver.class).andGenerate("ChemicalDissolver")); @@ -79,6 +81,16 @@ public void removeAll() { ModRecipes.INSTANCE.getDissolverRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlchemistryRecipeUID.INSTANCE.getDISSOLVER()); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(2)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Electrolyzer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Electrolyzer.java index 66e038961..9ac970da6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Electrolyzer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Electrolyzer.java @@ -1,10 +1,12 @@ package com.cleanroommc.groovyscript.compat.mods.alchemistry; +import al132.alchemistry.compat.jei.AlchemistryRecipeUID; import al132.alchemistry.recipes.ElectrolyzerRecipe; import al132.alchemistry.recipes.ModRecipes; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -13,12 +15,14 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Electrolyzer extends VirtualizedRegistry { +public class Electrolyzer extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -98,6 +102,11 @@ public void removeAll() { ModRecipes.INSTANCE.getElectrolyzerRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlchemistryRecipeUID.INSTANCE.getELECTROLYZER()); + } + @Property(property = "input", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "1", type = Comp.Type.LTE)}) @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "4", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Evaporator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Evaporator.java index 70f8f8611..bfed14fdd 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Evaporator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Evaporator.java @@ -1,20 +1,26 @@ package com.cleanroommc.groovyscript.compat.mods.alchemistry; +import al132.alchemistry.compat.jei.AlchemistryRecipeUID; import al132.alchemistry.recipes.EvaporatorRecipe; import al132.alchemistry.recipes.ModRecipes; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Evaporator extends VirtualizedRegistry { +public class Evaporator extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -84,6 +90,11 @@ public void removeAll() { ModRecipes.INSTANCE.getEvaporatorRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlchemistryRecipeUID.INSTANCE.getEVAPORATOR()); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Liquifier.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Liquifier.java index 6d3e95951..d4b72fc92 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Liquifier.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/alchemistry/Liquifier.java @@ -1,20 +1,31 @@ package com.cleanroommc.groovyscript.compat.mods.alchemistry; +import al132.alchemistry.compat.jei.AlchemistryRecipeUID; import al132.alchemistry.recipes.LiquifierRecipe; import al132.alchemistry.recipes.ModRecipes; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Liquifier extends VirtualizedRegistry { +public class Liquifier extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -84,6 +95,16 @@ public void removeAll() { ModRecipes.INSTANCE.getLiquifierRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlchemistryRecipeUID.INSTANCE.getLIQUIFIER()); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().output(1)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidOutput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Grinder.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Grinder.java index a33e90a03..c63efcda6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Grinder.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Grinder.java @@ -5,20 +5,23 @@ import appeng.api.features.IGrinderRecipeBuilder; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Grinder extends VirtualizedRegistry { +public class Grinder extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'), item('minecraft:gold_ingot'), item('minecraft:diamond')).turns(1).chance1(0.5).chance2(0.3)"), @@ -71,6 +74,14 @@ public void removeAll() { } } + /** + * @see appeng.integration.modules.jei.GrinderRecipeCategory + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("appliedenergistics2.grinder"); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "3")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Inscriber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Inscriber.java index eb2c2b25e..391eade29 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Inscriber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/appliedenergistics2/Inscriber.java @@ -6,18 +6,22 @@ import appeng.api.features.InscriberProcessType; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class Inscriber extends VirtualizedRegistry { +public class Inscriber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(ore('blockGlass')).output(item('minecraft:diamond')).top(item('minecraft:diamond')).bottom(item('minecraft:diamond')).inscribe()"), @@ -61,6 +65,18 @@ public void removeAll() { } } + /** + * @see appeng.integration.modules.jei.InscriberRecipeCategory + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("appliedenergistics2.inscriber"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(3)); + } @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/arcanearchives/GemCuttingTable.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/arcanearchives/GemCuttingTable.java index 08a900b6e..5e295a34b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/arcanearchives/GemCuttingTable.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/arcanearchives/GemCuttingTable.java @@ -1,25 +1,30 @@ package com.cleanroommc.groovyscript.compat.mods.arcanearchives; import com.aranaira.arcanearchives.api.IGCTRecipe; +import com.aranaira.arcanearchives.integration.jei.JEIPlugin; import com.aranaira.arcanearchives.recipe.IngredientStack; import com.aranaira.arcanearchives.recipe.gct.GCTRecipe; import com.aranaira.arcanearchives.recipe.gct.GCTRecipeList; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.stream.Collectors; @RegistryDescription(admonition = @Admonition(value = "groovyscript.wiki.arcanearchives.gem_cutting_table.note0", type = Admonition.Type.WARNING)) -public class GemCuttingTable extends VirtualizedRegistry { +public class GemCuttingTable extends VirtualizedRegistry implements IJEIRemoval.Default { public GemCuttingTable() { super(Alias.generateOfClass(GemCuttingTable.class).and("GCT", "gct")); @@ -92,6 +97,11 @@ public void removeAll() { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIPlugin.GEM_CUTTERS_TABLE); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "Integer.MAX_VALUE", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Grindstone.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Grindstone.java index 15da6e41b..9a821800f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Grindstone.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Grindstone.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; @@ -11,11 +12,16 @@ import hellfirepvp.astralsorcery.common.crafting.ItemHandle; import hellfirepvp.astralsorcery.common.crafting.grindstone.GrindstoneRecipe; import hellfirepvp.astralsorcery.common.crafting.grindstone.GrindstoneRecipeRegistry; +import hellfirepvp.astralsorcery.common.integrations.ModIntegrationJEI; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Grindstone extends VirtualizedRegistry { +public class Grindstone extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(ore('blockDiamond')).output(item('minecraft:clay')).weight(1).secondaryChance(1.0F)"), @@ -95,6 +101,11 @@ public void removeAll() { GrindstoneRecipeRegistry.recipes.clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ModIntegrationJEI.idGrindstone); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/InfusionAltar.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/InfusionAltar.java index 89ff9e162..14a5a0b3e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/InfusionAltar.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/InfusionAltar.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -12,12 +13,17 @@ import hellfirepvp.astralsorcery.common.crafting.infusion.AbstractInfusionRecipe; import hellfirepvp.astralsorcery.common.crafting.infusion.InfusionRecipeRegistry; import hellfirepvp.astralsorcery.common.crafting.infusion.recipes.BasicInfusionRecipe; +import hellfirepvp.astralsorcery.common.integrations.ModIntegrationJEI; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class InfusionAltar extends VirtualizedRegistry { +public class InfusionAltar extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).consumption(1f).chalice(false).consumeMultiple(true).time(10)"), @@ -97,6 +103,11 @@ public void removeAll() { }); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ModIntegrationJEI.idInfuser); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/LightTransmutation.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/LightTransmutation.java index af8fb0dc1..491e641d3 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/LightTransmutation.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/LightTransmutation.java @@ -3,23 +3,30 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.astralsorcery.LightOreTransmutationsAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import hellfirepvp.astralsorcery.common.base.LightOreTransmutations; import hellfirepvp.astralsorcery.common.constellation.IWeakConstellation; +import hellfirepvp.astralsorcery.common.integrations.ModIntegrationJEI; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class LightTransmutation extends VirtualizedRegistry { +public class LightTransmutation extends VirtualizedRegistry implements IJEIRemoval.Default { private static List getRegistry() { if (LightOreTransmutationsAccessor.getRegisteredTransmutations() == null) { @@ -106,12 +113,22 @@ public SimpleObjectStream streamRecipes() .setRemover(this::remove); } + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei + } + @MethodDescription(priority = 2000, example = @Example(commented = true)) public void removeAll() { getRegistry().forEach(this::addBackup); getRegistry().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ModIntegrationJEI.idTransmutation); + } + public static class RecipeBuilder extends AbstractRecipeBuilder { @Property(valid = {@Comp(value = "null", type = Comp.Type.NOT), @Comp(value = "input", type = Comp.Type.NOT)}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Lightwell.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Lightwell.java index 4e4347d0f..67a549617 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Lightwell.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/Lightwell.java @@ -3,24 +3,29 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.astralsorcery.WellLiquefactionAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.IRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import hellfirepvp.astralsorcery.common.base.WellLiquefaction; +import hellfirepvp.astralsorcery.common.integrations.ModIntegrationJEI; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import org.apache.logging.log4j.Level; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; +import java.util.Collection; +import java.util.Collections; import java.util.Map; @RegistryDescription -public class Lightwell extends VirtualizedRegistry { +public class Lightwell extends VirtualizedRegistry implements IJEIRemoval.Default { private static Map getRegistry() { if (WellLiquefactionAccessor.getRegisteredLiquefactions() == null) { @@ -102,6 +107,11 @@ public void removeAll() { getRegistry().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ModIntegrationJEI.idWell); + } + public static class RecipeBuilder implements IRecipeBuilder { @Property(valid = @Comp(value = "null", type = Comp.Type.NOT)) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/starlightaltar/StarlightAltar.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/starlightaltar/StarlightAltar.java index 2a5f487cb..d3dcb6da8 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/starlightaltar/StarlightAltar.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/astralsorcery/starlightaltar/StarlightAltar.java @@ -2,18 +2,55 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import hellfirepvp.astralsorcery.common.crafting.altar.AbstractAltarRecipe; import hellfirepvp.astralsorcery.common.crafting.altar.AltarRecipeRegistry; +import hellfirepvp.astralsorcery.common.integrations.ModIntegrationJEI; +import hellfirepvp.astralsorcery.common.integrations.mods.jei.altar.AltarAttunementRecipeWrapper; +import hellfirepvp.astralsorcery.common.integrations.mods.jei.altar.AltarConstellationRecipeWrapper; +import hellfirepvp.astralsorcery.common.integrations.mods.jei.altar.AltarDiscoveryRecipeWrapper; +import hellfirepvp.astralsorcery.common.integrations.mods.jei.altar.AltarTraitRecipeWrapper; import hellfirepvp.astralsorcery.common.tile.TileAltar; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class StarlightAltar extends VirtualizedRegistry { +public class StarlightAltar extends VirtualizedRegistry implements IJEIRemoval.Default { + + private static List registryNameRemovalMethod(AbstractAltarRecipe recipe) { + return Collections.singletonList(OperationHandler.format("remove", GroovyScriptCodeConverter.asGroovyCode(recipe.getNativeRecipe().getRegistryName(), true))); + } + + private static IOperation discoveryOperation() { + return new WrapperOperation<>(AltarDiscoveryRecipeWrapper.class, wrapper -> registryNameRemovalMethod(wrapper.getRecipe())); + } + + private static IOperation attunementOperation() { + return new WrapperOperation<>(AltarAttunementRecipeWrapper.class, wrapper -> registryNameRemovalMethod(wrapper.getRecipe())); + } + + private static IOperation constellationOperation() { + return new WrapperOperation<>(AltarConstellationRecipeWrapper.class, wrapper -> registryNameRemovalMethod(wrapper.getRecipe())); + } + + private static IOperation traitOperation() { + return new WrapperOperation<>(AltarTraitRecipeWrapper.class, wrapper -> registryNameRemovalMethod(wrapper.getRecipe())); + } @RecipeBuilderDescription(priority = 100, requirement = { @Property(property = "ingredientMatrix", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "9", type = Comp.Type.LTE)}), @@ -105,4 +142,15 @@ public void removeAll() { recipes.clear(); }); } + + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(ModIntegrationJEI.idAltarDiscovery, ModIntegrationJEI.idAltarAttunement, ModIntegrationJEI.idAltarConstellation, ModIntegrationJEI.idAltarTrait); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(discoveryOperation(), attunementOperation(), constellationOperation(), traitOperation(), ItemOperation.defaultOperation().include(0), FluidOperation.defaultOperation()); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Kiln.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Kiln.java index a5753b744..0eb9a522c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Kiln.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Kiln.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,12 +11,17 @@ import com.teammetallurgy.atum.api.recipe.RecipeHandlers; import com.teammetallurgy.atum.api.recipe.kiln.IKilnRecipe; import com.teammetallurgy.atum.api.recipe.kiln.KilnRecipe; +import com.teammetallurgy.atum.integration.jei.JEIIntegration; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Kiln extends ForgeRegistryWrapper { +public class Kiln extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Kiln() { super(RecipeHandlers.kilnRecipes); @@ -59,6 +65,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIIntegration.KILN); + } + @Property(property = "name") @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Quern.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Quern.java index c5fd80c33..bc2a1f898 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Quern.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/Quern.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,12 +11,17 @@ import com.teammetallurgy.atum.api.recipe.RecipeHandlers; import com.teammetallurgy.atum.api.recipe.quern.IQuernRecipe; import com.teammetallurgy.atum.api.recipe.quern.QuernRecipe; +import com.teammetallurgy.atum.integration.jei.JEIIntegration; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Quern extends ForgeRegistryWrapper { +public class Quern extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Quern() { super(RecipeHandlers.quernRecipes); @@ -59,6 +65,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIIntegration.QUERN); + } + @Property(property = "name") @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/SpinningWheel.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/SpinningWheel.java index 2b1e7cd1c..7ddbff7d6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/SpinningWheel.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/atum/SpinningWheel.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,12 +11,17 @@ import com.teammetallurgy.atum.api.recipe.RecipeHandlers; import com.teammetallurgy.atum.api.recipe.spinningwheel.ISpinningWheelRecipe; import com.teammetallurgy.atum.api.recipe.spinningwheel.SpinningWheelRecipe; +import com.teammetallurgy.atum.integration.jei.JEIIntegration; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class SpinningWheel extends ForgeRegistryWrapper { +public class SpinningWheel extends ForgeRegistryWrapper implements IJEIRemoval.Default { public SpinningWheel() { super(RecipeHandlers.spinningWheelRecipes); @@ -59,6 +65,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIIntegration.SPINNING_WHEEL); + } + @Property(property = "name") @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Compressor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Compressor.java index 22a2299e6..e0c9b0f13 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Compressor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Compressor.java @@ -3,20 +3,27 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import morph.avaritia.compat.jei.AvaritiaJEIPlugin; import morph.avaritia.recipe.AvaritiaRecipeManager; import morph.avaritia.recipe.compressor.CompressorRecipe; import morph.avaritia.recipe.compressor.ICompressorRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; import java.util.Collections; +import java.util.List; @RegistryDescription -public class Compressor extends VirtualizedRegistry { +public class Compressor extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -81,6 +88,16 @@ public void add(ItemStack output, IIngredient input, int cost) { .register(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AvaritiaJEIPlugin.NEUTRONIUM_COMPRESSOR); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(1)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeCrafting.java index 77355b4fc..041fc4a18 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeCrafting.java @@ -5,16 +5,24 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RecipeBuilderDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import morph.avaritia.compat.jei.AvaritiaJEIPlugin; import morph.avaritia.recipe.AvaritiaRecipeManager; import morph.avaritia.recipe.extreme.IExtremeRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class ExtremeCrafting extends VirtualizedRegistry { +public class ExtremeCrafting extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".matrix([[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')], [item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')], [item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')], [item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')], [item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')], [item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')], [item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')]]).output(item('minecraft:gold_block'))"), @@ -88,4 +96,15 @@ public void removeAll() { AvaritiaRecipeManager.EXTREME_RECIPES.values().forEach(this::addBackup); AvaritiaRecipeManager.EXTREME_RECIPES.values().clear(); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AvaritiaJEIPlugin.EXTREME_CRAFTING); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0)); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/AnvilCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/AnvilCrafting.java index 91a4fa617..f70479e64 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/AnvilCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/AnvilCrafting.java @@ -1,25 +1,47 @@ package com.cleanroommc.groovyscript.compat.mods.betterwithmods; import betterwithmods.common.registry.anvil.AnvilCraftingManager; +import betterwithmods.module.compat.jei.category.SteelAnvilRecipeCategory; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RecipeBuilderDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class AnvilCrafting extends VirtualizedRegistry { +public class AnvilCrafting extends VirtualizedRegistry implements IJEIRemoval.Default { public AnvilCrafting() { super(Alias.generateOfClass(AnvilCrafting.class).andGenerate("SoulforgedSteelAnvil")); } + private static IOperation registryNameOperation() { + return new WrapperOperation<>(ICraftingRecipeWrapper.class, wrapper -> + wrapper.getRegistryName() == null + ? Collections.emptyList() + : Collections.singletonList(OperationHandler.format("remove", GroovyScriptCodeConverter.asGroovyCode(wrapper.getRegistryName(), true)))); + } + @RecipeBuilderDescription(example = { @Example(".output(item('minecraft:diamond') * 32).matrix([[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),null],[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),null],[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),null],[null,null,null,item('minecraft:gold_ingot').transform({ _ -> item('minecraft:diamond') })]])"), @Example(".output(item('minecraft:diamond')).matrix('BXXX').mirrored().key('B', item('minecraft:stone')).key('X', item('minecraft:gold_ingot'))") @@ -92,4 +114,15 @@ public void removeAll() { AnvilCraftingManager.ANVIL_CRAFTING.clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SteelAnvilRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + // while this class *does* work for removing via removeByInput, having all of those be printed would cause a significant amount of clutter. + return ImmutableList.of(registryNameOperation(), ItemOperation.defaultOperation().include(16), FluidOperation.defaultOperation()); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/BetterWithMods.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/BetterWithMods.java index f2033d46c..33f5993f0 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/BetterWithMods.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/BetterWithMods.java @@ -15,4 +15,16 @@ public class BetterWithMods extends GroovyPropertyContainer { public final Hopper hopper = new Hopper(); public final HopperFilters hopperFilters = new HopperFilters(); + + /** + * Used to obtain the JEI category UIDs for categories with multiple levels of heat. + * + * @see betterwithmods.module.compat.jei.JEI#getHeatUID(String, int) + */ + public static String getHeatUID(String base, int heat) { + if (heat == 1) return base; + if (heat == 2) return String.format("%s.%s", base, "stoked"); + return String.format("%s.%s", base, heat); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Cauldron.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Cauldron.java index 56f7f7621..6c9360e56 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Cauldron.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Cauldron.java @@ -2,6 +2,8 @@ import betterwithmods.common.BWRegistry; import betterwithmods.common.registry.bulk.recipes.CookingPotRecipe; +import betterwithmods.common.registry.heat.BWMHeatRegistry; +import betterwithmods.module.compat.jei.category.CookingPotRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; @@ -11,18 +13,21 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collection; import java.util.stream.Collectors; @RegistryDescription -public class Cauldron extends VirtualizedRegistry { +public class Cauldron extends VirtualizedRegistry implements IJEIRemovalIOutput { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).heat(2)"), @Example(".input(item('minecraft:diamond')).output(item('minecraft:gold_ingot') * 16).ignoreHeat()") }) - @RecipeBuilderMethodDescription + @RecipeBuilderMethodDescription public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } @@ -88,6 +93,11 @@ public void removeAll() { BWRegistry.CAULDRON.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Arrays.stream(BWMHeatRegistry.allHeatLevels()).mapToObj(i -> BetterWithMods.getHeatUID(CookingPotRecipeCategory.CAULDRON_UID, i)).collect(Collectors.toList()); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "9", type = Comp.Type.LTE)}) @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "9", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Crucible.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Crucible.java index 0c40d42b5..17e36e7e6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Crucible.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Crucible.java @@ -2,6 +2,8 @@ import betterwithmods.common.BWRegistry; import betterwithmods.common.registry.bulk.recipes.CookingPotRecipe; +import betterwithmods.common.registry.heat.BWMHeatRegistry; +import betterwithmods.module.compat.jei.category.CookingPotRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; @@ -13,18 +15,21 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraftforge.items.ItemHandlerHelper; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collection; import java.util.stream.Collectors; @RegistryDescription -public class Crucible extends VirtualizedRegistry { +public class Crucible extends VirtualizedRegistry implements IJEIRemovalIOutput { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).heat(2)"), @Example(".input(item('minecraft:diamond')).output(item('minecraft:gold_ingot') * 16).ignoreHeat()") }) - @RecipeBuilderMethodDescription + @RecipeBuilderMethodDescription public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } @@ -93,6 +98,11 @@ public void removeAll() { BWRegistry.CRUCIBLE.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Arrays.stream(BWMHeatRegistry.allHeatLevels()).mapToObj(i -> BetterWithMods.getHeatUID(CookingPotRecipeCategory.CRUCIBLE_UID, i)).collect(Collectors.toList()); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "9", type = Comp.Type.LTE)}) @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "9", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Hopper.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Hopper.java index 7b06ae6ab..91251cdca 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Hopper.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Hopper.java @@ -1,21 +1,28 @@ package com.cleanroommc.groovyscript.compat.mods.betterwithmods; import betterwithmods.common.registry.HopperInteractions; +import betterwithmods.module.compat.jei.category.HopperRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.ItemStackList; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class Hopper extends VirtualizedRegistry { +public class Hopper extends VirtualizedRegistry implements IJEIRemovalIOutput { @RecipeBuilderDescription(example = { @Example(".name('betterwithmods:iron_bar').input(ore('sand')).output(item('minecraft:clay')).inWorldItemOutput(item('minecraft:gold_ingot'))"), @@ -84,6 +91,16 @@ public void removeAll() { HopperInteractions.RECIPES.clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(HopperRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(IJEIRemovalIOutput.getDefaultIOutput(), ItemOperation.defaultOperation().exclude(7)); + } + @Property(property = "name", value = "groovyscript.wiki.betterwithmods.hopper.name.value", valid = @Comp(value = "null", type = Comp.Type.NOT)) @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "2", type = Comp.Type.LTE)}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/IJEIRemovalIOutput.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/IJEIRemovalIOutput.java new file mode 100644 index 000000000..afee55f8e --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/IJEIRemovalIOutput.java @@ -0,0 +1,25 @@ +package com.cleanroommc.groovyscript.compat.mods.betterwithmods; + +import betterwithmods.api.recipe.IOutput; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.*; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; +import com.google.common.collect.ImmutableList; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public interface IJEIRemovalIOutput extends IJEIRemoval.Default { + + static SlotOperation getDefaultIOutput() { + return new ClassSlotOperation<>( + IOutput.class, true, + (stack, all) -> GroovyScriptCodeConverter.getSingleItemStack(stack.getOutput(), true, false)); + } + + @Override + default @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation(), getDefaultIOutput()); + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Kiln.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Kiln.java index 58d5be489..526dd6791 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Kiln.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Kiln.java @@ -3,6 +3,8 @@ import betterwithmods.common.BWRegistry; import betterwithmods.common.registry.block.recipe.BlockIngredient; import betterwithmods.common.registry.block.recipe.KilnRecipe; +import betterwithmods.common.registry.heat.BWMHeatRegistry; +import betterwithmods.module.compat.jei.category.KilnRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; @@ -11,12 +13,16 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; +import java.util.Collection; import java.util.List; +import java.util.stream.Collectors; @RegistryDescription -public class Kiln extends VirtualizedRegistry { +public class Kiln extends VirtualizedRegistry implements IJEIRemovalIOutput { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).heat(2)"), @@ -85,6 +91,11 @@ public void removeAll() { BWRegistry.KILN.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Arrays.stream(BWMHeatRegistry.allHeatLevels()).mapToObj(i -> BetterWithMods.getHeatUID(KilnRecipeCategory.UID, i)).collect(Collectors.toList()); + } + @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "3", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/MillStone.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/MillStone.java index 6f951cf6f..33aea1710 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/MillStone.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/MillStone.java @@ -2,6 +2,7 @@ import betterwithmods.common.BWRegistry; import betterwithmods.common.registry.bulk.recipes.MillRecipe; +import betterwithmods.module.compat.jei.category.MillRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; @@ -13,12 +14,15 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.SoundEvent; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.stream.Collectors; @RegistryDescription -public class MillStone extends VirtualizedRegistry { +public class MillStone extends VirtualizedRegistry implements IJEIRemovalIOutput { public MillStone() { super(Alias.generateOfClass(MillStone.class).andGenerate("Mill")); @@ -93,6 +97,11 @@ public void removeAll() { BWRegistry.MILLSTONE.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(MillRecipeCategory.UID); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "3", type = Comp.Type.LTE)}) @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "3", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Saw.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Saw.java index 67d2cf54c..45a81f5f1 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Saw.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Saw.java @@ -3,6 +3,7 @@ import betterwithmods.common.BWRegistry; import betterwithmods.common.registry.block.recipe.BlockIngredient; import betterwithmods.common.registry.block.recipe.SawRecipe; +import betterwithmods.module.compat.jei.category.SawRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; @@ -11,15 +12,18 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Saw extends VirtualizedRegistry { +public class Saw extends VirtualizedRegistry implements IJEIRemovalIOutput { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond_block')).output(item('minecraft:gold_ingot') * 16)")) - @RecipeBuilderMethodDescription + @RecipeBuilderMethodDescription public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } @@ -83,6 +87,11 @@ public void removeAll() { BWRegistry.WOOD_SAW.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SawRecipeCategory.UID); + } + @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "9", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Turntable.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Turntable.java index 12ed8a8ba..4e081a3a0 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Turntable.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/betterwithmods/Turntable.java @@ -3,28 +3,35 @@ import betterwithmods.common.BWRegistry; import betterwithmods.common.registry.block.recipe.BlockIngredient; import betterwithmods.common.registry.block.recipe.TurntableRecipe; +import betterwithmods.module.compat.jei.category.TurntableRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Turntable extends VirtualizedRegistry { +public class Turntable extends VirtualizedRegistry implements IJEIRemovalIOutput { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:gold_block')).outputBlock(blockstate('minecraft:clay')).output(item('minecraft:gold_ingot') * 5).rotations(5)"), @Example(".input(item('minecraft:clay')).output(item('minecraft:gold_ingot')).rotations(2)") }) - @RecipeBuilderMethodDescription + @RecipeBuilderMethodDescription public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } @@ -88,6 +95,16 @@ public void removeAll() { BWRegistry.TURNTABLE.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(TurntableRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(IJEIRemovalIOutput.getDefaultIOutput(), ItemOperation.defaultOperation().exclude(4)); + } + @Property(property = "output", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "2", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyArray.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyArray.java index ed67c8c07..c95da9670 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyArray.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyArray.java @@ -2,22 +2,32 @@ import WayofTime.bloodmagic.api.impl.BloodMagicAPI; import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyArray; +import WayofTime.bloodmagic.util.Constants; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.bloodmagic.BloodMagicRecipeRegistrarAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class AlchemyArray extends VirtualizedRegistry { +public class AlchemyArray extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).catalyst(item('bloodmagic:slate:1')).output(item('minecraft:gold_ingot')).texture('bloodmagic:textures/models/AlchemyArrays/LightSigil.png')"), @@ -159,6 +169,17 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(Constants.Compat.JEI_CATEGORY_ALCHEMYARRAY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1), + ItemOperation.defaultOperation().include(1).input("removeByCatalyst")); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyTable.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyTable.java index 03603d3af..3f0448b37 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyTable.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/AlchemyTable.java @@ -2,10 +2,13 @@ import WayofTime.bloodmagic.api.impl.BloodMagicAPI; import WayofTime.bloodmagic.api.impl.recipe.RecipeAlchemyTable; +import WayofTime.bloodmagic.util.Constants; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.bloodmagic.BloodMagicRecipeRegistrarAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -15,9 +18,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; import java.util.Collections; +import java.util.List; @RegistryDescription( admonition = @Admonition(type = Admonition.Type.DANGER, @@ -25,7 +31,7 @@ hasTitle = true, value = "groovyscript.wiki.bloodmagic.alchemy_table.note0") ) -public class AlchemyTable extends VirtualizedRegistry { +public class AlchemyTable extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond'), item('minecraft:diamond')).output(item('minecraft:clay')).ticks(100).minimumTier(2).syphon(500)"), @@ -126,6 +132,15 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(Constants.Compat.JEI_CATEGORY_ALCHEMYTABLE); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(1); + } @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "6")}) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/BloodAltar.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/BloodAltar.java index 27eba83ab..2ddacc56e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/BloodAltar.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/BloodAltar.java @@ -3,10 +3,12 @@ import WayofTime.bloodmagic.altar.AltarTier; import WayofTime.bloodmagic.api.impl.BloodMagicAPI; import WayofTime.bloodmagic.api.impl.recipe.RecipeBloodAltar; +import WayofTime.bloodmagic.util.Constants; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.bloodmagic.BloodMagicRecipeRegistrarAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -14,8 +16,12 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription( admonition = { @Admonition("groovyscript.wiki.bloodmagic.blood_altar.note0"), @@ -25,7 +31,7 @@ hasTitle = true) } ) -public class BloodAltar extends VirtualizedRegistry { +public class BloodAltar extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:gold_ingot')).minimumTier(0).drainRate(5).syphon(10).consumeRate(5)"), @@ -116,6 +122,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(Constants.Compat.JEI_CATEGORY_ALTAR); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/TartaricForge.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/TartaricForge.java index cea5d56e8..1d8d9b166 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/TartaricForge.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/bloodmagic/TartaricForge.java @@ -2,10 +2,13 @@ import WayofTime.bloodmagic.api.impl.BloodMagicAPI; import WayofTime.bloodmagic.api.impl.recipe.RecipeTartaricForge; +import WayofTime.bloodmagic.util.Constants; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.bloodmagic.BloodMagicRecipeRegistrarAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -15,13 +18,15 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; +import java.util.List; @RegistryDescription -public class TartaricForge extends VirtualizedRegistry { +public class TartaricForge extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay')).output(item('minecraft:gold_ingot')).soulDrain(5).minimumSouls(10)"), @@ -128,6 +133,15 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(Constants.Compat.JEI_CATEGORY_SOULFORGE); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(1); + } @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "4")}) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Apothecary.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Apothecary.java index adef4bbfa..5186867bc 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Apothecary.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Apothecary.java @@ -4,22 +4,28 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipePetals; +import vazkii.botania.client.integration.jei.petalapothecary.PetalApothecaryRecipeCategory; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Apothecary extends VirtualizedRegistry { +public class Apothecary extends VirtualizedRegistry implements IJEIRemoval.Default { public Apothecary() { super(Alias.generateOfClassAnd(Apothecary.class, "PetalApothecary")); @@ -106,6 +112,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(BotaniaAPI.petalRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(PetalApothecaryRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(0); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "20")}) @Property(property = "output", valid = @Comp("1")) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/BrewRecipe.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/BrewRecipe.java index 9a8156cb0..a0bbac9df 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/BrewRecipe.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/BrewRecipe.java @@ -4,21 +4,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipeBrew; +import vazkii.botania.client.integration.jei.brewery.BreweryRecipeCategory; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class BrewRecipe extends VirtualizedRegistry { +public class BrewRecipe extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay'), ore('ingotGold'), ore('gemDiamond')).brew(brew('absorption'))")) public RecipeBuilder recipeBuilder() { @@ -99,6 +104,11 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(BotaniaAPI.brewRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(BreweryRecipeCategory.UID); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "6")}) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ElvenTrade.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ElvenTrade.java index 4311be5d8..93c1e7168 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ElvenTrade.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ElvenTrade.java @@ -4,21 +4,28 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipeElvenTrade; +import vazkii.botania.client.integration.jei.elventrade.ElvenTradeRecipeCategory; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class ElvenTrade extends VirtualizedRegistry { +public class ElvenTrade extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(ore('ingotGold'), ore('ingotIron')).output(item('botania:manaresource:7'))")) public RecipeBuilder recipeBuilder() { @@ -113,6 +120,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(BotaniaAPI.elvenTradeRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ElvenTradeRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().input("removeByInputs").output("removeByOutputs")); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "99")}) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "99")}) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ManaInfusion.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ManaInfusion.java index 3ff83f9d6..d89a23917 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ManaInfusion.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/ManaInfusion.java @@ -4,20 +4,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import mezz.jei.api.gui.IRecipeLayout; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipeManaInfusion; +import vazkii.botania.client.integration.jei.manapool.ManaPoolRecipeCategory; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription( admonition = @Admonition(value = "groovyscript.wiki.botania.mana_infusion.note", type = Admonition.Type.WARNING) ) -public class ManaInfusion extends VirtualizedRegistry { +public class ManaInfusion extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(ore('ingotGold')).output(item('botania:manaresource', 1)).mana(500).catalyst(blockstate('minecraft:stone'))")) public RecipeBuilder recipeBuilder() { @@ -106,6 +118,20 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(BotaniaAPI.manaInfusionRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ManaPoolRecipeCategory.UID); + } + + @Override + public @NotNull List getRemoval(IRecipeLayout layout) { + // is this ugly? yes! but we need to target these specific slots and the slot number is dynamic + ImmutableList list = layout.getItemStacks().getGuiIngredients().values().size() > 3 + ? ImmutableList.of(ItemOperation.defaultOperation().include(0, 3), ItemOperation.defaultOperation().include(1).input("removeByCatalyst")) + : ImmutableList.of(ItemOperation.defaultOperation().include(0, 2)); + return OperationHandler.removalOptions(layout, list); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Orechid.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Orechid.java index fcf3ae3b3..39244803a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Orechid.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/Orechid.java @@ -5,17 +5,24 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.botania.recipe.OrechidRecipe; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import org.jetbrains.annotations.NotNull; import vazkii.botania.api.BotaniaAPI; +import vazkii.botania.client.integration.jei.orechid.OrechidRecipeCategory; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Orechid extends VirtualizedRegistry { +public class Orechid extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -88,4 +95,15 @@ public void removeAll() { public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(getAllRecipes(), false).setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(OrechidRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().exclude(0, 1).output(2)); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/OrechidIgnem.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/OrechidIgnem.java index 6e6dd3ce7..81839cd0b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/OrechidIgnem.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/OrechidIgnem.java @@ -6,9 +6,13 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; import com.cleanroommc.groovyscript.compat.mods.botania.recipe.OrechidRecipe; +import org.jetbrains.annotations.NotNull; import vazkii.botania.api.BotaniaAPI; +import vazkii.botania.client.integration.jei.orechid.OrechidIgnemRecipeCategory; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription @@ -68,4 +72,10 @@ public void removeAll() { getAllRecipes().forEach(this::addBackup); BotaniaAPI.oreWeightsNether.clear(); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(OrechidIgnemRecipeCategory.UID); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/PureDaisy.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/PureDaisy.java index af7273f6a..e2c5bd6f0 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/PureDaisy.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/PureDaisy.java @@ -3,18 +3,26 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipePureDaisy; +import vazkii.botania.client.integration.jei.puredaisy.PureDaisyRecipeCategory; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class PureDaisy extends VirtualizedRegistry { +public class PureDaisy extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(ore('plankWood')).output(blockstate('minecraft:clay')).time(5)")) public RecipeBuilder recipeBuilder() { @@ -116,6 +124,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(BotaniaAPI.pureDaisyRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(PureDaisyRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(1); + } + public class RecipeBuilder extends AbstractRecipeBuilder { @Property(defaultValue = "RecipePureDaisy.DEFAULT_TIME (150)", valid = @Comp(value = "0", type = Comp.Type.GTE)) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/RuneAltar.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/RuneAltar.java index 195b713a9..d4955943f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/RuneAltar.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/botania/RuneAltar.java @@ -4,23 +4,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipeRuneAltar; +import vazkii.botania.client.integration.jei.runicaltar.RunicAltarRecipeCategory; import vazkii.botania.common.block.ModBlocks; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class RuneAltar extends VirtualizedRegistry { +public class RuneAltar extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(ore('gemEmerald'), item('minecraft:apple')).output(item('minecraft:diamond')).mana(500)")) public RecipeBuilder recipeBuilder() { @@ -101,6 +107,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(BotaniaAPI.runeAltarRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RunicAltarRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(0); + } + @Property(property = "input", requirement = "groovyscript.wiki.botania.rune_altar.input.required", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AlgorithmSeparator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AlgorithmSeparator.java index 7d94dde08..f146cf1a6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AlgorithmSeparator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AlgorithmSeparator.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.AlgorithmSeparatorRecipes; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class AlgorithmSeparator extends VirtualizedRegistry { +public class AlgorithmSeparator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'), item('minecraft:diamond'))")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlgorithmSeparatorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("2")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AnalysingChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AnalysingChamber.java index 7ee5a8f9d..4bc0ca33e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AnalysingChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AnalysingChamber.java @@ -3,12 +3,14 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.AnalysingChamberRecipes; import sonar.calculator.mod.common.recipes.CalculatorRecipe; @@ -16,6 +18,8 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; /** @@ -41,7 +45,7 @@ @Admonition(value = "groovyscript.wiki.calculator.analysing_chamber.note1", type = Admonition.Type.WARNING, format = Admonition.Format.STANDARD) } ) -public class AnalysingChamber extends VirtualizedRegistry { +public class AnalysingChamber extends VirtualizedRegistry implements IJEIRemoval.Default { public AnalysingChamber() { super(Alias.generateOfClass(AnalysingChamber.class).andGenerate("AnalyzingChamber")); @@ -74,6 +78,7 @@ public boolean remove(CalculatorRecipe recipe) { return true; } + // if this method gets changed the JEI compat also needs to be adjusted. @MethodDescription(example = @Example("item('sonarcore:reinforceddirtblock')")) public boolean removeByInput(IIngredient input) { return AnalysingChamberRecipes.instance().getRecipes().removeIf(r -> { @@ -101,6 +106,12 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + // change this if removeByInput gets changed (since the recipe is, properly, an output) + return Collections.singletonList(AnalysingChamberRecipes.instance().getRecipeID()); + } + @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AtomicCalculator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AtomicCalculator.java index 627da2a45..7361b0efa 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AtomicCalculator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/AtomicCalculator.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.AtomicCalculatorRecipes; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class AtomicCalculator extends VirtualizedRegistry { +public class AtomicCalculator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay')).output(item('minecraft:gold_ingot') * 4)")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AtomicCalculatorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("3")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/BasicCalculator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/BasicCalculator.java index b4b45d6ff..2a3ff7c32 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/BasicCalculator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/BasicCalculator.java @@ -3,21 +3,25 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.CalculatorRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class BasicCalculator extends VirtualizedRegistry { +public class BasicCalculator extends VirtualizedRegistry implements IJEIRemoval.Default { public BasicCalculator() { super(Alias.generateOfClass(BasicCalculator.class).andGenerate("Calculator")); @@ -89,6 +93,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CalculatorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("2")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ConductorMast.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ConductorMast.java index c9341fcdd..dad0db008 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ConductorMast.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ConductorMast.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.ConductorMastRecipes; import sonar.core.recipes.DefaultSonarRecipe; import sonar.core.recipes.ISonarRecipeObject; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class ConductorMast extends VirtualizedRegistry { +public class ConductorMast extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).value(100)")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ConductorMastRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ExtractionChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ExtractionChamber.java index ad2b47118..e672283b1 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ExtractionChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ExtractionChamber.java @@ -3,21 +3,25 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.ExtractionChamberRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class ExtractionChamber extends VirtualizedRegistry { +public class ExtractionChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))"), @@ -88,6 +92,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ExtractionChamberRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FabricationChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FabricationChamber.java index 88ed14826..250a47e4b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FabricationChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FabricationChamber.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -11,18 +12,17 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.registries.IForgeRegistryEntry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.FabricationChamberRecipes; import sonar.calculator.mod.common.recipes.FabricationSonarRecipe; import sonar.core.recipes.ISonarRecipeObject; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class FabricationChamber extends VirtualizedRegistry { +public class FabricationChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('calculator:circuitboard:8').withNbt([Stable: 0, Analysed: 1])).output(item('minecraft:diamond'))"), @@ -93,6 +93,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(FabricationChamberRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "Integer.MAX_VALUE", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FlawlessCalculator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FlawlessCalculator.java index 79319ca66..41280a68c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FlawlessCalculator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/FlawlessCalculator.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.FlawlessCalculatorRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class FlawlessCalculator extends VirtualizedRegistry { +public class FlawlessCalculator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay')).output(item('minecraft:gold_ingot') * 16)")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(FlawlessCalculatorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("4")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/GlowstoneExtractor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/GlowstoneExtractor.java index 8ca67edf0..1ceb477e4 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/GlowstoneExtractor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/GlowstoneExtractor.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.GlowstoneExtractorRecipes; import sonar.core.recipes.DefaultSonarRecipe; import sonar.core.recipes.ISonarRecipeObject; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class GlowstoneExtractor extends VirtualizedRegistry { +public class GlowstoneExtractor extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).value(100)")) public RecipeBuilder recipeBuilder() { @@ -69,6 +73,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(GlowstoneExtractorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/HealthProcessor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/HealthProcessor.java index 7b20c310b..9b9dbe0db 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/HealthProcessor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/HealthProcessor.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.HealthProcessorRecipes; import sonar.core.recipes.DefaultSonarRecipe; import sonar.core.recipes.ISonarRecipeObject; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class HealthProcessor extends VirtualizedRegistry { +public class HealthProcessor extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).value(100)")) public RecipeBuilder recipeBuilder() { @@ -69,6 +73,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(HealthProcessorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/PrecisionChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/PrecisionChamber.java index 5df6de724..0acb1c5c5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/PrecisionChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/PrecisionChamber.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.PrecisionChamberRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class PrecisionChamber extends VirtualizedRegistry { +public class PrecisionChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'), item('calculator:circuitdamaged:4'))"), @@ -87,6 +91,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(PrecisionChamberRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("2")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ProcessingChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ProcessingChamber.java index ac654c943..ddca1749b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ProcessingChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ProcessingChamber.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.ProcessingChamberRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class ProcessingChamber extends VirtualizedRegistry { +public class ProcessingChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ProcessingChamberRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ReassemblyChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ReassemblyChamber.java index 4a6d6202f..80ff0a09e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ReassemblyChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ReassemblyChamber.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.ReassemblyChamberRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class ReassemblyChamber extends VirtualizedRegistry { +public class ReassemblyChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ReassemblyChamberRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RedstoneExtractor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RedstoneExtractor.java index 43d488f12..d74043dc9 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RedstoneExtractor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RedstoneExtractor.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.RedstoneExtractorRecipes; import sonar.core.recipes.DefaultSonarRecipe; import sonar.core.recipes.ISonarRecipeObject; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class RedstoneExtractor extends VirtualizedRegistry { +public class RedstoneExtractor extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).value(100)")) public RecipeBuilder recipeBuilder() { @@ -69,6 +73,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RedstoneExtractorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RestorationChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RestorationChamber.java index 6e9b42271..8b46816ef 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RestorationChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/RestorationChamber.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.RestorationChamberRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class RestorationChamber extends VirtualizedRegistry { +public class RestorationChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RestorationChamberRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ScientificCalculator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ScientificCalculator.java index 37f3bb460..2ed74e65a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ScientificCalculator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/ScientificCalculator.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.ScientificRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class ScientificCalculator extends VirtualizedRegistry { +public class ScientificCalculator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay'), item('minecraft:clay')).output(item('minecraft:gold_ingot') * 2)")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ScientificRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("2")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StarchExtractor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StarchExtractor.java index 90339c87c..3b4b55eb4 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StarchExtractor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StarchExtractor.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.StarchExtractorRecipes; import sonar.core.recipes.DefaultSonarRecipe; import sonar.core.recipes.ISonarRecipeObject; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class StarchExtractor extends VirtualizedRegistry { +public class StarchExtractor extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).value(100)")) public RecipeBuilder recipeBuilder() { @@ -69,6 +73,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(StarchExtractorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StoneSeparator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StoneSeparator.java index 34dd2eae3..670d22edd 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StoneSeparator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/calculator/StoneSeparator.java @@ -3,20 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sonar.calculator.mod.common.recipes.CalculatorRecipe; import sonar.calculator.mod.common.recipes.StoneSeparatorRecipes; import sonar.core.recipes.ISonarRecipeObject; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class StoneSeparator extends VirtualizedRegistry { +public class StoneSeparator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'), item('minecraft:diamond'))")) public RecipeBuilder recipeBuilder() { @@ -84,6 +88,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(StoneSeparatorRecipes.instance().getRecipeID()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("2")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/chisel/Carving.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/chisel/Carving.java index eae973237..e35bb2f56 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/chisel/Carving.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/chisel/Carving.java @@ -5,25 +5,34 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; +import com.cleanroommc.groovyscript.core.mixin.chisel.ChiselRecipeWrapperAccessor; import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraft.util.SoundEvent; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import team.chisel.api.carving.CarvingUtils; import team.chisel.api.carving.ICarvingGroup; import team.chisel.api.carving.ICarvingRegistry; +import team.chisel.common.integration.jei.ChiselRecipeWrapper; import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription( category = RegistryDescription.Category.ENTRIES, admonition = @Admonition(value = "groovyscript.wiki.chisel.carving.note", type = Admonition.Type.DANGER, format = Admonition.Format.STANDARD), - isFullyDocumented = false // TODO fully document Chisel Carving -) -public class Carving extends VirtualizedRegistry> { + isFullyDocumented = false +) // TODO fully document Chisel Carving +public class Carving extends VirtualizedRegistry> implements IJEIRemoval.Default { private final AbstractReloadableStorage groupStorage = new AbstractReloadableStorage<>(); private final AbstractReloadableStorage> soundStorage = new AbstractReloadableStorage<>(); @@ -35,6 +44,10 @@ private static ICarvingRegistry getRegistry() { return CarvingUtils.getChiselRegistry(); } + private static IOperation groupNameOperation() { + return new WrapperOperation<>(ChiselRecipeWrapper.class, wrapper -> Collections.singletonList(OperationHandler.format("removeGroup", GroovyScriptCodeConverter.formatString(((ChiselRecipeWrapperAccessor) wrapper).getGroup().getName(), true)))); + } + public static CarvingGroup carvingGroup(String group) { return new CarvingGroup(group); } @@ -133,6 +146,19 @@ public void removeAll() { }); } + /** + * @see team.chisel.common.integration.jei.ChiselJEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("chisel.chiseling"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(groupNameOperation()); + } + public static class CarvingGroup { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/compactmachines/Miniaturization.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/compactmachines/Miniaturization.java index 50918e234..f8f66b8e3 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/compactmachines/Miniaturization.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/compactmachines/Miniaturization.java @@ -2,24 +2,44 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import it.unimi.dsi.fastutil.chars.Char2ObjectOpenHashMap; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import org.dave.compactmachines3.jei.MultiblockRecipeCategory; +import org.dave.compactmachines3.jei.MultiblockRecipeWrapper; import org.dave.compactmachines3.miniaturization.MultiblockRecipes; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class Miniaturization extends VirtualizedRegistry { +public class Miniaturization extends VirtualizedRegistry implements IJEIRemoval.Default { + + private static IOperation wrapperOperation() { + return new WrapperOperation<>(MultiblockRecipeWrapper.class, wrapper -> { + var builder = ImmutableList.builder(); + builder.add(OperationHandler.format("removeByCatalyst", GroovyScriptCodeConverter.getSingleItemStack(wrapper.recipe.getCatalystStack(), true))); + builder.add(OperationHandler.format("removeByOutput", GroovyScriptCodeConverter.getSingleItemStack(wrapper.recipe.getTargetStack(), true))); + // these methods are not actually implemented + //for (ItemStack stack : wrapper.recipe.getRequiredItemStacks()) { + // builder.add(JeiRemovalHelper.format("removeByInput", GroovyScriptCodeConverter.getSingleItemStack(stack, true))); + //} + return builder.build(); + }); + } @RecipeBuilderDescription(example = { @Example(".name('diamond_rectangle').input(item('minecraft:clay')).output(item('minecraft:clay')).symmetrical().ticks(10).shape([['www', 'www']]).key('w', blockstate('minecraft:diamond_block'))"), @@ -77,6 +97,16 @@ public SimpleObjectStream(MultiblockRecipes.getRecipes()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(MultiblockRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(wrapperOperation()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Dehydrator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Dehydrator.java index fde189f64..77c455902 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Dehydrator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Dehydrator.java @@ -4,16 +4,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import com.lothrazar.cyclicmagic.block.dehydrator.RecipeDeHydrate; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Dehydrator extends VirtualizedRegistry { +public class Dehydrator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))"), @@ -77,6 +87,19 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see com.lothrazar.cyclicmagic.compat.jei.JEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("dehydrator"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().exclude(0)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Hydrator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Hydrator.java index 8677fe393..a0c2dad1a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Hydrator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Hydrator.java @@ -4,21 +4,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.lothrazar.cyclicmagic.block.hydrator.RecipeHydrate; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Hydrator extends VirtualizedRegistry { +public class Hydrator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))"), @@ -82,6 +90,19 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see com.lothrazar.cyclicmagic.compat.jei.JEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("hydrator"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().exclude(0)); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "6")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Melter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Melter.java index db65ac0c4..1e1472998 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Melter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Melter.java @@ -4,21 +4,30 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; +import com.lothrazar.cyclicmagic.CyclicContent; import com.lothrazar.cyclicmagic.block.melter.RecipeMelter; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Melter extends VirtualizedRegistry { +public class Melter extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:gold_ingot')).fluidOutput(fluid('water') * 175)"), @@ -82,6 +91,16 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CyclicContent.melter.getContentName()); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().output(0)); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "4")}) @Property(property = "fluidOutput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Packager.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Packager.java index 6e64d9735..d2e60ae33 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Packager.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Packager.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -11,14 +12,17 @@ import com.google.common.collect.Lists; import com.lothrazar.cyclicmagic.block.packager.RecipePackager; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Packager extends VirtualizedRegistry { +public class Packager extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))"), @@ -82,6 +86,14 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see com.lothrazar.cyclicmagic.compat.jei.JEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("packager"); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "6")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Solidifier.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Solidifier.java index 4cba6412c..be925c884 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Solidifier.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/cyclic/Solidifier.java @@ -4,21 +4,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.google.common.collect.Lists; +import com.lothrazar.cyclicmagic.CyclicContent; import com.lothrazar.cyclicmagic.block.solidifier.RecipeSolidifier; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Solidifier extends VirtualizedRegistry { +public class Solidifier extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).fluidInput(fluid('water') * 175).output(item('minecraft:gold_ingot') * 3)"), @@ -82,6 +87,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CyclicContent.solidifier.getContentName()); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "4")}) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/draconicevolution/Fusion.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/draconicevolution/Fusion.java index 35d83ced8..0a24e89de 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/draconicevolution/Fusion.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/draconicevolution/Fusion.java @@ -1,22 +1,63 @@ package com.cleanroommc.groovyscript.compat.mods.draconicevolution; import com.brandon3055.draconicevolution.api.fusioncrafting.IFusionRecipe; +import com.brandon3055.draconicevolution.integration.jei.FusionRecipeWrapper; +import com.brandon3055.draconicevolution.integration.jei.RecipeCategoryUids; import com.brandon3055.draconicevolution.lib.RecipeManager; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.core.mixin.draconicevolution.FusionRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Fusion extends VirtualizedRegistry { +public class Fusion extends VirtualizedRegistry implements IJEIRemoval.Default { + + private static IOperation wrapperOperation() { + return new WrapperOperation<>(FusionRecipeWrapper.class, wrapper -> { + var builder = ImmutableList.builder(); + if (!wrapper.recipe.getRecipeCatalyst().isEmpty()) { + builder.add(OperationHandler.format("removeByCatalyst", GroovyScriptCodeConverter.getSingleItemStack(wrapper.recipe.getRecipeCatalyst(), true))); + } + // these methods are not actually implemented + //var output = wrapper.recipe.getRecipeOutput(wrapper.recipe.getRecipeCatalyst()); + //if (!output.isEmpty()) { + // builder.add(JeiRemovalHelper.format("removeByOutput", GroovyScriptCodeConverter.getSingleItemStack(wrapper.recipe.getRecipeOutput(wrapper.recipe.getRecipeCatalyst()), true))); + //} + //for (var ingredient : wrapper.recipe.getRecipeIngredients()) { + // if (ingredient instanceof String ore) { + // builder.add(JeiRemovalHelper.format("removeByInput", GroovyScriptCodeConverter.asGroovyCode(ore, true))); + // } else { + // ItemStack stack = null; + // if (ingredient instanceof ItemStack is) stack = is; + // else if (ingredient instanceof Item i) stack = new ItemStack(i); + // else if (ingredient instanceof Block b) stack = new ItemStack(b); + // + // if (stack != null) { + // builder.add(JeiRemovalHelper.format("removeByInput", GroovyScriptCodeConverter.getSingleItemStack(stack, true))); + // } + // } + //} + return builder.build(); + }); + } @Override public void onReload() { @@ -65,6 +106,16 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeCategoryUids.FUSION_CRAFTING); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(wrapperOperation()); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "54")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/AlloySmelter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/AlloySmelter.java index a20b3c621..465eb8f94 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/AlloySmelter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/AlloySmelter.java @@ -3,6 +3,9 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.EnderIORecipeBuilder; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.RecipeInput; @@ -21,19 +24,21 @@ import crazypants.enderio.base.recipe.lookup.ItemRecipeLeafNode; import crazypants.enderio.base.recipe.lookup.ItemRecipeNode; import crazypants.enderio.base.recipe.lookup.TriItemLookup; +import crazypants.enderio.machines.integration.jei.AlloyRecipeCategory; import crazypants.enderio.util.NNPair; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class AlloySmelter extends VirtualizedRegistry { +public class AlloySmelter extends VirtualizedRegistry implements IJEIRemoval.Default { @GroovyBlacklist private Set removalQueue; @@ -172,6 +177,15 @@ public void removeAll() { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlloyRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(3).input("remove")); + } @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "3")}) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Enchanter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Enchanter.java index cec0894f6..8b8903e5a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Enchanter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Enchanter.java @@ -4,6 +4,8 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.CustomEnchanterRecipe; import com.cleanroommc.groovyscript.core.mixin.enderio.SimpleRecipeGroupHolderAccessor; @@ -12,20 +14,24 @@ import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.IRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import crazypants.enderio.base.recipe.IMachineRecipe; import crazypants.enderio.base.recipe.MachineRecipeRegistry; import crazypants.enderio.base.recipe.enchanter.EnchanterRecipe; +import crazypants.enderio.machines.integration.jei.EnchanterRecipeCategory; import net.minecraft.enchantment.Enchantment; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Enchanter extends VirtualizedRegistry { +public class Enchanter extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".enchantment(enchantment('minecraft:unbreaking')).input(item('minecraft:diamond'))"), @@ -96,6 +102,16 @@ public void removeAll() { ((SimpleRecipeGroupHolderAccessor) MachineRecipeRegistry.instance.getRecipeHolderssForMachine(MachineRecipeRegistry.ENCHANTER)).getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(EnchanterRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei enchantment handler + } + public static class RecipeBuilder implements IRecipeBuilder { @Property(valid = @Comp(type = Comp.Type.NOT, value = "null")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMill.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMill.java index 7a4116c8a..5b45aafcb 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMill.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMill.java @@ -3,6 +3,9 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.EnderIORecipeBuilder; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.RecipeInput; @@ -16,13 +19,19 @@ import crazypants.enderio.base.recipe.RecipeLevel; import crazypants.enderio.base.recipe.RecipeOutput; import crazypants.enderio.base.recipe.sagmill.SagMillRecipeManager; +import crazypants.enderio.machines.integration.jei.sagmill.SagMillRecipeCategory; import it.unimi.dsi.fastutil.floats.FloatArrayList; import it.unimi.dsi.fastutil.floats.FloatList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class SagMill extends VirtualizedRegistry { +public class SagMill extends VirtualizedRegistry implements IJEIRemoval.Default { public SagMill() { super(Alias.generateOfClassAnd(SagMill.class, "Sag").and("SAGMill")); @@ -80,6 +89,16 @@ public void removeAll() { SagMillRecipeManager.getInstance().getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SagMillRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(0)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "4")}) @Property(property = "energy", valid = @Comp(type = Comp.Type.GT, value = "0")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMillGrinding.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMillGrinding.java index 0f5ce24a5..62fcdaf79 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMillGrinding.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SagMillGrinding.java @@ -3,6 +3,9 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.RecipeInput; import com.cleanroommc.groovyscript.helper.Alias; @@ -11,11 +14,17 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import crazypants.enderio.base.recipe.sagmill.GrindingBall; import crazypants.enderio.base.recipe.sagmill.SagMillRecipeManager; +import crazypants.enderio.machines.integration.jei.SagMillGrindingBallCategory; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class SagMillGrinding extends VirtualizedRegistry { +public class SagMillGrinding extends VirtualizedRegistry implements IJEIRemoval.Default { public SagMillGrinding() { super(Alias.generateOfClassAnd(SagMillGrinding.class, "Grinding")); @@ -68,6 +77,16 @@ public void removeAll() { SagMillRecipeManager.getInstance().getBalls().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SagMillGrindingBallCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().input("remove")); + } + @Property(property = "input", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SliceNSplice.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SliceNSplice.java index 0f68279e1..d744ad005 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SliceNSplice.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SliceNSplice.java @@ -4,6 +4,9 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.ManyToOneRecipe; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.RecipeInput; @@ -16,16 +19,16 @@ import crazypants.enderio.base.recipe.*; import crazypants.enderio.base.recipe.sagmill.SagMillRecipeManager; import crazypants.enderio.base.recipe.slicensplice.SliceAndSpliceRecipeManager; +import crazypants.enderio.machines.integration.jei.SliceAndSpliceRecipeCategory; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import java.util.*; @RegistryDescription -public class SliceNSplice extends VirtualizedRegistry { +public class SliceNSplice extends VirtualizedRegistry implements IJEIRemoval.Default { public SliceNSplice() { super(Alias.generateOfClassAnd(SliceNSplice.class, "SliceAndSplice")); @@ -110,13 +113,23 @@ public void removeAll() { SliceAndSpliceRecipeManager.getInstance().getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SliceAndSpliceRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().output("remove").exclude(0, 1)); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "6")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { - @Property(valid = @Comp(value = "0",type = Comp.Type.GTE)) + @Property(valid = @Comp(value = "0", type = Comp.Type.GTE)) private float xp; - @Property(valid = @Comp(value = "0",type = Comp.Type.GT)) + @Property(valid = @Comp(value = "0", type = Comp.Type.GT)) private int energy; @RecipeBuilderMethodDescription diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SoulBinder.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SoulBinder.java index 5df7ed87e..816e703a7 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SoulBinder.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/SoulBinder.java @@ -3,6 +3,9 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.enderio.SimpleRecipeGroupHolderAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -15,19 +18,22 @@ import crazypants.enderio.base.recipe.RecipeLevel; import crazypants.enderio.base.recipe.soul.BasicSoulBinderRecipe; import crazypants.enderio.base.recipe.soul.ISoulBinderRecipe; +import crazypants.enderio.machines.integration.jei.SoulBinderRecipeCategory; import net.minecraft.entity.EntityList; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.registry.EntityEntry; import net.minecraftforge.oredict.OreDictionary; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class SoulBinder extends VirtualizedRegistry { +public class SoulBinder extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).entity(entity('minecraft:zombie'), entity('minecraft:enderman')).name('groovy_example').energy(1000).xp(5)")) public RecipeBuilder recipeBuilder() { @@ -83,6 +89,16 @@ public void removeAll() { ((SimpleRecipeGroupHolderAccessor) MachineRecipeRegistry.instance.getRecipeHolderssForMachine(MachineRecipeRegistry.SOULBINDER)).getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SoulBinderRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(3).output("remove")); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Tank.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Tank.java index ed1a42ca0..71b090693 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Tank.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Tank.java @@ -5,6 +5,8 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.RecipeUtils; import com.cleanroommc.groovyscript.core.mixin.enderio.SimpleRecipeGroupHolderAccessor; @@ -14,20 +16,24 @@ import com.cleanroommc.groovyscript.helper.recipe.RecipeName; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.enderio.core.common.util.stackable.Things; +import com.google.common.collect.ImmutableList; import crazypants.enderio.base.recipe.IMachineRecipe; import crazypants.enderio.base.recipe.MachineRecipeRegistry; import crazypants.enderio.base.recipe.RecipeLevel; import crazypants.enderio.base.recipe.tank.TankMachineRecipe; +import crazypants.enderio.machines.integration.jei.TankRecipeCategory; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Tank extends VirtualizedRegistry { +public class Tank extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".drain().input(item('minecraft:clay')).output(item('minecraft:diamond')).fluidInput(fluid('water') * 500)"), @@ -200,6 +206,16 @@ public void removeAll() { ((SimpleRecipeGroupHolderAccessor) MachineRecipeRegistry.instance.getRecipeHolderssForMachine(MachineRecipeRegistry.TANK_EMPTYING)).getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(TankRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei tank + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidInput", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Vat.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Vat.java index afc271b09..d583a4981 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Vat.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/enderio/Vat.java @@ -4,6 +4,9 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.enderio.recipe.RecipeInput; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -15,17 +18,21 @@ import crazypants.enderio.base.recipe.*; import crazypants.enderio.base.recipe.vat.VatRecipe; import crazypants.enderio.base.recipe.vat.VatRecipeManager; +import crazypants.enderio.machines.integration.jei.VatRecipeCategory; import it.unimi.dsi.fastutil.floats.FloatArrayList; import it.unimi.dsi.fastutil.floats.FloatList; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Vat extends VirtualizedRegistry { +public class Vat extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(fluid('lava')).output(fluid('hootch')).baseMultiplier(2).itemInputLeft(item('minecraft:clay'), 2).itemInputLeft(item('minecraft:clay_ball'), 0.5).itemInputRight(item('minecraft:diamond'), 5).itemInputRight(item('minecraft:diamond_block'), 50).itemInputRight(item('minecraft:gold_block'), 10).itemInputRight(item('minecraft:gold_ingot'), 1).itemInputRight(item('minecraft:gold_nugget'), 0.1).energy(1000).tierEnhanced()"), @@ -86,6 +93,16 @@ public void removeAll() { VatRecipeManager.getInstance().getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(VatRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(FluidOperation.defaultOperation().output("remove")); + } + public static class RecipeBuilder implements IRecipeBuilder { @Property diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/DemonTradeManager.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/DemonTradeManager.java index e81393d46..38745afad 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/DemonTradeManager.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/DemonTradeManager.java @@ -5,17 +5,25 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import essentialcraft.api.DemonTrade; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.registry.EntityEntry; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription( category = RegistryDescription.Category.ENTRIES, admonition = @Admonition(value = "groovyscript.wiki.essentialcraft.demon_trade.note0", type = Admonition.Type.DANGER)) -public class DemonTradeManager extends VirtualizedRegistry { +public class DemonTradeManager extends VirtualizedRegistry implements IJEIRemoval.Default { public DemonTradeManager() { super(Alias.generateOf("DemonTrade")); @@ -89,4 +97,15 @@ public void removeAll() { public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(DemonTrade.TRADES).setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(essentialcraft.integration.jei.DemonTrading.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(0).output("remove")); + } + } \ No newline at end of file diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MagicianTable.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MagicianTable.java index 2394b6656..6ee57f9c2 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MagicianTable.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MagicianTable.java @@ -3,6 +3,9 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,10 +13,15 @@ import essentialcraft.api.MagicianTableRecipe; import essentialcraft.api.MagicianTableRecipes; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription(admonition = @Admonition(value = "groovyscript.wiki.essentialcraft.magician_table.note0", type = Admonition.Type.WARNING)) -public class MagicianTable extends VirtualizedRegistry { +public class MagicianTable extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond'), ore('ingotGold'), ore('ingotGold'), ore('stickWood'), ore('stickWood')).output(item('minecraft:iron_ingot')).mru(500)")) public MagicianTable.RecipeBuilder recipeBuilder() { @@ -51,6 +59,16 @@ public SimpleObjectStream streamRecipes() { }); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(essentialcraft.integration.jei.MagicianTable.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(5)); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "5", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MithrilineFurnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MithrilineFurnace.java index 72599bbd6..c05495836 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MithrilineFurnace.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/MithrilineFurnace.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,12 +11,15 @@ import essentialcraft.api.MithrilineFurnaceRecipe; import essentialcraft.api.MithrilineFurnaceRecipes; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class MithrilineFurnace extends VirtualizedRegistry { +public class MithrilineFurnace extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:coal_block') * 3).output(item('minecraft:diamond_block')).espe(500)")) public MithrilineFurnace.RecipeBuilder recipeBuilder() { @@ -64,6 +68,11 @@ public SimpleObjectStream streamRecipes() { }); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(essentialcraft.integration.jei.MithrilineFurnace.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/RadiatingChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/RadiatingChamber.java index 65974fd6c..a6eca29f6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/RadiatingChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/RadiatingChamber.java @@ -3,6 +3,9 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,10 +13,15 @@ import essentialcraft.api.RadiatingChamberRecipe; import essentialcraft.api.RadiatingChamberRecipes; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class RadiatingChamber extends VirtualizedRegistry { +public class RadiatingChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:nether_star'), item('minecraft:stone')).output(item('minecraft:beacon')).time(100).mruPerTick(10.0f).upperBalance(1.5f).lowerBalance(0.25f)")) public RadiatingChamber.RecipeBuilder recipeBuilder() { @@ -51,6 +59,16 @@ public SimpleObjectStream streamRecipes() { }); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(essentialcraft.integration.jei.RadiatingChamber.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().include(2)); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "2", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/WindRune.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/WindRune.java index 857dcf3e9..1f39e2c95 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/WindRune.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/essentialcraft/WindRune.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,10 +11,14 @@ import essentialcraft.api.WindImbueRecipe; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class WindRune extends VirtualizedRegistry { +public class WindRune extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:gold_block')).output(item('minecraft:diamond_block')).espe(500)")) public WindRune.RecipeBuilder recipeBuilder() { @@ -64,6 +69,11 @@ public SimpleObjectStream streamRecipes() { }); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(essentialcraft.integration.jei.WindImbue.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/BloodInfuser.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/BloodInfuser.java index af5f6642a..f4b9c5364 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/BloodInfuser.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/BloodInfuser.java @@ -2,6 +2,9 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -16,10 +19,16 @@ import org.cyclops.evilcraft.block.BloodInfuserConfig; import org.cyclops.evilcraft.core.recipe.custom.DurationXpRecipeProperties; import org.cyclops.evilcraft.core.recipe.custom.IngredientFluidStackAndTierRecipeComponent; +import org.cyclops.evilcraftcompat.modcompat.jei.bloodinfuser.BloodInfuserRecipeJEI; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class BloodInfuser extends VirtualizedRegistry> { +public class BloodInfuser extends VirtualizedRegistry> implements IJEIRemoval.Default { @Override public boolean isEnabled() { @@ -92,6 +101,16 @@ public SimpleObjectStream getCategories() { + return Collections.singletonList(BloodInfuserRecipeJEI.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().exclude(1)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/EnvironmentalAccumulator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/EnvironmentalAccumulator.java index 916926f9f..cde5de76f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/EnvironmentalAccumulator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/evilcraft/EnvironmentalAccumulator.java @@ -2,10 +2,14 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.cyclops.cyclopscore.recipe.custom.api.IRecipe; import org.cyclops.evilcraft.Configs; @@ -13,12 +17,18 @@ import org.cyclops.evilcraft.core.recipe.custom.EnvironmentalAccumulatorRecipeComponent; import org.cyclops.evilcraft.core.recipe.custom.EnvironmentalAccumulatorRecipeProperties; import org.cyclops.evilcraft.core.weather.WeatherType; +import org.cyclops.evilcraftcompat.modcompat.jei.environmentalaccumulator.EnvironmentalAccumulatorRecipeJEI; +import org.cyclops.evilcraftcompat.modcompat.jei.sanguinaryenvironmentalaccumulator.SanguinaryEnvironmentalAccumulatorRecipeJEI; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Locale; @RegistryDescription -public class EnvironmentalAccumulator extends VirtualizedRegistry> { +public class EnvironmentalAccumulator extends VirtualizedRegistry> implements IJEIRemoval.Default { @Override public boolean isEnabled() { @@ -91,6 +101,16 @@ public SimpleObjectStream getCategories() { + return ImmutableList.of(EnvironmentalAccumulatorRecipeJEI.CATEGORY, SanguinaryEnvironmentalAccumulatorRecipeJEI.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder> { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CombinationCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CombinationCrafting.java index df76efd1e..8f983c087 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CombinationCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CombinationCrafting.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.extendedcrafting; +import com.blakebr0.extendedcrafting.compat.jei.combinationcrafting.CombinationCraftingCategory; import com.blakebr0.extendedcrafting.config.ModConfig; import com.blakebr0.extendedcrafting.crafting.CombinationRecipe; import com.blakebr0.extendedcrafting.crafting.CombinationRecipeManager; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -15,14 +17,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; @RegistryDescription( admonition = @Admonition(value = "groovyscript.wiki.extendedcrafting.combination_crafting.note0", type = Admonition.Type.INFO, format = Admonition.Format.STANDARD) ) -public class CombinationCrafting extends VirtualizedRegistry { +public class CombinationCrafting extends VirtualizedRegistry implements IJEIRemoval.Default { public CombinationCrafting() { super(Alias.generateOfClassAnd(CombinationCrafting.class, "Combination")); @@ -108,6 +112,11 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CombinationCraftingCategory.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CompressionCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CompressionCrafting.java index 32f94d3a9..5840ee66b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CompressionCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/CompressionCrafting.java @@ -1,5 +1,6 @@ package com.cleanroommc.groovyscript.compat.mods.extendedcrafting; +import com.blakebr0.extendedcrafting.compat.jei.compressor.CompressorCraftingCategory; import com.blakebr0.extendedcrafting.config.ModConfig; import com.blakebr0.extendedcrafting.crafting.CompressorRecipe; import com.blakebr0.extendedcrafting.crafting.CompressorRecipeManager; @@ -7,17 +8,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class CompressionCrafting extends VirtualizedRegistry { +public class CompressionCrafting extends VirtualizedRegistry implements IJEIRemoval.Default { public CompressionCrafting() { super(Alias.generateOfClassAnd(CompressionCrafting.class, "Compression")); @@ -107,6 +117,17 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CompressorCraftingCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1), + ItemOperation.defaultOperation().exclude(0).input("removeByCatalyst")); + } + @Property(property = "output", valid = @Comp("1")) @Property(property = "input", valid = @Comp(type = Comp.Type.NOT, value = "null")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/EnderCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/EnderCrafting.java index 072974410..d23e67c1c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/EnderCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/EnderCrafting.java @@ -1,5 +1,6 @@ package com.cleanroommc.groovyscript.compat.mods.extendedcrafting; +import com.blakebr0.extendedcrafting.compat.jei.endercrafter.EnderCrafterCategory; import com.blakebr0.extendedcrafting.config.ModConfig; import com.blakebr0.extendedcrafting.crafting.endercrafter.EnderCrafterRecipeManager; import com.cleanroommc.groovyscript.api.IIngredient; @@ -7,15 +8,22 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RecipeBuilderDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; +import org.jetbrains.annotations.NotNull; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class EnderCrafting extends VirtualizedRegistry { +public class EnderCrafting extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".output(item('minecraft:stone')).matrix('BXX', 'X B').key('B', item('minecraft:stone')).key('X', item('minecraft:gold_ingot')).time(1).mirrored()"), @@ -104,4 +112,15 @@ public void removeAll() { EnderCrafterRecipeManager.getInstance().getRecipes().forEach(this::addBackup); EnderCrafterRecipeManager.getInstance().getRecipes().clear(); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(EnderCrafterCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0)); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/TableCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/TableCrafting.java index 4ce63b432..21bc7e048 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/TableCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extendedcrafting/TableCrafting.java @@ -1,5 +1,9 @@ package com.cleanroommc.groovyscript.compat.mods.extendedcrafting; +import com.blakebr0.extendedcrafting.compat.jei.tablecrafting.AdvancedTableCategory; +import com.blakebr0.extendedcrafting.compat.jei.tablecrafting.BasicTableCategory; +import com.blakebr0.extendedcrafting.compat.jei.tablecrafting.EliteTableCategory; +import com.blakebr0.extendedcrafting.compat.jei.tablecrafting.UltimateTableCategory; import com.blakebr0.extendedcrafting.crafting.table.ITieredRecipe; import com.blakebr0.extendedcrafting.crafting.table.TableRecipeManager; import com.cleanroommc.groovyscript.api.IIngredient; @@ -7,14 +11,20 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RecipeBuilderDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; +import java.util.Collection; import java.util.List; @RegistryDescription -public class TableCrafting extends VirtualizedRegistry { +public class TableCrafting extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".output(item('minecraft:stone') * 64).matrix('DLLLLLDDD', ' DNIGIND', 'DDDNIGIND', ' DLLLLLD').key('D', item('minecraft:diamond')).key('L', item('minecraft:redstone')).key('N', item('minecraft:stone')).key('I', item('minecraft:iron_ingot')).key('G', item('minecraft:gold_ingot')).tierUltimate()"), @@ -103,4 +113,15 @@ public void removeAll() { TableRecipeManager.getInstance().getRecipes().forEach(this::addBackup); TableRecipeManager.getInstance().getRecipes().clear(); } + + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(BasicTableCategory.UID, AdvancedTableCategory.UID, EliteTableCategory.UID, UltimateTableCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0)); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrabotany/Pedestal.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrabotany/Pedestal.java index 601f0b19a..7564fc24b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrabotany/Pedestal.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrabotany/Pedestal.java @@ -3,17 +3,25 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.meteor.extrabotany.api.ExtraBotanyAPI; +import com.meteor.extrabotany.client.integration.jei.pedestal.HammerRecipeCategory; import com.meteor.extrabotany.common.crafting.recipe.RecipePedestal; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Pedestal extends VirtualizedRegistry { +public class Pedestal extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -83,6 +91,16 @@ public void removeAll() { ExtraBotanyAPI.pedestalRecipes.clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(HammerRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(1); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Crusher.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Crusher.java index 9ac0a53db..293f1c436 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Crusher.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Crusher.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -10,13 +11,12 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.rwtema.extrautils2.api.machine.IMachineRecipe; import com.rwtema.extrautils2.api.machine.XUMachineCrusher; +import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; @RegistryDescription -public class Crusher extends VirtualizedRegistry { +public class Crusher extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -85,6 +85,14 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + /** + * @see com.rwtema.extrautils2.crafting.jei.JEIMachine#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("xu2_machine_" + XUMachineCrusher.INSTANCE.name); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "2", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Enchanter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Enchanter.java index 0d4833579..7e35ffa14 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Enchanter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Enchanter.java @@ -3,19 +3,19 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.rwtema.extrautils2.api.machine.IMachineRecipe; import com.rwtema.extrautils2.api.machine.XUMachineEnchanter; +import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; @RegistryDescription -public class Enchanter extends VirtualizedRegistry { +public class Enchanter extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -81,6 +81,14 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + /** + * @see com.rwtema.extrautils2.crafting.jei.JEIMachine#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("xu2_machine_" + XUMachineEnchanter.INSTANCE.name); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "2", type = Comp.Type.LTE)}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Furnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Furnace.java index a2263deeb..134b7d5ed 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Furnace.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Furnace.java @@ -3,16 +3,16 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.rwtema.extrautils2.api.machine.IMachineRecipe; import com.rwtema.extrautils2.api.machine.XUMachineFurnace; +import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; @RegistryDescription( admonition = @Admonition(type = Admonition.Type.WARNING, @@ -20,7 +20,7 @@ hasTitle = true, value = "groovyscript.wiki.extrautils2.furnace.removeWarning") ) -public class Furnace extends VirtualizedRegistry { +public class Furnace extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -85,6 +85,14 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + /** + * @see com.rwtema.extrautils2.crafting.jei.JEIMachine#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("xu2_machine_" + XUMachineFurnace.INSTANCE.name); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Generator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Generator.java index 7b37d0788..678f0644f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Generator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Generator.java @@ -2,11 +2,14 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.extrautils2.MachineInitAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import com.rwtema.extrautils2.api.machine.IMachineRecipe; import com.rwtema.extrautils2.api.machine.Machine; import com.rwtema.extrautils2.api.machine.MachineRegistry; @@ -15,14 +18,13 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class Generator extends VirtualizedRegistry> { +public class Generator extends VirtualizedRegistry> implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".generator('extrautils2:generator_pink').input(item('minecraft:clay')).energy(1000).energyPerTick(100)"), @@ -193,6 +195,19 @@ public void removeAll() { } } + /** + * @see com.rwtema.extrautils2.crafting.jei.JEIMachine#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Arrays.stream(Generators.values()).map(Generators::toString).map(MachineRegistry::getMachine).filter(Objects::nonNull).map(machine -> "xu2_machine_" + machine.name).collect(Collectors.toList()); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO JEI + } + public enum Generators { FURNACE("extrautils2:generator"), diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Resonator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Resonator.java index d9848e611..dd35e7fd5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Resonator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/extrautils2/Resonator.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,6 +11,7 @@ import com.cleanroommc.groovyscript.sandbox.ClosureHelper; import com.rwtema.extrautils2.api.resonator.IResonatorRecipe; import com.rwtema.extrautils2.crafting.ResonatorRecipe; +import com.rwtema.extrautils2.crafting.jei.JEIResonatorHandler; import com.rwtema.extrautils2.power.PowerManager; import com.rwtema.extrautils2.tile.TileRainbowGenerator; import com.rwtema.extrautils2.tile.TileResonator; @@ -19,13 +21,15 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.ItemHandlerHelper; import org.codehaus.groovy.runtime.MethodClosure; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Resonator extends VirtualizedRegistry { +public class Resonator extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -91,6 +95,11 @@ public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIResonatorHandler.uid); + } + public interface ShouldProgress { boolean run(TileEntity resonator, int frequency, ItemStack input); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/AlloyKiln.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/AlloyKiln.java index 24eee8d9e..d0a0fabca 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/AlloyKiln.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/AlloyKiln.java @@ -5,19 +5,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class AlloyKiln extends VirtualizedRegistry { +public class AlloyKiln extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond'), ore('ingotGold')).output(item('minecraft:clay'))")) public RecipeBuilder recipeBuilder() { @@ -104,6 +111,19 @@ public void removeAll() { AlloyRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.alloysmelter"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(2)); + } + @Property(property = "input", valid = @Comp("2")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/ArcFurnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/ArcFurnace.java index b2506e697..13d692099 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/ArcFurnace.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/ArcFurnace.java @@ -5,24 +5,44 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.helper.ArrayUtils; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class ArcFurnace extends VirtualizedRegistry { +public class ArcFurnace extends VirtualizedRegistry implements IJEIRemoval.Default { + + /** + * Since the size of Arc Furnace recipes is variable, we can't refer to a specific slot. + */ + private static IOperation primaryOutputOperation() { + return (layout, removing, exactInput) -> { + var maxSize = layout.getItemStacks().getGuiIngredients().size(); + + var slot = layout.getItemStacks().getGuiIngredients().get(maxSize - 2); + var stack = OperationHandler.getIngredientFromSlot(slot); + if (stack == null) return; + + var identity = GroovyScriptCodeConverter.getSingleItemStack(stack, true, false); + removing.add(OperationHandler.format("removeByOutput", identity)); + }; + } @RecipeBuilderDescription(example = @Example(".mainInput(item('minecraft:diamond')).input(item('minecraft:diamond'), ore('ingotGold')).output(item('minecraft:clay')).time(100).energyPerTick(100).slag(item('minecraft:gold_nugget'))")) public RecipeBuilder recipeBuilder() { @@ -134,6 +154,19 @@ public void removeAll() { ArcFurnaceRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.arcFurnace"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(primaryOutputOperation()); + } + @Property(property = "input", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "5", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnace.java index 31f3240b0..bf522712c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnace.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnace.java @@ -4,19 +4,25 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class BlastFurnace extends VirtualizedRegistry { +public class BlastFurnace extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).time(100).slag(item('minecraft:gold_nugget'))")) public static RecipeBuilder recipeBuilder() { @@ -102,6 +108,19 @@ public void removeAll() { BlastFurnaceRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.blastfurnace"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().exclude(2)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnaceFuel.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnaceFuel.java index f2a871596..88306ffc8 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnaceFuel.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlastFurnaceFuel.java @@ -4,19 +4,23 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class BlastFurnaceFuel extends VirtualizedRegistry { +public class BlastFurnaceFuel extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).time(100)")) public static RecipeBuilder recipeBuilder() { @@ -83,6 +87,14 @@ public void removeAll() { BlastFurnaceRecipe.blastFuels.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.blastfurnace.fuel"); + } + @Property(property = "input", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlueprintCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlueprintCrafting.java index df396541a..40c448e4a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlueprintCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BlueprintCrafting.java @@ -6,6 +6,8 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.ArrayUtils; @@ -13,15 +15,18 @@ import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class BlueprintCrafting extends VirtualizedRegistry { +public class BlueprintCrafting extends VirtualizedRegistry implements IJEIRemoval.Default { public BlueprintCrafting() { super(Alias.generateOfClassAnd(BlueprintCrafting.class, "Blueprint")); @@ -163,6 +168,19 @@ public void removeAll() { BlueprintCraftingRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.workbench"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO JEI + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "Integer.MAX_VALUE", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BottlingMachine.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BottlingMachine.java index a3f9151b8..c3236234a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BottlingMachine.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/BottlingMachine.java @@ -5,21 +5,28 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class BottlingMachine extends VirtualizedRegistry { +public class BottlingMachine extends VirtualizedRegistry implements IJEIRemoval.Default { public BottlingMachine() { super(Alias.generateOfClassAnd(BottlingMachine.class, "Bottling")); @@ -113,6 +120,19 @@ public void removeAll() { BottlingMachineRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.bottlingMachine"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(1)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/CokeOven.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/CokeOven.java index 07e46325d..fb1dbb50c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/CokeOven.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/CokeOven.java @@ -5,18 +5,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class CokeOven extends VirtualizedRegistry { +public class CokeOven extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).time(100).creosote(50)")) public static RecipeBuilder recipeBuilder() { @@ -105,6 +113,19 @@ public void removeAll() { CokeOvenRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.cokeoven"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(FluidOperation.defaultOperation().exclude(0), ItemOperation.defaultOperation()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Crusher.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Crusher.java index a3875d24f..e4f96270a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Crusher.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Crusher.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -11,13 +12,16 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import it.unimi.dsi.fastutil.floats.FloatArrayList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Crusher extends VirtualizedRegistry { +public class Crusher extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).energy(100)"), @@ -104,6 +108,14 @@ public void removeAll() { CrusherRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.crusher"); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Fermenter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Fermenter.java index 60305b379..d7e0b7155 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Fermenter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Fermenter.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -11,12 +12,15 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Fermenter extends VirtualizedRegistry { +public class Fermenter extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).fluidOutput(fluid('water')).energy(100)")) public static RecipeBuilder recipeBuilder() { @@ -104,6 +108,14 @@ public void removeAll() { FermenterRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.fermenter"); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "1", type = Comp.Type.LTE)}) @Property(property = "fluidOutput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/MetalPress.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/MetalPress.java index badd397e3..7d8f3a42f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/MetalPress.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/MetalPress.java @@ -6,19 +6,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class MetalPress extends VirtualizedRegistry { +public class MetalPress extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".mold(item('minecraft:diamond')).input(ore('ingotGold')).output(item('minecraft:clay')).energy(100)")) public static RecipeBuilder recipeBuilder() { @@ -180,6 +187,19 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(recipes).setRemover(this::remove); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.metalPress"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1), ItemOperation.defaultOperation().include(1).input("removeByMold")); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Mixer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Mixer.java index d1d0ff9db..cc4cef802 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Mixer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Mixer.java @@ -4,21 +4,28 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.ArrayUtils; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Mixer extends VirtualizedRegistry { +public class Mixer extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:diamond'), ore('ingotGold'), ore('ingotGold'), ore('ingotGold')).fluidInput(fluid('water')).fluidOutput(fluid('lava')).energy(100)")) public static RecipeBuilder recipeBuilder() { @@ -133,6 +140,19 @@ public void removeAll() { MixerRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.mixer"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(FluidOperation.defaultOperation().include(1)); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "Integer.MAX_VALUE", type = Comp.Type.LTE)}) @Property(property = "output", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Refinery.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Refinery.java index a046eded3..c4882051b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Refinery.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Refinery.java @@ -3,19 +3,26 @@ import blusunrize.immersiveengineering.api.crafting.RefineryRecipe; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Refinery extends VirtualizedRegistry { +public class Refinery extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".fluidInput(fluid('water'), fluid('water')).fluidOutput(fluid('lava')).energy(100)")) public static RecipeBuilder recipeBuilder() { @@ -105,6 +112,19 @@ public void removeAll() { RefineryRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.refinery"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(FluidOperation.defaultOperation().include(0, 1)); + } + @Property(property = "fluidInput", valid = @Comp("2")) @Property(property = "fluidOutput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Squeezer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Squeezer.java index 0643270e4..bf85d9dcf 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Squeezer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersiveengineering/Squeezer.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -11,14 +12,17 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.annotation.Nonnull; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Squeezer extends VirtualizedRegistry { +public class Squeezer extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).fluidOutput(fluid('lava')).energy(100)"), @@ -152,6 +156,14 @@ public void removeAll() { SqueezerRecipe.recipeList.clear(); } + /** + * @see blusunrize.immersiveengineering.common.util.compat.jei.JEIHelper + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ie.squeezer"); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "1", type = Comp.Type.LTE)}) @Property(property = "fluidOutput", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "1", type = Comp.Type.LTE)}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersivepetroleum/Distillation.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersivepetroleum/Distillation.java index fdefd1174..d360286f0 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersivepetroleum/Distillation.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/immersivepetroleum/Distillation.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -12,11 +13,17 @@ import it.unimi.dsi.fastutil.floats.FloatArrayList; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.Optional; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Distillation extends VirtualizedRegistry { +@Optional.Interface(modid = "justenoughpetroleum", iface = "com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval$Default") +public class Distillation extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".fluidInput(fluid('water') * 100).fluidOutput(fluid('water') * 50, fluid('lava') * 30).output(item('minecraft:diamond'), 0.5).output(item('minecraft:clay'), 0.2).output(item('minecraft:diamond'), 0.1).output(item('minecraft:clay'), 0.5).output(item('minecraft:diamond') * 5, 0.01).time(5).energy(1000)"), @@ -95,6 +102,18 @@ public void removeAll() { DistillationRecipe.recipeList.clear(); } + /** + * Note that this is added by a third-party compat mod, not base Immersive Petroleum. + * DistillationCategory + *

+ * {@code justenoughpetroleum.DistillationCategory.UID} + */ + @Override + @Optional.Method(modid = "justenoughpetroleum") + public @NotNull Collection getCategories() { + return Collections.singletonList("immersivepetroleum.distillation"); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "Integer.MAX_VALUE")}) @Property(property = "fluidOutput", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "Integer.MAX_VALUE")}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/BioReactor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/BioReactor.java index ce0eee6b0..5e05ab301 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/BioReactor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/BioReactor.java @@ -7,15 +7,23 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.google.common.base.Predicate; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class BioReactor extends VirtualizedRegistry { +public class BioReactor extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -72,4 +80,17 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see com.buuz135.industrial.jei.JEICustomPlugin + * @see com.buuz135.industrial.jei.reactor.ReactorRecipeCategory#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("bioreactor_accepted_items"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation()); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/Extractor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/Extractor.java index b993e0ab5..e858b2bc6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/Extractor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/Extractor.java @@ -1,19 +1,25 @@ package com.cleanroommc.groovyscript.compat.mods.industrialforegoing; import com.buuz135.industrial.api.extractor.ExtractorEntry; +import com.buuz135.industrial.jei.extractor.ExtractorRecipeCategory; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Extractor extends VirtualizedRegistry { +public class Extractor extends VirtualizedRegistry implements IJEIRemoval.Default { public Extractor() { super(Alias.generateOfClass(Extractor.class).andGenerate("TreeFluidExtractor")); @@ -85,4 +91,8 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ExtractorRecipeCategory.UID); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/FluidDictionary.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/FluidDictionary.java index b1d602245..3bb362971 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/FluidDictionary.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/FluidDictionary.java @@ -5,12 +5,17 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class FluidDictionary extends VirtualizedRegistry { +public class FluidDictionary extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -99,4 +104,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see com.buuz135.industrial.jei.fluiddictionary.FluidDictionaryCategory#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("fluid_dictionary"); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/LaserDrill.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/LaserDrill.java index 915af19d6..fdec5fc1f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/LaserDrill.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/LaserDrill.java @@ -5,21 +5,27 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraft.world.biome.Biome; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class LaserDrill extends VirtualizedRegistry> { +public class LaserDrill extends VirtualizedRegistry> implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".output(item('minecraft:clay')).lensMeta(5).weight(100)")) public RecipeBuilder recipeBuilder() { @@ -147,6 +153,19 @@ public SimpleObjectStream streamRecipes .setRemover(this::remove); } + /** + * @see com.buuz135.industrial.jei.laser.LaserRecipeCategory#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("laser_category"); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().input("removeByLens")); + } + @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreFermenter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreFermenter.java index 138dd619b..b529a590e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreFermenter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreFermenter.java @@ -6,13 +6,18 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class OreFermenter extends VirtualizedRegistry { +public class OreFermenter extends VirtualizedRegistry implements IJEIRemoval.Default { public OreFermenter() { super(Alias.generateOfClass(OreFermenter.class).andGenerate("Fermentation")); @@ -79,4 +84,8 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ORE_FERMENTER"); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreRaw.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreRaw.java index e9754ce8d..531d7f0f3 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreRaw.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreRaw.java @@ -1,19 +1,25 @@ package com.cleanroommc.groovyscript.compat.mods.industrialforegoing; import com.buuz135.industrial.api.recipe.ore.OreFluidEntryRaw; +import com.buuz135.industrial.jei.ore.OreWasherCategory; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class OreRaw extends VirtualizedRegistry { +public class OreRaw extends VirtualizedRegistry implements IJEIRemoval.Default { public OreRaw() { super(Alias.generateOfClass(OreRaw.class).andGenerate("Washing")); @@ -104,4 +110,9 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + // why does this one has a public static ID string when none of the others have one? + return Collections.singletonList(OreWasherCategory.ID); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreSieve.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreSieve.java index 14c8df88c..a4e9ed61b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreSieve.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/OreSieve.java @@ -6,14 +6,19 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class OreSieve extends VirtualizedRegistry { +public class OreSieve extends VirtualizedRegistry implements IJEIRemoval.Default { public OreSieve() { super(Alias.generateOfClass(OreSieve.class).andGenerate("FluidSieving")); @@ -86,4 +91,8 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("ORE_SIEVE"); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/ProteinReactor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/ProteinReactor.java index 02c01784b..5e914126b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/ProteinReactor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/ProteinReactor.java @@ -7,15 +7,23 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.google.common.base.Predicate; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class ProteinReactor extends VirtualizedRegistry { +public class ProteinReactor extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -72,4 +80,17 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see com.buuz135.industrial.jei.JEICustomPlugin + * @see com.buuz135.industrial.jei.reactor.ReactorRecipeCategory#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("protein_reactor_accepted_items"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation()); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/SludgeRefiner.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/SludgeRefiner.java index 04e7419d5..624b24c3e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/SludgeRefiner.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/industrialforegoing/SludgeRefiner.java @@ -6,13 +6,21 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.core.mixin.industrialforegoing.SludgeRefinerBlockAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class SludgeRefiner extends VirtualizedRegistry { +public class SludgeRefiner extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -71,4 +79,17 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see com.buuz135.industrial.jei.sludge.SludgeRefinerRecipeCategory#getUid() + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("sludge_refiner_category"); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation()); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/AnvilSmashing.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/AnvilSmashing.java index d2eeaf6cd..caed00bfc 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/AnvilSmashing.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/AnvilSmashing.java @@ -2,24 +2,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.inspirations.InspirationsRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import knightminer.inspirations.library.InspirationsRegistry; +import knightminer.inspirations.plugins.jei.smashing.SmashingRecipeCategory; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RegistryDescription -public class AnvilSmashing extends VirtualizedRegistry> { +public class AnvilSmashing extends VirtualizedRegistry> implements IJEIRemoval.Default { private final AbstractReloadableStorage> blockStorage = new AbstractReloadableStorage<>(); private final AbstractReloadableStorage materialStorage = new AbstractReloadableStorage<>(); @@ -129,6 +137,16 @@ public SimpleObjectStream> streamRecipes() { .setRemover(r -> remove(r.getKey(), r.getValue())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SmashingRecipeCategory.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei + } + public static class RecipeBuilder extends AbstractRecipeBuilder { @Property(requirement = "groovyscript.wiki.inspirations.anvil_smashing.input.required") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/Cauldron.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/Cauldron.java index 95d1429b3..521ce30bb 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/Cauldron.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/inspirations/Cauldron.java @@ -3,13 +3,18 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.inspirations.InspirationsRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import knightminer.inspirations.library.InspirationsRegistry; import knightminer.inspirations.library.recipe.cauldron.*; +import knightminer.inspirations.plugins.jei.cauldron.CauldronRecipeCategory; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionType; @@ -18,17 +23,17 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.registry.ForgeRegistries; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import slimeknights.mantle.util.RecipeMatch; -import java.util.Arrays; -import java.util.Locale; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription( admonition = @Admonition("groovyscript.wiki.inspirations.cauldron.note") ) -public class Cauldron extends VirtualizedRegistry { +public class Cauldron extends VirtualizedRegistry implements IJEIRemoval.Default { private static boolean checkRecipeMatches(ISimpleCauldronRecipe recipe, IIngredient input, ItemStack output, Object inputState, Object outputState) { // Check all relevant parts to determine if we need to match them and if they do match. @@ -214,6 +219,26 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CauldronRecipeCategory.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), ItemOperation.defaultOperation()); +// // add methods to remove by these custom values before uncommenting +// new OperationHandler.ClassSlotOperation<>( +// DyeIngredient.class, true, +// (stack, all) -> { +// var name = stack.getDye().toString(); +// return "dye" + name.substring(0, 1).toUpperCase() + name.substring(1); +// }), +// new OperationHandler.ClassSlotOperation<>( +// PotionIngredient.class, true, +// (stack, all) -> GroovyScriptCodeConverter.asGroovyCode(stack.getPotion().getEffects().get(0), false)) + } + @Property(property = "input", valid = @Comp("1"), needsOverride = true) @Property(property = "output", valid = @Comp("1"), needsOverride = true) @Property(property = "fluidInput", valid = @Comp("1"), needsOverride = true) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/DryingBasin.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/DryingBasin.java index 398f62f4d..560b9802d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/DryingBasin.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/DryingBasin.java @@ -2,6 +2,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; @@ -15,10 +16,15 @@ import org.cyclops.integrateddynamics.block.BlockDryingBasin; import org.cyclops.integrateddynamics.block.BlockDryingBasinConfig; import org.cyclops.integrateddynamics.block.BlockMechanicalDryingBasin; +import org.cyclops.integrateddynamicscompat.modcompat.jei.dryingbasin.DryingBasinRecipeCategory; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class DryingBasin extends VirtualizedRegistry> { +public class DryingBasin extends VirtualizedRegistry> implements IJEIRemoval.Default { @Override public boolean isEnabled() { @@ -90,6 +96,11 @@ public SimpleObjectStream getCategories() { + return Collections.singletonList(DryingBasinRecipeCategory.NAME); + } + public static class RecipeBuilder extends AbstractRecipeBuilder> { @Property("groovyscript.wiki.integrateddynamics.drying_basin.basic.value") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalDryingBasin.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalDryingBasin.java index bc52ade5d..30d7c365f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalDryingBasin.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalDryingBasin.java @@ -1,6 +1,7 @@ package com.cleanroommc.groovyscript.compat.mods.integrateddynamics; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; @@ -10,9 +11,14 @@ import org.cyclops.integrateddynamics.Configs; import org.cyclops.integrateddynamics.block.BlockMechanicalDryingBasin; import org.cyclops.integrateddynamics.block.BlockMechanicalDryingBasinConfig; +import org.cyclops.integrateddynamicscompat.modcompat.jei.mechanicaldryingbasin.MechanicalDryingBasinRecipeCategory; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class MechanicalDryingBasin extends VirtualizedRegistry> { +public class MechanicalDryingBasin extends VirtualizedRegistry> implements IJEIRemoval.Default { @Override public boolean isEnabled() { @@ -80,4 +86,9 @@ public SimpleObjectStream(BlockMechanicalDryingBasin.getInstance().getRecipeRegistry().allRecipes()) .setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(MechanicalDryingBasinRecipeCategory.NAME); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalSqueezer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalSqueezer.java index 8f0d3c2ea..4e85c3d94 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalSqueezer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/MechanicalSqueezer.java @@ -1,8 +1,12 @@ package com.cleanroommc.groovyscript.compat.mods.integrateddynamics; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.cyclops.cyclopscore.recipe.custom.api.IRecipe; import org.cyclops.cyclopscore.recipe.custom.component.DurationRecipeProperties; @@ -11,9 +15,15 @@ import org.cyclops.integrateddynamics.Configs; import org.cyclops.integrateddynamics.block.BlockMechanicalSqueezer; import org.cyclops.integrateddynamics.block.BlockMechanicalSqueezerConfig; +import org.cyclops.integrateddynamicscompat.modcompat.jei.mechanicalsqueezer.MechanicalSqueezerRecipeCategory; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class MechanicalSqueezer extends VirtualizedRegistry> { +public class MechanicalSqueezer extends VirtualizedRegistry> implements IJEIRemoval.Default { @Override public boolean isEnabled() { @@ -70,4 +80,15 @@ public SimpleObjectStream(BlockMechanicalSqueezer.getInstance().getRecipeRegistry().allRecipes()) .setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(MechanicalSqueezerRecipeCategory.NAME); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0)); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/Squeezer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/Squeezer.java index ef05a91e8..2b9de3813 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/Squeezer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/integrateddynamics/Squeezer.java @@ -2,10 +2,14 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.cyclops.cyclopscore.recipe.custom.api.IRecipe; import org.cyclops.cyclopscore.recipe.custom.component.DummyPropertiesComponent; @@ -16,13 +20,17 @@ import org.cyclops.integrateddynamics.block.BlockMechanicalSqueezer; import org.cyclops.integrateddynamics.block.BlockSqueezer; import org.cyclops.integrateddynamics.block.BlockSqueezerConfig; +import org.cyclops.integrateddynamicscompat.modcompat.jei.squeezer.SqueezerRecipeCategory; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Squeezer extends VirtualizedRegistry> { +public class Squeezer extends VirtualizedRegistry> implements IJEIRemoval.Default { @Override public boolean isEnabled() { @@ -84,6 +92,16 @@ public SimpleObjectStream getCategories() { + return Collections.singletonList(SqueezerRecipeCategory.NAME); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidOutput", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) public static class RecipeBuilder extends AbstractRecipeBuilder> { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/Description.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/Description.java index 04b37c619..3f9138f02 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/Description.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/Description.java @@ -5,6 +5,7 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.jei.IngredientInfoRecipeAccessor; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import mezz.jei.api.IModRegistry; @@ -14,15 +15,17 @@ import mezz.jei.plugins.jei.info.IngredientInfoRecipeCategory; import net.minecraft.item.ItemStack; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @RegistryDescription(category = RegistryDescription.Category.ENTRIES) -public class Description extends VirtualizedRegistry, List>> { +public class Description extends VirtualizedRegistry, List>> implements IJEIRemoval.Default { /** * Called by {@link JeiPlugin#register} @@ -95,4 +98,8 @@ public void remove(IIngredient... target) { addBackup(Pair.of(Arrays.asList(target), null)); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(VanillaRecipeCategoryUid.INFORMATION); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/JeiRemovalHelper.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/JeiRemovalHelper.java new file mode 100644 index 000000000..88ed6ef63 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/JeiRemovalHelper.java @@ -0,0 +1,95 @@ +package com.cleanroommc.groovyscript.compat.mods.jei.removal; + +import com.cleanroommc.groovyscript.api.INamed; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.JeiPlugin; +import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; +import com.cleanroommc.groovyscript.core.mixin.jei.RecipeGuiLogicAccessor; +import com.cleanroommc.groovyscript.core.mixin.jei.RecipesGuiAccessor; +import com.google.common.collect.Lists; +import mezz.jei.api.gui.IRecipeLayout; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import org.apache.commons.lang3.tuple.Pair; +import org.lwjgl.input.Mouse; + +import java.util.List; + +public class JeiRemovalHelper { + + /** + * Generates one or more methods to remove the targeted recipe in JEI. + * + * @param uid the id of the targeted JEI category + * @param layout the recipe layout being targeted + * @return a pair where the left value is a String representing the category and + * the right value is a List of Strings representing any number of methods + */ + public static Pair> getRemovalMethod(String uid, IRecipeLayout layout) { + + // TODO JEI why does vanilla have to be special cased, can that be changed? + for (INamed registry : Lists.newArrayList(VanillaModule.crafting, VanillaModule.furnace)) { + if (registry.isEnabled() && registry instanceof IJEIRemoval removal && removal.getCategories().contains(uid)) { + var operation = removal.getRemoval(layout); + if (operation.isEmpty()) continue; + return Pair.of(registry.getName(), operation); + } + } + + // TODO implode + for (INamed registry : Lists.newArrayList( + VanillaModule.inWorldCrafting.fluidToFluid, + VanillaModule.inWorldCrafting.fluidToItem, + VanillaModule.inWorldCrafting.fluidToBlock, + VanillaModule.inWorldCrafting.explosion, + VanillaModule.inWorldCrafting.burning, + VanillaModule.inWorldCrafting.pistonPush)) { + if (registry.isEnabled() && registry instanceof IJEIRemoval removal && removal.getCategories().contains(uid)) { + var operation = removal.getRemoval(layout); + if (operation.isEmpty()) continue; + return Pair.of(registry.getName(), operation); + } + } + + for (var groovyContainer : ModSupport.getAllContainers()) { + if (!groovyContainer.isLoaded()) continue; + for (var registry : groovyContainer.get().getRegistries()) { + if (registry.isEnabled() && registry instanceof IJEIRemoval removal && removal.getCategories().contains(uid)) { + var operation = removal.getRemoval(layout); + if (operation.isEmpty()) continue; + return Pair.of(String.format("mods.%s.%s", groovyContainer.getModId(), registry.getName()), operation); + } + } + } + return null; + } + + + public static String getFocusedRecipeUid() { + var state = ((RecipeGuiLogicAccessor) ((RecipesGuiAccessor) JeiPlugin.jeiRuntime.getRecipesGui()).getLogic()).getState(); + if (state == null) return ""; + return state.getRecipeCategories().get(state.getRecipeCategoryIndex()).getUid(); + } + + /** + * Get the recipe layout being hovered and return the ingredient groups for further parsing + * + * @return ingredient groups attached to targeted recipe layout + */ + public static IRecipeLayout getRecipeLayoutUnderMouse() { + var layouts = ((RecipesGuiAccessor) JeiPlugin.jeiRuntime.getRecipesGui()).getRecipeLayouts(); + if (layouts == null) return null; + var scaledresolution = new ScaledResolution(Minecraft.getMinecraft()); + var mouseX = Mouse.getX() * scaledresolution.getScaledWidth() / Minecraft.getMinecraft().displayWidth; + var mouseY = scaledresolution.getScaledHeight() - Mouse.getY() * scaledresolution.getScaledHeight() / Minecraft.getMinecraft().displayHeight - 1; + + for (var layout : layouts) { + if (layout.isMouseOver(mouseX, mouseY)) { + return layout; + } + } + return null; + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/OperationHandler.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/OperationHandler.java new file mode 100644 index 000000000..9b8630dd5 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/OperationHandler.java @@ -0,0 +1,116 @@ +package com.cleanroommc.groovyscript.compat.mods.jei.removal; + +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.JeiPlugin; +import com.cleanroommc.groovyscript.core.mixin.jei.RecipeLayoutAccessor; +import com.google.common.collect.ImmutableList; +import mezz.jei.api.gui.IGuiIngredient; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.recipe.IRecipeWrapper; +import mezz.jei.startup.StackHelper; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@ParametersAreNonnullByDefault +public class OperationHandler { + + private static final String EXACT_METHOD_NAME = "removeByExactInput"; + private static final boolean IS_EXACT_METHOD_ENABLED = false; + + private static StackHelper stackHelper; + + /** + * Varargs variant of {@link #removalOptions(IRecipeLayout, List)}. + * + * @see #removalOptions(IRecipeLayout, List) + */ + public static List removalOptions(IRecipeLayout layout, IOperation... operations) { + return removalOptions(layout, Arrays.asList(operations)); + } + + /** + * Iterates through the provided list of {@link IOperation}s and calls the {@link IOperation#parse(IRecipeLayout, List, List)} + * method with local lists before sorting them and returning a new immutable list constructed from the temporary lists. + * + * @param layout the recipe layout to be parsed + * @param operations a list of operations to perform to generate the removal methods + * @return an immutable list of strings, with each one being a removal method for the given recipe contained by the recipe layout + */ + public static List removalOptions(IRecipeLayout layout, List operations) { + var removing = new ArrayList(); + var exactInput = new ArrayList(); + + for (var operation : operations) operation.parse(layout, removing, exactInput); + + var builder = ImmutableList.builder(); + if (IS_EXACT_METHOD_ENABLED && exactInput.size() > 1) builder.add(format(EXACT_METHOD_NAME, exactInput)); + builder.addAll(removing.stream().distinct().sorted().collect(Collectors.toList())); + return builder.build(); + } + + /** + * @return the default operations to be used, which will get all item and fluid stacks + * @see ItemOperation#defaultOperation() + * @see FluidOperation#defaultOperation() + */ + public static List defaultOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation()); + } + + /** + * Get the recipe wrapper from the recipe layout. Requires the {@link RecipeLayoutAccessor} mixin. + * + * @param layout the recipe layout + * @return the recipe wrapper the recipe layout contains + */ + public static IRecipeWrapper getRecipeWrapper(IRecipeLayout layout) { + return ((RecipeLayoutAccessor) layout).getRecipeWrapper(); + } + + public static StackHelper getStackHelper() { + if (stackHelper == null) stackHelper = (StackHelper) JeiPlugin.jeiHelpers.getStackHelper(); + return stackHelper; + } + + /** + * Check the displayed ingredient first, otherwise try to use the first of all ingredients. + * If getAllIngredients is empty, return null. + * Use of this should contain null checks. + * + * @param slot the gui ingredient slot the ingredient should be gotten from + * @param the type of the gui ingredient + * @return the displayed ingredient, if there are multiple then the first of the list, otherwise null. + */ + @Nullable + public static T getIngredientFromSlot(IGuiIngredient slot) { + var stack = slot.getDisplayedIngredient(); + if (stack == null && !slot.getAllIngredients().isEmpty()) stack = slot.getAllIngredients().get(0); + return stack; + } + + /** + * @param method name of the method to call + * @param params one or more parameters of the method + * @return a string representing a GrS method + * @see #format(String, List) + */ + public static String format(String method, String... params) { + return String.format("%s(%s)", method, String.join(", ", params)); + } + + /** + * @param method name of the method to call + * @param params one or more parameters of the method + * @return a string representing a GrS method + */ + public static String format(String method, List params) { + return String.format("%s(%s)", method, String.join(", ", params)); + } +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/RemoveJEIRecipe.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/RemoveJEIRecipe.java new file mode 100644 index 000000000..cee7ff2ff --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/jei/removal/RemoveJEIRecipe.java @@ -0,0 +1,109 @@ +package com.cleanroommc.groovyscript.compat.mods.jei.removal; + +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.command.TextCopyable; +import mezz.jei.api.gui.IRecipeLayout; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.text.*; +import net.minecraft.util.text.event.ClickEvent; +import net.minecraft.util.text.event.HoverEvent; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.List; + +public class RemoveJEIRecipe { + + public static final RemoveJEIRecipe INSTANCE = new RemoveJEIRecipe(); + + private static final ITextComponent GOLD_SEPARATOR = new TextComponentString("====================================").setStyle(new Style().setColor(TextFormatting.GOLD)); + + private static final int SHORTHAND_TRIM_LENGTH = 60; + private static final int SHORTHAND_TRIM_MARGIN = 5; + private static final String SHORTHAND_INDICATOR = TextFormatting.RED + "..."; + + private static final String ERROR_KEY = "groovyscript.jei.remove_recipe.unknown_category"; + private static final Style ERROR_STYLE = new Style().setColor(TextFormatting.RED); + private static final Style ERROR_COPY_STYLE = new Style().setColor(TextFormatting.GOLD); + + private static final String ISSUES_LINK = "https://github.com/CleanroomMC/GroovyScript/issues"; + private static final String GITHUB_NAME = "GitHub"; + private static final Style COPY_STYLE = new Style() + .setColor(TextFormatting.LIGHT_PURPLE) + .setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new TextComponentTranslation("groovyscript.jei.remove_recipe.view_on_github"))) + .setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, ISSUES_LINK)); + + private boolean hasSeenFirstExecutionNotice; + + private String lastUid = ""; + private IRecipeLayout lastLayout; + private int combo; + private Pair> removal; + + private static void missingUid(String uid) { + Minecraft.getMinecraft().player.sendMessage(new TextComponentTranslation(ERROR_KEY, TextCopyable.string(uid, uid).build().setStyle(ERROR_COPY_STYLE)).setStyle(ERROR_STYLE)); + } + + private static void printMessage(String prefix, String shorthand) { + var msg = shorthand.length() > SHORTHAND_TRIM_LENGTH + SHORTHAND_TRIM_MARGIN + ? shorthand.substring(0, SHORTHAND_TRIM_LENGTH) + SHORTHAND_INDICATOR + : shorthand; + printMessage(TextCopyable.string(String.format("%s.%s", prefix, shorthand), msg).build()); + } + + private static void printMessage(ITextComponent message) { + GroovyLog.get().debug(message.getUnformattedText()); + Minecraft.getMinecraft().player.sendMessage(message); + } + + public boolean checkRemoval(IRecipeLayout layout, String uid, boolean inverseComboOrder) { + if (!hasSeenFirstExecutionNotice) handleFirstExecution(); + + var matchesLast = lastUid.equals(uid) && lastLayout == layout; + + if (matchesLast && removal != null && !removal.getValue().isEmpty()) { + adjustCombo(inverseComboOrder); + } else { + lastUid = uid; + lastLayout = layout; + combo = 0; + removal = JeiRemovalHelper.getRemovalMethod(JeiRemovalHelper.getFocusedRecipeUid(), layout); + } + + if (removal == null) { + missingUid(uid); + return false; + } + + Minecraft.getMinecraft().player.sendMessage(GOLD_SEPARATOR); + + var text = TextFormatting.getTextWithoutFormattingCodes(String.format("%s.%s", removal.getKey(), removal.getValue().get(combo))); + if (text != null) GuiScreen.setClipboardString(text); + + if (matchesLast) { + printMessage(removal.getKey(), removal.getValue().get(combo)); + } else { + for (String s : removal.getValue()) { + printMessage(removal.getKey(), s); + } + } + return true; + } + + private void adjustCombo(boolean inverseComboOrder) { + if (removal == null || removal.getValue().isEmpty()) { + combo = 0; + return; + } + if (inverseComboOrder) combo--; + else combo++; + if (combo > removal.getValue().size() - 1) combo = 0; + if (combo < 0) combo = removal.getValue().size() - 1; + } + + private void handleFirstExecution() { + Minecraft.getMinecraft().player.sendMessage(new TextComponentTranslation("groovyscript.jei.remove_recipe.first_time", new TextComponentString(GITHUB_NAME).setStyle(COPY_STYLE))); + hasSeenFirstExecutionNotice = true; + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Aggregator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Aggregator.java index 57b776748..876463ae5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Aggregator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Aggregator.java @@ -3,19 +3,23 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import io.github.phantamanta44.libnine.LibNine; +import io.github.phantamanta44.threng.integration.jei.ThrEngJei; import io.github.phantamanta44.threng.recipe.AggRecipe; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.stream.Collectors; @RegistryDescription -public class Aggregator extends VirtualizedRegistry { +public class Aggregator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(ore('blockGlass'), item('minecraft:diamond')).output(item('minecraft:diamond') * 4)"), @@ -73,6 +77,11 @@ public void removeAll() { recipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ThrEngJei.CAT_AGG); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "3")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Centrifuge.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Centrifuge.java index f119040df..3ac4e7e4a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Centrifuge.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Centrifuge.java @@ -3,18 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import io.github.phantamanta44.libnine.LibNine; +import io.github.phantamanta44.threng.integration.jei.ThrEngJei; import io.github.phantamanta44.threng.recipe.PurifyRecipe; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Centrifuge extends VirtualizedRegistry { +public class Centrifuge extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(ore('blockGlass')).output(item('minecraft:diamond'))"), @@ -72,6 +76,11 @@ public void removeAll() { recipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ThrEngJei.CAT_PURIFY); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Energizer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Energizer.java index 8ff391988..a1ee1f0b0 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Energizer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Energizer.java @@ -3,18 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import io.github.phantamanta44.libnine.LibNine; +import io.github.phantamanta44.threng.integration.jei.ThrEngJei; import io.github.phantamanta44.threng.recipe.EnergizeRecipe; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Energizer extends VirtualizedRegistry { +public class Energizer extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(ore('blockGlass')).energy(50).output(item('minecraft:diamond'))"), @@ -72,6 +76,11 @@ public void removeAll() { recipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ThrEngJei.CAT_ENERGIZE); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Etcher.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Etcher.java index 575a440f9..5334f8e39 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Etcher.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/lazyae2/Etcher.java @@ -3,18 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import io.github.phantamanta44.libnine.LibNine; +import io.github.phantamanta44.threng.integration.jei.ThrEngJei; import io.github.phantamanta44.threng.recipe.EtchRecipe; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Etcher extends VirtualizedRegistry { +public class Etcher extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(ore('blockGlass')).top(item('minecraft:diamond')).bottom(item('minecraft:clay')).output(item('minecraft:diamond') * 5)"), @@ -72,6 +76,11 @@ public void removeAll() { recipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ThrEngJei.CAT_ETCH); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/InjectionChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/InjectionChamber.java index 7293b60c5..62c6c8631 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/InjectionChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/InjectionChamber.java @@ -3,18 +3,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.GasRecipeBuilder; +import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.IJEIRemovalGas; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.VirtualizedMekanismRegistry; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; +import com.google.common.collect.ImmutableList; import mekanism.api.gas.GasStack; import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.AdvancedMachineInput; import mekanism.common.recipe.machines.InjectionRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + @RegistryDescription public class InjectionChamber extends VirtualizedMekanismRegistry { @@ -53,6 +61,11 @@ public boolean removeByInput(IIngredient ingredient, GasStack gasInput) { return found; } + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(2), FluidOperation.defaultOperation(), IJEIRemovalGas.getDefaultGas()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "gasInput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Mekanism.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Mekanism.java index 0fcf32742..10c46544b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Mekanism.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Mekanism.java @@ -40,6 +40,8 @@ public class Mekanism extends GroovyPropertyContainer { public final ThermalEvaporationPlant thermalEvaporationPlant = new ThermalEvaporationPlant(); public final Washer washer = new Washer(); + // TODO The Rotary Condensentrator does not have compat currently. This should be added. + @Optional.Method(modid = "mekanism") public static String asGroovyCode(Gas gasStack, boolean colored) { @@ -56,9 +58,14 @@ public static boolean isEmpty(@Nullable GasStack gasStack) { return gasStack == null || gasStack.getGas() == null || gasStack.amount <= 0; } + @Optional.Method(modid = "mekanism") + public static String getSingleGasStack(GasStack gasStack, boolean colored) { + return asGroovyCode(gasStack.getGas(), colored); + } + @Optional.Method(modid = "mekanism") public static String asGroovyCode(GasStack gasStack, boolean colored) { - return asGroovyCode(gasStack.getGas(), colored) + GroovyScriptCodeConverter.formatMultiple(gasStack.amount, colored); + return getSingleGasStack(gasStack, colored) + GroovyScriptCodeConverter.formatMultiple(gasStack.amount, colored); } @Optional.Method(modid = "mekanism") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/MetallurgicInfuser.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/MetallurgicInfuser.java index 9bc7caecb..62ada9462 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/MetallurgicInfuser.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/MetallurgicInfuser.java @@ -3,21 +3,37 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; +import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.IJEIRemovalGas; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.VirtualizedMekanismRegistry; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; +import com.google.common.collect.ImmutableList; import mekanism.api.infuse.InfuseRegistry; import mekanism.api.infuse.InfuseType; +import mekanism.client.jei.machine.other.MetallurgicInfuserRecipeWrapper; import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.InfusionInput; import mekanism.common.recipe.machines.MetallurgicInfuserRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collections; +import java.util.List; + @RegistryDescription public class MetallurgicInfuser extends VirtualizedMekanismRegistry { + private static IOperation infuseTypeOperation() { + return new WrapperOperation<>(MetallurgicInfuserRecipeWrapper.class, wrapper -> Collections.singletonList(OperationHandler.format("removeByInput", Mekanism.asGroovyCode(((MetallurgicInfuserRecipe) wrapper.getRecipe()).getInput().infuse.getType(), true)))); + } + public MetallurgicInfuser() { super(RecipeHandler.Recipe.METALLURGIC_INFUSER); } @@ -59,6 +75,12 @@ public boolean removeByInput(IIngredient ingredient, InfuseType infuseType) { return found; } + @Override + public @NotNull List getJEIOperations() { + // TODO jei methods don't exist to use properly + return ImmutableList.of(infuseTypeOperation(), ItemOperation.defaultOperation().exclude(2), FluidOperation.defaultOperation(), IJEIRemovalGas.getDefaultGas()); + } + public boolean removeByInput(IIngredient ingredient, String infuseType) { return removeByInput(ingredient, InfuseRegistry.get(infuseType)); } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/OsmiumCompressor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/OsmiumCompressor.java index 941376970..fb1991349 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/OsmiumCompressor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/OsmiumCompressor.java @@ -3,10 +3,15 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.GasRecipeBuilder; +import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.IJEIRemovalGas; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.VirtualizedMekanismRegistry; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; +import com.google.common.collect.ImmutableList; import mekanism.api.gas.Gas; import mekanism.api.gas.GasStack; import mekanism.common.MekanismFluids; @@ -15,8 +20,11 @@ import mekanism.common.recipe.machines.OsmiumCompressorRecipe; import mekanism.common.recipe.outputs.ItemStackOutput; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + @RegistryDescription public class OsmiumCompressor extends VirtualizedMekanismRegistry { @@ -55,6 +63,11 @@ public boolean removeByInput(IIngredient ingredient, GasStack gasInput) { return found; } + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(2), FluidOperation.defaultOperation(), IJEIRemovalGas.getDefaultGas()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "gasInput", defaultValue = "MekanismFluids.LiquidOsmium", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/PurificationChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/PurificationChamber.java index 81f393648..00c741e9a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/PurificationChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/PurificationChamber.java @@ -3,19 +3,27 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.GasRecipeBuilder; +import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.IJEIRemovalGas; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.VirtualizedMekanismRegistry; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; +import com.google.common.collect.ImmutableList; import mekanism.api.gas.GasStack; import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.AdvancedMachineInput; import mekanism.common.recipe.machines.PurificationRecipe; import mekanism.common.recipe.outputs.ItemStackOutput; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + @RegistryDescription public class PurificationChamber extends VirtualizedMekanismRegistry { @@ -54,6 +62,11 @@ public boolean removeByInput(IIngredient ingredient, GasStack gasInput) { return found; } + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(2), FluidOperation.defaultOperation(), IJEIRemovalGas.getDefaultGas()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "gasInput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Washer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Washer.java index 93303a116..e031baaf3 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Washer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/Washer.java @@ -2,16 +2,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.GasRecipeBuilder; +import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.IJEIRemovalGas; import com.cleanroommc.groovyscript.compat.mods.mekanism.recipe.VirtualizedMekanismRegistry; import com.cleanroommc.groovyscript.helper.Alias; +import com.google.common.collect.ImmutableList; import mekanism.api.gas.GasStack; import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.GasInput; import mekanism.common.recipe.machines.WasherRecipe; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.List; + @RegistryDescription public class Washer extends VirtualizedMekanismRegistry { @@ -69,4 +77,9 @@ public void validate(GroovyLog.Msg msg) { return recipe; } } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().exclude(0), IJEIRemovalGas.getDefaultGas()); + } } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/recipe/IJEIRemovalGas.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/recipe/IJEIRemovalGas.java new file mode 100644 index 000000000..61588e1d4 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/recipe/IJEIRemovalGas.java @@ -0,0 +1,26 @@ +package com.cleanroommc.groovyscript.compat.mods.mekanism.recipe; + +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.*; +import com.cleanroommc.groovyscript.compat.mods.mekanism.Mekanism; +import com.google.common.collect.ImmutableList; +import mekanism.client.jei.MekanismJEI; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public interface IJEIRemovalGas extends IJEIRemoval.Default { + + static SlotOperation getDefaultGas() { + return new IngredientSlotOperation<>( + MekanismJEI.TYPE_GAS, true, + (stack, all) -> Mekanism.getSingleGasStack(stack, true)); + } + + @Override + default @NotNull List getJEIOperations() { + // TODO jei most mekanism classes can't do anything except "removeByInput", but with multiple parameters. + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation(), getDefaultGas()); + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/recipe/VirtualizedMekanismRegistry.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/recipe/VirtualizedMekanismRegistry.java index f9a12cfa5..8d14b8e4f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/recipe/VirtualizedMekanismRegistry.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mekanism/recipe/VirtualizedMekanismRegistry.java @@ -9,11 +9,13 @@ import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.machines.MachineRecipe; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; -public abstract class VirtualizedMekanismRegistry> extends VirtualizedRegistry { +public abstract class VirtualizedMekanismRegistry> extends VirtualizedRegistry implements IJEIRemovalGas { protected final RecipeHandler.Recipe recipeRegistry; @@ -66,4 +68,10 @@ public void removeError(String reason, Object... data) { .error() .post(); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(recipeRegistry.getJEICategory()); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mysticalagriculture/Reprocessor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mysticalagriculture/Reprocessor.java index 480f1c346..96909209e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/mysticalagriculture/Reprocessor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/mysticalagriculture/Reprocessor.java @@ -1,20 +1,26 @@ package com.cleanroommc.groovyscript.compat.mods.mysticalagriculture; +import com.blakebr0.mysticalagriculture.compat.jei.reprocessor.ReprocessorCategory; import com.blakebr0.mysticalagriculture.crafting.ReprocessorManager; import com.blakebr0.mysticalagriculture.crafting.ReprocessorRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Reprocessor extends VirtualizedRegistry { +public class Reprocessor extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond') * 3)"), @@ -91,6 +97,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ReprocessorCategory.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Altar.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Altar.java index dc0700581..35cba41d5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Altar.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Altar.java @@ -3,20 +3,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.recipes.AltarRecipe; +import de.ellpeck.naturesaura.compat.jei.JEINaturesAuraPlugin; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; @RegistryDescription -public class Altar extends VirtualizedRegistry { +public class Altar extends VirtualizedRegistry implements IJEIRemoval.Default { public Altar() { super(Alias.generateOfClass(Altar.class).andGenerate("Infusion")); @@ -106,6 +115,17 @@ public SimpleObjectStream> streamRecipe return new SimpleObjectStream<>(NaturesAuraAPI.ALTAR_RECIPES.entrySet()).setRemover(x -> remove(x.getValue())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEINaturesAuraPlugin.ALTAR); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(2), + ItemOperation.defaultOperation().include(2).input("removeByCatalyst")); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Offering.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Offering.java index aa51c6901..d5c0a702e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Offering.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Offering.java @@ -3,20 +3,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.recipes.OfferingRecipe; +import de.ellpeck.naturesaura.compat.jei.JEINaturesAuraPlugin; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; @RegistryDescription(admonition = @Admonition("groovyscript.wiki.naturesaura.offering.note0")) -public class Offering extends VirtualizedRegistry { +public class Offering extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('demo').input(item('minecraft:diamond')).catalyst(item('minecraft:clay')).output(item('minecraft:gold_ingot') * 8)"), @@ -102,6 +111,17 @@ public SimpleObjectStream> streamRec return new SimpleObjectStream<>(NaturesAuraAPI.OFFERING_RECIPES.entrySet()).setRemover(x -> remove(x.getValue())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEINaturesAuraPlugin.OFFERING); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(2), + ItemOperation.defaultOperation().include(2).input("removeByCatalyst")); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Ritual.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Ritual.java index 15f1b520d..fc9f6293d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Ritual.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Ritual.java @@ -3,21 +3,30 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.recipes.TreeRitualRecipe; +import de.ellpeck.naturesaura.compat.jei.JEINaturesAuraPlugin; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; @RegistryDescription(admonition = @Admonition(value = "groovyscript.wiki.naturesaura.ritual.note0", type = Admonition.Type.WARNING)) -public class Ritual extends VirtualizedRegistry { +public class Ritual extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('demo').input(item('minecraft:clay')).output(item('minecraft:diamond')).time(100).sapling(item('minecraft:sapling:1'))"), @@ -105,6 +114,17 @@ public SimpleObjectStream> streamR return new SimpleObjectStream<>(NaturesAuraAPI.TREE_RITUAL_RECIPES.entrySet()).setRemover(x -> remove(x.getValue())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEINaturesAuraPlugin.TREE_RITUAL); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(0), + ItemOperation.defaultOperation().include(0).input("removeBySapling")); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "8")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Spawning.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Spawning.java index 0ead8f71b..866036bb0 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Spawning.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/naturesaura/Spawning.java @@ -3,21 +3,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import de.ellpeck.naturesaura.api.NaturesAuraAPI; import de.ellpeck.naturesaura.api.recipes.AnimalSpawnerRecipe; +import de.ellpeck.naturesaura.compat.jei.JEINaturesAuraPlugin; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.registry.EntityEntry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.Map; @RegistryDescription(admonition = @Admonition(value = "groovyscript.wiki.naturesaura.spawning.note0", type = Admonition.Type.WARNING)) -public class Spawning extends VirtualizedRegistry { +public class Spawning extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('demo').input(item('minecraft:clay')).entity(entity('minecraft:bat')).aura(100).time(100)"), @@ -103,6 +108,11 @@ public SimpleObjectStream> stre return new SimpleObjectStream<>(NaturesAuraAPI.ANIMAL_SPAWNER_RECIPES.entrySet()).setRemover(x -> remove(x.getValue())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEINaturesAuraPlugin.SPAWNER); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "Integer.MAX_VALUE")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Amadron.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Amadron.java index d687b464a..312ff25b1 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Amadron.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Amadron.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -12,15 +13,18 @@ import me.desht.pneumaticcraft.common.recipes.AmadronOfferManager; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription( admonition = @Admonition(value = "groovyscript.wiki.pneumaticcraft.amadron.note0", type = Admonition.Type.WARNING) ) -public class Amadron extends VirtualizedRegistry { +public class Amadron extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage periodicStorage = new AbstractReloadableStorage<>(); @@ -136,6 +140,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(list).setRemover(this::removeStatic); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("pneumaticcraft.amadron_trade"); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "fluidInput", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/AssemblyController.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/AssemblyController.java index c9c092926..d9973285e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/AssemblyController.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/AssemblyController.java @@ -4,23 +4,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import me.desht.pneumaticcraft.common.item.ItemAssemblyProgram; import me.desht.pneumaticcraft.common.recipes.AssemblyRecipe; +import mezz.jei.api.gui.IRecipeLayout; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; @RegistryDescription -public class AssemblyController extends VirtualizedRegistry { +public class AssemblyController extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay') * 3).output(item('minecraft:gold_ingot') * 6).drill()"), @@ -130,6 +131,20 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("pneumaticcraft.assembly_controller"); + } + + @Override + public @NotNull List getRemoval(IRecipeLayout layout) { + // is this ugly? yes! but we need to target the input and output slots and the output slot number is dynamic + return OperationHandler.removalOptions(layout, Default.includeSlots(0, layout.getItemStacks().getGuiIngredients().values().size() - 1)); + } + public enum AssemblyType { DRILL, LASER diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Explosion.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Explosion.java index 4d8d96779..32437c415 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Explosion.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Explosion.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; @@ -10,12 +11,16 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import me.desht.pneumaticcraft.common.recipes.ExplosionCraftingRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription( admonition = @Admonition(value = "groovyscript.wiki.pneumaticcraft.explosion.note0", type = Admonition.Type.TIP) ) -public class Explosion extends VirtualizedRegistry { +public class Explosion extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:gold_ingot')).lossRate(40)"), @@ -74,6 +79,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(ExplosionCraftingRecipe.recipes).setRemover(this::remove); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("pneumaticcraft.compressed_iron_explosion"); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/HeatFrameCooling.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/HeatFrameCooling.java index 3a76f5bfa..5f5ba442e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/HeatFrameCooling.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/HeatFrameCooling.java @@ -3,15 +3,20 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import me.desht.pneumaticcraft.common.recipes.HeatFrameCoolingRecipe; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class HeatFrameCooling extends VirtualizedRegistry { +public class HeatFrameCooling extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:gold_ingot'))"), @@ -70,6 +75,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(HeatFrameCoolingRecipe.recipes).setRemover(this::remove); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(".heat_frame_cooling"); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PlasticMixer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PlasticMixer.java index f7f170fa0..1a09c9036 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PlasticMixer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PlasticMixer.java @@ -3,22 +3,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.core.mixin.pneumaticcraft.PlasticMixerRecipeAccessor; import com.cleanroommc.groovyscript.core.mixin.pneumaticcraft.PlasticMixerRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import me.desht.pneumaticcraft.common.recipes.PlasticMixerRegistry; +import mezz.jei.api.gui.IRecipeLayout; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription( admonition = { @Admonition(value = "groovyscript.wiki.pneumaticcraft.plastic_mixer.note0", type = Admonition.Type.WARNING), @Admonition(value = "groovyscript.wiki.pneumaticcraft.plastic_mixer.note1", type = Admonition.Type.DANGER) } ) -public class PlasticMixer extends VirtualizedRegistry { +public class PlasticMixer extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".fluidInput(fluid('lava') * 100).output(item('minecraft:clay')).allowMelting().allowSolidifying().requiredTemperature(323)"), @@ -91,6 +101,26 @@ public SimpleObjectStream streamRecipes return new SimpleObjectStream<>(getInstance().getRecipes()).setRemover(this::remove); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("pneumaticcraft.plastic_mixer"); + } + + @Override + public @NotNull List getRemoval(IRecipeLayout layout) { + // isn't this absolutely miserable? + // we need to this because the RGB dyes are part of the recipe as slots 0, 1, and 2 if the recipe outputs an item + // and slot 0 is used for the recipe input if the recipe has an input item. + var itemOperation = layout.getItemStacks().getGuiIngredients().size() > 2 + ? ItemOperation.defaultOperation().include(3) + : ItemOperation.defaultOperation(); + return OperationHandler.removalOptions(layout, itemOperation.input("removeByItem").output("removeByItem"), + FluidOperation.defaultOperation().input("removeByFluid").output("removeByFluid")); + } + @Property(property = "output", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PressureChamber.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PressureChamber.java index 08d177e10..b65608a33 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PressureChamber.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/PressureChamber.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -11,12 +12,14 @@ import me.desht.pneumaticcraft.api.recipe.ItemIngredient; import me.desht.pneumaticcraft.common.recipes.PressureChamberRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class PressureChamber extends VirtualizedRegistry { +public class PressureChamber extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay') * 3).output(item('minecraft:gold_ingot')).pressure(4)"), @@ -75,6 +78,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(PressureChamberRecipe.recipes).setRemover(this::remove); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("pneumaticcraft.pressure_chamber"); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "Integer.MAX_VALUE")}) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "Integer.MAX_VALUE")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Refinery.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Refinery.java index 5f304f8a6..ece633c53 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Refinery.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/Refinery.java @@ -3,18 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import me.desht.pneumaticcraft.common.recipes.RefineryRecipe; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Refinery extends VirtualizedRegistry { +public class Refinery extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".fluidInput(fluid('water') * 1000).fluidOutput(fluid('lava') * 750, fluid('lava') * 250, fluid('lava') * 100, fluid('lava') * 50)"), @@ -73,6 +77,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(RefineryRecipe.recipes).setRemover(this::remove); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("pneumaticcraft.refinery"); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "fluidOutput", valid = {@Comp(type = Comp.Type.GTE, value = "2"), @Comp(type = Comp.Type.LTE, value = "4")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/ThermopneumaticProcessingPlant.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/ThermopneumaticProcessingPlant.java index e9b3299d3..1a2ecb463 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/ThermopneumaticProcessingPlant.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pneumaticcraft/ThermopneumaticProcessingPlant.java @@ -3,6 +3,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; @@ -10,10 +11,14 @@ import me.desht.pneumaticcraft.api.recipe.IThermopneumaticProcessingPlantRecipe; import me.desht.pneumaticcraft.common.recipes.BasicThermopneumaticProcessingPlantRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class ThermopneumaticProcessingPlant extends VirtualizedRegistry { +public class ThermopneumaticProcessingPlant extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay') * 3).fluidInput(fluid('water') * 100).fluidOutput(fluid('kerosene') * 100).pressure(4).requiredTemperature(323)"), @@ -72,6 +77,14 @@ public SimpleObjectStream streamRecipes() return new SimpleObjectStream<>(BasicThermopneumaticProcessingPlantRecipe.recipes).setRemover(this::remove); } + /** + * @see me.desht.pneumaticcraft.common.thirdparty.jei.ModCategoryUid + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("pneumaticcraft.thermo_pneumatic"); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "fluidOutput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/ClayKiln.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/ClayKiln.java index 1b8607e70..7f51f36f8 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/ClayKiln.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/ClayKiln.java @@ -3,17 +3,25 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.primal_tech.ClayKilnRecipesAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import primal_tech.jei.clay_kiln.KilnCategory; import primal_tech.recipes.ClayKilnRecipes; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class ClayKiln extends VirtualizedRegistry { +public class ClayKiln extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).cookTime(50)"), @@ -86,6 +94,16 @@ public void removeAll() { ClayKilnRecipesAccessor.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(KilnCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(2); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/StoneAnvil.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/StoneAnvil.java index 591a0b219..83ed934c5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/StoneAnvil.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/StoneAnvil.java @@ -3,17 +3,25 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.primal_tech.StoneAnvilRecipesAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import primal_tech.jei.stone_anvil.StoneAnvilCategory; import primal_tech.recipes.StoneAnvilRecipes; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class StoneAnvil extends VirtualizedRegistry { +public class StoneAnvil extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay'))"), @@ -85,6 +93,16 @@ public void removeAll() { StoneAnvilRecipesAccessor.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(StoneAnvilCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(2); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WaterSaw.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WaterSaw.java index 136d4dd8f..5681ecea1 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WaterSaw.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WaterSaw.java @@ -3,17 +3,25 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.primal_tech.WaterSawRecipesAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import primal_tech.jei.water_saw.WaterSawCategory; import primal_tech.recipes.WaterSawRecipes; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class WaterSaw extends VirtualizedRegistry { +public class WaterSaw extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay')).choppingTime(50)"), @@ -86,6 +94,16 @@ public void removeAll() { WaterSawRecipesAccessor.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(WaterSawCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(2); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WoodenBasin.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WoodenBasin.java index f782b6414..5807266c9 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WoodenBasin.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/primaltech/WoodenBasin.java @@ -3,6 +3,8 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.primal_tech.WoodenBasinRecipesAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -12,10 +14,13 @@ import com.google.common.collect.Lists; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import primal_tech.jei.wooden_basin.WoodenBasinCategory; import primal_tech.recipes.WoodenBasinRecipes; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -23,7 +28,7 @@ @RegistryDescription( admonition = @Admonition(type = Admonition.Type.WARNING, value = "groovyscript.wiki.primal_tech.wooden_basin.note0") ) -public class WoodenBasin extends VirtualizedRegistry { +public class WoodenBasin extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).fluidInput(fluid('lava')).output(item('minecraft:clay'))"), @@ -101,6 +106,16 @@ public void removeAll() { WoodenBasinRecipesAccessor.getRecipes().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(WoodenBasinCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.excludeSlots(6); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "4", type = Comp.Type.LTE)}) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/AtomicReshaper.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/AtomicReshaper.java index 488d04065..b77f7ad3b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/AtomicReshaper.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/AtomicReshaper.java @@ -3,22 +3,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import lykrast.prodigytech.common.compat.jei.AtomicReshaperCategory; import lykrast.prodigytech.common.recipe.AtomicReshaperManager; import lykrast.prodigytech.common.util.Config; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class AtomicReshaper extends VirtualizedRegistry { +public class AtomicReshaper extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:emerald_block')).primordium(10).time(50)"), @@ -91,6 +98,16 @@ public SimpleObjectStream streamReci .setRemover(this::backupAndRemove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AtomicReshaperCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(1)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp(value = "1", type = Comp.Type.GTE)) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnace.java index 3d866ffe8..c4ee40dd5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnace.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnace.java @@ -3,16 +3,26 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import lykrast.prodigytech.common.compat.jei.ExplosionFurnaceCategory; import lykrast.prodigytech.common.recipe.ExplosionFurnaceManager; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class ExplosionFurnace extends VirtualizedRegistry { +public class ExplosionFurnace extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(ore('ingotGold'), item('minecraft:diamond')).craftPerReagent(8).power(160).output(item('minecraft:emerald_block'))"), @@ -66,6 +76,16 @@ public SimpleObjectStream stream .setRemover(this::backupAndRemove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(ExplosionFurnaceCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(2)); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnaceAdditives.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnaceAdditives.java index dd608329a..d9009e25a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnaceAdditives.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/ExplosionFurnaceAdditives.java @@ -4,15 +4,25 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.ingredient.ItemsIngredient; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.github.bsideup.jabel.Desugar; +import com.google.common.collect.ImmutableList; +import lykrast.prodigytech.common.compat.jei.ExplosionFurnaceDampenerCategory; +import lykrast.prodigytech.common.compat.jei.ExplosionFurnaceExplosiveCategory; import lykrast.prodigytech.common.recipe.ExplosionFurnaceManager; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.List; @RegistryDescription(category = RegistryDescription.Category.ENTRIES) -public class ExplosionFurnaceAdditives extends VirtualizedRegistry { +public class ExplosionFurnaceAdditives extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -80,6 +90,16 @@ public void removeAllDampeners() { ExplosionFurnaceManager.removeAllDampeners(); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(ExplosionFurnaceDampenerCategory.UID, ExplosionFurnaceExplosiveCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().input("removeDampener")); + } + public interface EFAdditiveRecipe { void register(); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/PrimordialisReactor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/PrimordialisReactor.java index 923f57ea0..22f3d52d7 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/PrimordialisReactor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/PrimordialisReactor.java @@ -4,19 +4,27 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.ItemsIngredient; import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import lykrast.prodigytech.common.compat.jei.PrimordialisReactorCategory; import lykrast.prodigytech.common.recipe.PrimordialisReactorManager; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @RegistryDescription(category = RegistryDescription.Category.ENTRIES) -public class PrimordialisReactor extends VirtualizedRegistry { +public class PrimordialisReactor extends VirtualizedRegistry implements IJEIRemoval.Default { @Override public void onReload() { @@ -74,4 +82,15 @@ public SimpleObjectStream streamRecipes() { List items = Stream.concat(normalRecipes, oreDictRecipes).collect(Collectors.toList()); return new SimpleObjectStream<>(items).setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(PrimordialisReactorCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0).input("remove")); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/Solderer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/Solderer.java index 5610f3a1c..fb6a16855 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/Solderer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/prodigytech/Solderer.java @@ -3,18 +3,28 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import lykrast.prodigytech.common.compat.jei.SoldererCategory; import lykrast.prodigytech.common.recipe.SoldererManager; import lykrast.prodigytech.common.util.Config; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Solderer extends VirtualizedRegistry { +public class Solderer extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".pattern(item('minecraft:clay')).input(item('minecraft:gold_ingot')).output(item('minecraft:diamond')).gold(5).time(100)"), @@ -96,6 +106,18 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SoldererCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(1).input("removeByPattern"), + ItemOperation.defaultOperation().include(2).input("removeByAdditive"), + ItemOperation.defaultOperation().include(4)); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/projecte/Transmutation.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/projecte/Transmutation.java index ecc968631..814b4445e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/projecte/Transmutation.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/projecte/Transmutation.java @@ -3,18 +3,27 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import moze_intel.projecte.integration.jei.world_transmute.WorldTransmuteRecipeCategory; import moze_intel.projecte.utils.WorldTransmutations; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import org.apache.commons.lang3.tuple.ImmutablePair; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Transmutation extends VirtualizedRegistry { +public class Transmutation extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(blockstate('minecraft:end_stone')).output(blockstate('minecraft:diamond_block'), blockstate('minecraft:gold_block'))"), @@ -78,6 +87,16 @@ public void removeAll() { WorldTransmutations.getWorldTransmutations().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(WorldTransmuteRecipeCategory.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei + } + public static class RecipeBuilder extends AbstractRecipeBuilder { @Property(valid = @Comp(value = "null", type = Comp.Type.NOT), ignoresInheritedMethods = true) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Anvil.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Anvil.java index ee7973268..07ee11983 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Anvil.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Anvil.java @@ -3,19 +3,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.EnumHelper; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryAnvilGranite; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryAnvilIronclad; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryAnvilObsidian; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.AnvilRecipe; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.List; @RegistryDescription -public class Anvil extends ForgeRegistryWrapper { +public class Anvil extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Anvil() { super(ModuleTechBasic.Registries.ANVIL_RECIPE); @@ -67,6 +77,16 @@ public void removeByOutput(ItemStack output) { } } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(JEIRecipeCategoryAnvilGranite.UID, JEIRecipeCategoryAnvilIronclad.UID, JEIRecipeCategoryAnvilObsidian.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(1)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Barrel.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Barrel.java index 8f8a65cd1..11ad96717 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Barrel.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Barrel.java @@ -3,17 +3,27 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryBarrel; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.BarrelRecipe; +import com.google.common.collect.ImmutableList; import net.minecraft.item.crafting.Ingredient; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Barrel extends ForgeRegistryWrapper { +public class Barrel extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Barrel() { super(ModuleTechBasic.Registries.BARREL_RECIPE); @@ -52,6 +62,16 @@ public void removeByOutput(FluidStack output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryBarrel.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(FluidOperation.defaultOperation().include(5)); + } + @Property(property = "input", valid = @Comp(type = Comp.Type.EQ, value = "4")) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "fluidOutput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Campfire.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Campfire.java index 450fc7cb6..9ddd4a925 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Campfire.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Campfire.java @@ -3,16 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryCampfire; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.CampfireRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Campfire extends ForgeRegistryWrapper { +public class Campfire extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Campfire() { super(ModuleTechBasic.Registries.CAMPFIRE_RECIPE); @@ -63,6 +69,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryCampfire.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/ChoppingBlock.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/ChoppingBlock.java index 4cedd4bdd..1955c8eaa 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/ChoppingBlock.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/ChoppingBlock.java @@ -3,18 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryChoppingBlock; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.ChoppingBlockRecipe; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class ChoppingBlock extends ForgeRegistryWrapper { +public class ChoppingBlock extends ForgeRegistryWrapper implements IJEIRemoval.Default { public ChoppingBlock() { super(ModuleTechBasic.Registries.CHOPPING_BLOCK_RECIPE); @@ -56,6 +62,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryChoppingBlock.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompactingBin.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompactingBin.java index dfc96b042..82bd1435c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompactingBin.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompactingBin.java @@ -3,16 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryCompactingBin; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.CompactingBinRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class CompactingBin extends ForgeRegistryWrapper { +public class CompactingBin extends ForgeRegistryWrapper implements IJEIRemoval.Default { public CompactingBin() { @@ -64,6 +70,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryCompactingBin.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompostBin.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompostBin.java index 479cc181b..d2d42da10 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompostBin.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CompostBin.java @@ -3,17 +3,23 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryCompostBin; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.CompostBinRecipe; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class CompostBin extends ForgeRegistryWrapper { +public class CompostBin extends ForgeRegistryWrapper implements IJEIRemoval.Default { public CompostBin() { @@ -65,6 +71,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryCompostBin.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CrudeDryingRack.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CrudeDryingRack.java index 207a5b06b..202ccd704 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CrudeDryingRack.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/CrudeDryingRack.java @@ -3,16 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryCrudeDryingRack; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.CrudeDryingRackRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class CrudeDryingRack extends ForgeRegistryWrapper { +public class CrudeDryingRack extends ForgeRegistryWrapper implements IJEIRemoval.Default { public CrudeDryingRack() { @@ -64,6 +70,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryCrudeDryingRack.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/DryingRack.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/DryingRack.java index a765613cd..e0d67b886 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/DryingRack.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/DryingRack.java @@ -3,16 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryDryingRack; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.DryingRackRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class DryingRack extends ForgeRegistryWrapper { +public class DryingRack extends ForgeRegistryWrapper implements IJEIRemoval.Default { public DryingRack() { @@ -64,6 +70,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryDryingRack.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Kiln.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Kiln.java index 6fe0e7586..638eb2b79 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Kiln.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/Kiln.java @@ -3,17 +3,27 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.ingredient.ItemStackList; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryKilnPit; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.KilnPitRecipe; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Kiln extends ForgeRegistryWrapper { +public class Kiln extends ForgeRegistryWrapper implements IJEIRemoval.Default { public Kiln() { super(ModuleTechBasic.Registries.KILN_PIT_RECIPE); @@ -66,6 +76,16 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryKilnPit.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(2)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/SoakingPot.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/SoakingPot.java index 2624a6eb0..bd323bf96 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/SoakingPot.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/SoakingPot.java @@ -3,17 +3,28 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategorySoakingPot; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.SoakingPotRecipe; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class SoakingPot extends ForgeRegistryWrapper { +public class SoakingPot extends ForgeRegistryWrapper implements IJEIRemoval.Default { public SoakingPot() { super(ModuleTechBasic.Registries.SOAKING_POT_RECIPE); @@ -65,6 +76,16 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategorySoakingPot.UID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1), FluidOperation.defaultOperation()); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/TanningRack.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/TanningRack.java index 28f91f05a..8027da60a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/TanningRack.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/pyrotech/TanningRack.java @@ -3,16 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.codetaylor.mc.pyrotech.modules.tech.basic.ModuleTechBasic; +import com.codetaylor.mc.pyrotech.modules.tech.basic.plugin.jei.category.JEIRecipeCategoryTanningRack; import com.codetaylor.mc.pyrotech.modules.tech.basic.recipe.TanningRackRecipe; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class TanningRack extends ForgeRegistryWrapper { +public class TanningRack extends ForgeRegistryWrapper implements IJEIRemoval.Default { public TanningRack() { @@ -65,6 +71,11 @@ public void removeByOutput(IIngredient output) { } } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRecipeCategoryTanningRack.UID); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) @Property(property = "name") diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/BarkCarving.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/BarkCarving.java index 16efc730d..9232fb409 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/BarkCarving.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/BarkCarving.java @@ -2,6 +2,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -9,17 +10,21 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.BarkRecipe; import net.minecraft.block.BlockPlanks; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.Map; @RegistryDescription -public class BarkCarving extends VirtualizedRegistry { +public class BarkCarving extends VirtualizedRegistry implements IJEIRemoval.Default { public BarkCarving() { super(Alias.generateOfClassAnd(BarkCarving.class, "Bark")); @@ -124,6 +129,11 @@ public SimpleObjectStream streamRecipes() { .setRemover(r -> this.removeByName(r.getName())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.BARK_CARVING); + } + @Property(property = "name") @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Chrysopoeia.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Chrysopoeia.java index f165d592f..8ca993e20 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Chrysopoeia.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Chrysopoeia.java @@ -2,22 +2,27 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.roots.ModRecipesAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.ChrysopoeiaRecipe; import epicsquid.roots.util.IngredientWithStack; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.Map; @RegistryDescription -public class Chrysopoeia extends VirtualizedRegistry { +public class Chrysopoeia extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('clay_transmute').input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))"), @@ -101,6 +106,11 @@ public SimpleObjectStream> stream .setRemover(r -> this.removeByName(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.CHRYSOPOEIA); + } + @Property(property = "name") @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/FeyCrafter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/FeyCrafter.java index 2d4a75030..d80336ed7 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/FeyCrafter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/FeyCrafter.java @@ -2,23 +2,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.FeyCraftingRecipe; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; @RegistryDescription( admonition = @Admonition(value = "groovyscript.wiki.roots.fey_crafter.note", type = Admonition.Type.DANGER, format = Admonition.Format.STANDARD) ) -public class FeyCrafter extends VirtualizedRegistry> { +public class FeyCrafter extends VirtualizedRegistry> implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".name('clay_craft').input(item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone')) // Must be exactly 5.output(item('minecraft:clay')).xp(100)")) public static RecipeBuilder recipeBuilder() { @@ -87,6 +96,16 @@ public SimpleObjectStream> stream .setRemover(r -> this.removeByName(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.FEY_CRAFTING); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(5)); + } + @Property(property = "name") @Property(property = "input", valid = @Comp("5")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/LifeEssence.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/LifeEssence.java index 8de952f11..4b88b2c5d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/LifeEssence.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/LifeEssence.java @@ -3,16 +3,38 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; +import epicsquid.roots.integration.jei.shears.RunicShearsSummonEntityWrapper; import net.minecraft.entity.EntityLivingBase; import net.minecraftforge.fml.common.registry.EntityEntry; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription( category = RegistryDescription.Category.ENTRIES ) -public class LifeEssence extends VirtualizedRegistry> { +public class LifeEssence extends VirtualizedRegistry> implements IJEIRemoval.Default { + + private static IOperation entityOperation() { + return new WrapperOperation<>(RunicShearsSummonEntityWrapper.class, wrapper -> { + var tag = wrapper.recipe.getEssenceStack().getTagCompound(); + if (tag == null) return Collections.emptyList(); + // only real way to access the entity ID here + return Collections.singletonList(OperationHandler.format("remove", GroovyScriptCodeConverter.formatGenericHandler("entity", tag.getString("id"), true))); + }); + } @Override public void onReload() { @@ -63,4 +85,15 @@ public void removeAll() { public SimpleObjectStream> streamRecipes() { return new SimpleObjectStream<>(ModRecipes.getLifeEssenceList()).setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(JEIRootsPlugin.RUNIC_SHEARS_SUMMON_ENTITY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(entityOperation()); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Mortar.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Mortar.java index ec7a48f44..5c16c1571 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Mortar.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Mortar.java @@ -3,24 +3,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.roots.ModRecipesAccessor; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.MortarRecipe; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Mortar extends VirtualizedRegistry { +public class Mortar extends VirtualizedRegistry implements IJEIRemoval.Default { public Mortar() { super(Alias.generateOfClassAnd(Mortar.class, "MortarAndPestle")); @@ -100,6 +108,16 @@ public SimpleObjectStream streamRecipes() { .setRemover(r -> this.removeByName(r.getRegistryName())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.MORTAR_AND_PESTLE); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(5)); + } + @Property(property = "name") @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "5")}) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Moss.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Moss.java index acafcc08b..1e550a499 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Moss.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Moss.java @@ -2,22 +2,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.roots.MossConfigAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import epicsquid.roots.config.MossConfig; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import net.minecraft.block.Block; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; @RegistryDescription -public class Moss extends VirtualizedRegistry> { +public class Moss extends VirtualizedRegistry> implements IJEIRemoval.Default { public Moss() { super(); @@ -98,6 +105,16 @@ public SimpleObjectStream> streamRecipes() { return new SimpleObjectStream<>(MossConfigAccessor.getMossyCobblestones().entrySet()).setRemover(r -> this.remove(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.TERRA_MOSS); + } + + @Override + public @NotNull List getJEIOperations() { + return Default.includeSlots(0); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder> { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Pyre.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Pyre.java index 75ad0a9ac..0e4a3b83d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Pyre.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Pyre.java @@ -2,20 +2,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.PyreCraftingRecipe; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; @RegistryDescription -public class Pyre extends VirtualizedRegistry { +public class Pyre extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('clay_from_fire').input(item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone')).output(item('minecraft:clay')).xp(5).time(1)"), @@ -87,6 +96,16 @@ public SimpleObjectStream> strea .setRemover(r -> this.removeByName(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.RITUAL_CRAFTING); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(5)); + } + @Property(property = "name") @Property(property = "input", valid = @Comp("5")) @Property(property = "output", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearBlock.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearBlock.java index d391c9501..b898a5041 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearBlock.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearBlock.java @@ -2,23 +2,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.RunicShearRecipe; import epicsquid.roots.recipe.transmutation.BlockStatePredicate; import epicsquid.roots.recipe.transmutation.StatePredicate; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; @RegistryDescription -public class RunicShearBlock extends VirtualizedRegistry { +public class RunicShearBlock extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('clay_from_runic_diamond').state(blockstate('minecraft:diamond_block')).replacementState(blockstate('minecraft:air')).output(item('minecraft:clay') * 64).displayItem(item('minecraft:diamond') * 9)"), @@ -95,6 +104,16 @@ public SimpleObjectStream> streamR .setRemover(r -> this.removeByName(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.RUNIC_SHEARS); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(1)); + } + @Property(property = "name") @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearEntity.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearEntity.java index f4f8153e9..bbe9b42c6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearEntity.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/RunicShearEntity.java @@ -2,25 +2,29 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.RunicShearConditionalEntityRecipe; import epicsquid.roots.recipe.RunicShearEntityRecipe; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.registry.EntityEntry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.HashSet; -import java.util.Map; +import java.util.*; import java.util.function.Function; @RegistryDescription -public class RunicShearEntity extends VirtualizedRegistry { +public class RunicShearEntity extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('clay_from_wither_skeletons').entity(entity('minecraft:wither_skeleton')).output(item('minecraft:clay')).cooldown(1000)"), @@ -103,6 +107,16 @@ public SimpleObjectStream> s .setRemover(r -> this.removeByName(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.RUNIC_SHEARS_ENTITY); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation().output(0)); + } + @Property(property = "name") @Property(property = "output", valid = @Comp(type = Comp.Type.GTE, value = "1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/SummonCreature.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/SummonCreature.java index d85e34fb0..272fcb455 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/SummonCreature.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/SummonCreature.java @@ -3,25 +3,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.roots.ModRecipesAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.SummonCreatureRecipe; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.registry.EntityEntry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RegistryDescription -public class SummonCreature extends VirtualizedRegistry { +public class SummonCreature extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".name('wither_skeleton_from_clay').input(item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay'), item('minecraft:clay')).entity(entity('minecraft:wither_skeleton'))")) public static RecipeBuilder recipeBuilder() { @@ -89,6 +96,16 @@ public SimpleObjectStream> str .setRemover(r -> this.removeByName(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.SUMMON_CREATURES); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(); // TODO jei this + } + @Property(property = "name") @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "10")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Transmutation.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Transmutation.java index b9411c2be..d3b6eadaf 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Transmutation.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/roots/Transmutation.java @@ -2,12 +2,14 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.roots.ModRecipesAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import epicsquid.roots.init.ModRecipes; +import epicsquid.roots.integration.jei.JEIRootsPlugin; import epicsquid.roots.recipe.TransmutationRecipe; import epicsquid.roots.recipe.transmutation.BlockStatePredicate; import epicsquid.roots.recipe.transmutation.StatePredicate; @@ -16,14 +18,16 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.Collections; import java.util.Map; import java.util.Optional; @RegistryDescription -public class Transmutation extends VirtualizedRegistry { +public class Transmutation extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".name('clay_duping').start(blockstate('minecraft:clay')).output(item('minecraft:clay_ball') * 30).condition(mods.roots.predicates.stateBuilder().blockstate(blockstate('minecraft:gold_block')).below().register())"), @@ -120,6 +124,11 @@ public SimpleObjectStream> stre .setRemover(r -> this.removeByName(r.getKey())); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIRootsPlugin.TRANSMUTATION); + } + @Property(property = "name") @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/Alchemy.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/Alchemy.java index b1018f668..fc37f5ddd 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/Alchemy.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/Alchemy.java @@ -3,15 +3,18 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import rustic.common.crafting.ICondenserRecipe; import rustic.common.crafting.Recipes; @@ -21,7 +24,7 @@ import java.util.Collection; @RegistryDescription -public class Alchemy extends VirtualizedRegistry { +public class Alchemy extends VirtualizedRegistry implements IJEIRemoval.Default { public Alchemy() { super(Alias.generateOfClass(Alchemy.class).andGenerate("Condenser")); @@ -86,6 +89,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(Recipes.condenserRecipes).setRemover(this::remove); } + /** + * @see rustic.compat.jei.RusticJEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of("rustic.alchemy_simple", "rustic.alchemy_advanced"); + } + @Property(property = "input", valid = {@Comp(value = "1", type = Comp.Type.GTE), @Comp(value = "2 or 3", type = Comp.Type.LTE)}) @Property(property = "fluidInput", defaultValue = "fluid('water') * 125", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "1", type = Comp.Type.LTE)}) @Property(property = "output", valid = {@Comp(value = "0", type = Comp.Type.GTE), @Comp(value = "1", type = Comp.Type.LTE)}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/BrewingBarrel.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/BrewingBarrel.java index 1b792a4df..30506f6a6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/BrewingBarrel.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/BrewingBarrel.java @@ -3,17 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import rustic.common.crafting.BrewingBarrelRecipe; import rustic.common.crafting.IBrewingBarrelRecipe; import rustic.common.crafting.Recipes; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class BrewingBarrel extends VirtualizedRegistry { +public class BrewingBarrel extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".fluidInput(fluid('ironberryjuice')).fluidOutput(fluid('lava'))"), @@ -72,6 +77,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(Recipes.brewingRecipes).setRemover(this::remove); } + /** + * @see rustic.compat.jei.RusticJEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("rustic.brewing"); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "fluidOutput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/CrushingTub.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/CrushingTub.java index a0e899536..43811c996 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/CrushingTub.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/CrushingTub.java @@ -3,18 +3,23 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import rustic.common.crafting.CrushingTubRecipe; import rustic.common.crafting.ICrushingTubRecipe; import rustic.common.crafting.Recipes; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class CrushingTub extends VirtualizedRegistry { +public class CrushingTub extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:stone')).fluidOutput(fluid('lava') * 50)"), @@ -73,6 +78,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(Recipes.crushingTubRecipes).setRemover(this::remove); } + /** + * @see rustic.compat.jei.RusticJEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("rustic.crushing_tub"); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidOutput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/EvaporatingBasin.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/EvaporatingBasin.java index 034cbbcff..87f9bcefb 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/EvaporatingBasin.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/rustic/EvaporatingBasin.java @@ -3,17 +3,22 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import rustic.common.crafting.IEvaporatingBasinRecipe; import rustic.common.crafting.Recipes; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class EvaporatingBasin extends VirtualizedRegistry { +public class EvaporatingBasin extends VirtualizedRegistry implements IJEIRemoval.Default { public EvaporatingBasin() { super(Alias.generateOfClass(EvaporatingBasin.class).andGenerate("DryingBasin")); @@ -82,6 +87,14 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(Recipes.evaporatingRecipes).setRemover(this::remove); } + /** + * @see rustic.compat.jei.RusticJEIPlugin + */ + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList("rustic.evaporating"); + } + @Property(property = "output", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/HighOven.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/HighOven.java index 6e2133ec0..60903b98b 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/HighOven.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/HighOven.java @@ -3,6 +3,10 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeBuilder; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeRegistry; import com.cleanroommc.groovyscript.core.mixin.tcomplement.TCompRegistryAccessor; @@ -10,18 +14,27 @@ import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import knightminer.tcomplement.library.steelworks.*; +import knightminer.tcomplement.plugin.jei.highoven.fuel.HighOvenFuelCategory; +import knightminer.tcomplement.plugin.jei.highoven.heat.HighOvenHeatCategory; +import knightminer.tcomplement.plugin.jei.highoven.melting.HighOvenMeltingCategory; +import knightminer.tcomplement.plugin.jei.highoven.mix.HighOvenMixCategory; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import slimeknights.mantle.util.RecipeMatch; import slimeknights.tconstruct.library.smeltery.MeltingRecipe; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Map; -public class HighOven extends MeltingRecipeRegistry { +public class HighOven extends MeltingRecipeRegistry implements IJEIRemoval.Default { public final Fuel fuel = new Fuel(); public final Heating heating = new Heating(); @@ -118,7 +131,17 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TCompRegistryAccessor.getHighOvenOverrides()).setRemover(this::remove); } - public static class Mixing extends VirtualizedRegistry { + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(HighOvenMeltingCategory.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1), FluidOperation.defaultOperation()); + } + + public static class Mixing extends VirtualizedRegistry implements IJEIRemoval.Default { public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); @@ -221,6 +244,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TCompRegistryAccessor.getMixRegistry()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(HighOvenMixCategory.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(3, 4), FluidOperation.defaultOperation()); + } + public class RecipeBuilder extends AbstractRecipeBuilder { private int temp = 300; @@ -291,7 +324,7 @@ public void validate(GroovyLog.Msg msg) { } } - public static class Heating extends VirtualizedRegistry { + public static class Heating extends VirtualizedRegistry implements IJEIRemoval.Default { public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); @@ -373,6 +406,11 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TCompRegistryAccessor.getHeatRegistry()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(HighOvenHeatCategory.CATEGORY); + } + public class RecipeBuilder extends AbstractRecipeBuilder { private int temp = 300; @@ -408,7 +446,7 @@ public void validate(GroovyLog.Msg msg) { } } - public static class Fuel extends VirtualizedRegistry { + public static class Fuel extends VirtualizedRegistry implements IJEIRemoval.Default { public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); @@ -463,6 +501,11 @@ public SimpleObjectStream streamFuels() { return new SimpleObjectStream<>(TCompRegistryAccessor.getHighOvenFuels()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(HighOvenFuelCategory.CATEGORY); + } + public class RecipeBuilder extends AbstractRecipeBuilder { private int time = 1; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/Melter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/Melter.java index b60b96e9e..648b71049 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/Melter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tcomplement/Melter.java @@ -3,19 +3,30 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.tcomplement.recipe.IngredientBlacklist; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeBuilder; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeRegistry; import com.cleanroommc.groovyscript.core.mixin.tcomplement.TCompRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; +import com.google.common.collect.ImmutableList; import knightminer.tcomplement.library.IBlacklist; +import knightminer.tcomplement.plugin.jei.melter.MeltingRecipeCategory; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import slimeknights.tconstruct.library.smeltery.MeltingRecipe; -public class Melter extends MeltingRecipeRegistry { +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class Melter extends MeltingRecipeRegistry implements IJEIRemoval.Default { @GroovyBlacklist protected final AbstractReloadableStorage backupStorage = new AbstractReloadableStorage<>(); @@ -151,4 +162,15 @@ public SimpleObjectStream streamBlacklists() { public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TCompRegistryAccessor.getMeltingOverrides()).setRemover(this::remove); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(MeltingRecipeCategory.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1), FluidOperation.defaultOperation().exclude(1)); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/Crucible.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/Crucible.java index 97ed901e5..7bb74b72d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/Crucible.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/Crucible.java @@ -1,18 +1,24 @@ package com.cleanroommc.groovyscript.compat.mods.thaumcraft; +import com.buuz135.thaumicjei.category.CrucibleCategory; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.thaumcraft.aspect.AspectStack; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.Optional; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.aspects.Aspect; @@ -25,7 +31,8 @@ import java.util.stream.Collectors; @RegistryDescription -public class Crucible extends VirtualizedRegistry { +@Optional.Interface(modid = "thaumicjei", iface = "com.cleanroommc.groovyscript.compat.mods.thaumcraft.IJEIRemovalAspect") +public class Crucible extends VirtualizedRegistry implements IJEIRemovalAspect { @RecipeBuilderDescription(example = @Example(".researchKey('UNLOCKALCHEMY@3').catalyst(item('minecraft:rotten_flesh')).output(item('minecraft:gold_ingot')).aspect(aspect('metallum') * 10)")) public RecipeBuilder recipeBuilder() { @@ -121,6 +128,20 @@ public void removeAll() { } } + /** + * Note that this is added by the third-party compat mod thaumicjei, not base Thaumcraft. + */ + @Override + @Optional.Method(modid = "thaumicjei") + public @NotNull Collection getCategories() { + return Collections.singletonList(CrucibleCategory.UUID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0)/*, IJEIRemovalAspect.getDefaultAspect()*/); + } + public static class RecipeBuilder extends AbstractRecipeBuilder { @Property diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/IJEIRemovalAspect.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/IJEIRemovalAspect.java new file mode 100644 index 000000000..18b6a642d --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/IJEIRemovalAspect.java @@ -0,0 +1,27 @@ +package com.cleanroommc.groovyscript.compat.mods.thaumcraft; + +import com.buuz135.thaumicjei.ThaumcraftJEIPlugin; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.*; +import com.google.common.collect.ImmutableList; +import net.minecraftforge.fml.common.Optional; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public interface IJEIRemovalAspect extends IJEIRemoval.Default { + + @Optional.Method(modid = "thaumicjei") + static SlotOperation getDefaultAspect() { + return new IngredientSlotOperation<>( + ThaumcraftJEIPlugin.ASPECT_LIST, false, + (stack, all) -> stack.size() == 0 ? "" : Thaumcraft.asGroovyCode(stack.getAspects()[0], true)); + } + + @Override + @Optional.Method(modid = "thaumicjei") + default @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation(), getDefaultAspect()); + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/InfusionCrafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/InfusionCrafting.java index 735ecee86..292a26a21 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/InfusionCrafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/InfusionCrafting.java @@ -1,9 +1,12 @@ package com.cleanroommc.groovyscript.compat.mods.thaumcraft; +import com.buuz135.thaumicjei.category.InfusionCategory; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.compat.mods.thaumcraft.aspect.AspectStack; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -11,10 +14,13 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.helper.recipe.RecipeName; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.Optional; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.aspects.Aspect; @@ -22,16 +28,14 @@ import thaumcraft.api.crafting.IThaumcraftRecipe; import thaumcraft.api.crafting.InfusionRecipe; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import static thaumcraft.common.config.ConfigRecipes.compileGroups; @RegistryDescription -public class InfusionCrafting extends VirtualizedRegistry> { +@Optional.Interface(modid = "thaumicjei", iface = "com.cleanroommc.groovyscript.compat.mods.thaumcraft.IJEIRemovalAspect") +public class InfusionCrafting extends VirtualizedRegistry> implements IJEIRemovalAspect { @RecipeBuilderDescription(example = @Example(".researchKey('UNLOCKALCHEMY@3').mainInput(item('minecraft:gunpowder')).output(item('minecraft:gold_ingot')).aspect(aspect('terra') * 20).aspect('ignis', 30).input(crystal('aer')).input(crystal('ignis')).input(crystal('aqua')).input(crystal('terra')).input(crystal('ordo')).instability(10)")) public RecipeBuilder recipeBuilder() { @@ -127,6 +131,20 @@ public void removeAll() { } } + /** + * Note that this is added by the third-party compat mod thaumicjei, not base Thaumcraft. + */ + @Override + @Optional.Method(modid = "thaumicjei") + public @NotNull Collection getCategories() { + return Collections.singletonList(InfusionCategory.UUID); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0)/*, IJEIRemovalAspect.getDefaultAspect()*/); + } + public static class RecipeBuilder extends AbstractRecipeBuilder { @Property(valid = @Comp(value = "null", type = Comp.Type.NOT)) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/arcane/ArcaneWorkbench.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/arcane/ArcaneWorkbench.java index fbdb781e1..cfbdb13c8 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/arcane/ArcaneWorkbench.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thaumcraft/arcane/ArcaneWorkbench.java @@ -1,23 +1,45 @@ package com.cleanroommc.groovyscript.compat.mods.thaumcraft.arcane; +import com.buuz135.thaumicjei.category.ArcaneWorkbenchCategory; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RecipeBuilderDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.registry.NamedRegistry; import com.cleanroommc.groovyscript.registry.ReloadableRegistryManager; +import com.google.common.collect.ImmutableList; import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.registry.ForgeRegistries; +import org.jetbrains.annotations.NotNull; import thaumcraft.api.crafting.IArcaneRecipe; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class ArcaneWorkbench extends NamedRegistry { +@Optional.Interface(modid = "thaumicjei", iface = "com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval$Default") +public class ArcaneWorkbench extends NamedRegistry implements IJEIRemoval.Default { + + @Optional.Method(modid = "thaumicjei") + private static IOperation registryNameOperation() { + return new WrapperOperation<>(com.buuz135.thaumicjei.category.ArcaneWorkbenchCategory.ArcaneWorkbenchWrapper.class, wrapper -> + wrapper.getRecipe().getRegistryName() == null + ? Collections.emptyList() + : Collections.singletonList(OperationHandler.format("remove", GroovyScriptCodeConverter.asGroovyCode(wrapper.getRecipe().getRegistryName(), true)))); + } public static final ResourceLocation DEFAULT = new ResourceLocation(""); @@ -59,5 +81,21 @@ public void removeAll() { ReloadableRegistryManager.removeRegistryEntry(ForgeRegistries.RECIPES, recipe.getRegistryName()); } } + + /** + * Note that this is added by the third-party compat mod thaumicjei, not base Thaumcraft. + */ + @Override + @Optional.Method(modid = "thaumicjei") + public @NotNull Collection getCategories() { + return Collections.singletonList(ArcaneWorkbenchCategory.UUID); + } + + @Override + @Optional.Method(modid = "thaumicjei") + public @NotNull List getJEIOperations() { + return ImmutableList.of(registryNameOperation(), ItemOperation.defaultOperation().include(0), FluidOperation.defaultOperation()); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/MoonlightForge.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/MoonlightForge.java index c0548d99e..5b6dbe566 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/MoonlightForge.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/MoonlightForge.java @@ -3,17 +3,23 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.shiroroku.theaurorian.Compat.JEI.JEICompat; import com.shiroroku.theaurorian.Recipes.MoonlightForgeRecipe; import com.shiroroku.theaurorian.Recipes.MoonlightForgeRecipeHandler; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class MoonlightForge extends VirtualizedRegistry { +public class MoonlightForge extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:stone_sword'), item('minecraft:diamond')).output(item('minecraft:diamond_sword'))")) public RecipeBuilder recipeBuilder() { @@ -74,6 +80,11 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(MoonlightForgeRecipeHandler.allRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEICompat.UID_MOONLIGHTFORGE); + } + @Property(property = "input", valid = @Comp("2")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/Scrapper.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/Scrapper.java index c177069dc..403236c7e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/Scrapper.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/theaurorian/Scrapper.java @@ -3,17 +3,27 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; +import com.shiroroku.theaurorian.Compat.JEI.JEICompat; import com.shiroroku.theaurorian.Recipes.ScrapperRecipe; import com.shiroroku.theaurorian.Recipes.ScrapperRecipeHandler; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class Scrapper extends VirtualizedRegistry { +public class Scrapper extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:stone_sword')).output(item('minecraft:cobblestone'))")) public RecipeBuilder recipeBuilder() { @@ -74,6 +84,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(ScrapperRecipeHandler.allRecipes).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEICompat.UID_SCRAPPER); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().exclude(1)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Coolant.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Coolant.java index 33afd6014..8ac4a1b08 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Coolant.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Coolant.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.device; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.Admonition; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CoolantManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; @@ -13,10 +15,14 @@ import mezz.jei.api.IGuiHelper; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription(category = RegistryDescription.Category.ENTRIES, admonition = @Admonition(value = "groovyscript.wiki.thermalexpansion.coolant.note0", type = Admonition.Type.WARNING)) -public class Coolant extends VirtualizedRegistry { +public class Coolant extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -85,6 +91,11 @@ public void removeAll() { CoolantManagerAccessor.getCoolantFactorMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.COOLANT); + } + @Desugar public record CoolantRecipe(String fluid, int rf, int factor) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Factorizer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Factorizer.java index cdb0dbce3..eea3fdc0d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Factorizer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Factorizer.java @@ -1,21 +1,25 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.device; import cofh.core.inventory.ComparableItemStackValidated; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.device.FactorizerManager; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.FactorizerManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.FactorizerRecipeAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import com.google.common.primitives.Booleans; import net.minecraft.item.ItemStack; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -23,7 +27,7 @@ import java.util.stream.Collectors; @RegistryDescription -public class Factorizer extends VirtualizedRegistry> { +public class Factorizer extends VirtualizedRegistry> implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay') * 7).output(item('minecraft:book') * 2).combine().split()"), @@ -137,6 +141,11 @@ public void removeAll() { removeByType(false); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.FACTORIZER, RecipeUidsTE.FACTORIZER_COMBINE, RecipeUidsTE.FACTORIZER_SPLIT); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Tapper.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Tapper.java index 6ceb308b4..b8601411d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Tapper.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/device/Tapper.java @@ -2,6 +2,7 @@ import cofh.core.util.BlockWrapper; import cofh.core.util.ItemWrapper; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; @@ -9,6 +10,9 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.TapperManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; @@ -19,13 +23,17 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; @RegistryDescription( admonition = @Admonition("groovyscript.wiki.thermalexpansion.tapper.note0") ) -public class Tapper extends VirtualizedRegistry { +public class Tapper extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage blockStorage = new AbstractReloadableStorage<>(); @@ -155,6 +163,16 @@ public void removeAll() { TapperManagerAccessor.getBlockMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.SAWMILL_TAPPER); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(FluidOperation.defaultOperation()); + } + @Desugar public record TapperItemRecipe(ItemWrapper itemWrapper, FluidStack fluidStack) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Compression.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Compression.java index 13e4caa44..232c3d39c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Compression.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Compression.java @@ -1,18 +1,24 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.dynamo; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CompressionManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.github.bsideup.jabel.Desugar; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Compression extends VirtualizedRegistry { +public class Compression extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -79,6 +85,11 @@ public void removeAll() { CompressionManagerAccessor.getFuelMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.DYNAMO_COMPRESSION); + } + @Desugar public record CompressionRecipe(String fluid, int energy) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Enervation.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Enervation.java index 90d961a72..42dd5e915 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Enervation.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Enervation.java @@ -1,20 +1,26 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.dynamo; import cofh.core.inventory.ComparableItemStack; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.EnervationManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.github.bsideup.jabel.Desugar; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Enervation extends VirtualizedRegistry { +public class Enervation extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -76,6 +82,11 @@ public void removeAll() { EnervationManagerAccessor.getFuelMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.DYNAMO_ENERVATION); + } + @Desugar public record EnervationRecipe(ComparableItemStack comparableItemStack, int energy) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Lapidary.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Lapidary.java index e45d3408e..85db3a757 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Lapidary.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Lapidary.java @@ -1,20 +1,26 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.dynamo; import cofh.core.inventory.ComparableItemStack; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.NumismaticManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.github.bsideup.jabel.Desugar; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Lapidary extends VirtualizedRegistry { +public class Lapidary extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -76,6 +82,11 @@ public void removeAll() { NumismaticManagerAccessor.getGemFuelMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.DYNAMO_NUMISMATIC_GEM); + } + @Desugar public record LapidaryRecipe(ComparableItemStack comparableItemStack, int energy) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Magmatic.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Magmatic.java index 1ff5c5ab1..54fd17891 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Magmatic.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Magmatic.java @@ -1,18 +1,24 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.dynamo; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.MagmaticManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.github.bsideup.jabel.Desugar; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Magmatic extends VirtualizedRegistry { +public class Magmatic extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -79,6 +85,11 @@ public void removeAll() { MagmaticManagerAccessor.getFuelMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.DYNAMO_MAGMATIC); + } + @Desugar public record MagmaticRecipe(String fluid, int energy) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Numismatic.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Numismatic.java index 0849bd46a..133ad3c16 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Numismatic.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Numismatic.java @@ -1,20 +1,26 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.dynamo; import cofh.core.inventory.ComparableItemStack; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.NumismaticManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.github.bsideup.jabel.Desugar; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Numismatic extends VirtualizedRegistry { +public class Numismatic extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -76,6 +82,11 @@ public void removeAll() { NumismaticManagerAccessor.getFuelMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.DYNAMO_NUMISMATIC); + } + @Desugar public record NumismaticRecipe(ComparableItemStack comparableItemStack, int energy) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Reactant.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Reactant.java index 0a872f6eb..6155fab07 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Reactant.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Reactant.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.dynamo; import cofh.core.inventory.ComparableItemStack; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.dynamo.ReactantManager; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.ReactantManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.ReactionAccessor; @@ -14,18 +16,21 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Reactant extends VirtualizedRegistry { +public class Reactant extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage elementalReactantStorage = new AbstractReloadableStorage<>(); private final AbstractReloadableStorage elementalFluidStorage = new AbstractReloadableStorage<>(); @@ -146,6 +151,11 @@ public void removeAll() { ReactantManagerAccessor.getReactionMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.DYNAMO_REACTANT, RecipeUidsTE.DYNAMO_REACTANT_ELEMENTAL); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Steam.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Steam.java index 816361eac..05d8efc44 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Steam.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/dynamo/Steam.java @@ -1,20 +1,26 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.dynamo; import cofh.core.inventory.ComparableItemStack; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.Example; import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.SteamManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import com.github.bsideup.jabel.Desugar; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Steam extends VirtualizedRegistry { +public class Steam extends VirtualizedRegistry implements IJEIRemoval.Default { @Override @GroovyBlacklist @@ -76,6 +82,11 @@ public void removeAll() { SteamManagerAccessor.getFuelMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.DYNAMO_STEAM); + } + @Desugar public record SteamRecipe(ComparableItemStack comparableItemStack, int energy) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Brewer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Brewer.java index 32b2da74f..794e4b7e1 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Brewer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Brewer.java @@ -1,12 +1,14 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.util.helpers.FluidHelper; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.BrewerManager; import cofh.thermalexpansion.util.managers.machine.BrewerManager.BrewerRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.BrewerManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.BrewerRecipeAccessor; @@ -18,14 +20,17 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Brewer extends VirtualizedRegistry { +public class Brewer extends VirtualizedRegistry implements IJEIRemoval.Default { public Brewer() { super(Alias.generateOfClass(Brewer.class).andGenerate("Imbuer")); @@ -129,6 +134,11 @@ public void removeAll() { BrewerManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.BREWER); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "fluidOutput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Centrifuge.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Centrifuge.java index f9c12df36..d1bcf09c1 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Centrifuge.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Centrifuge.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.CentrifugeManager; import cofh.thermalexpansion.util.managers.machine.CentrifugeManager.CentrifugeRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CentrifugeManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CentrifugeRecipeAccessor; @@ -15,14 +17,13 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; @RegistryDescription -public class Centrifuge extends VirtualizedRegistry { +public class Centrifuge extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).fluidOutput(fluid('water') * 100).output(item('minecraft:diamond') * 2, item('minecraft:gold_ingot'), item('minecraft:gold_ingot')).chance(50, 100, 1)"), @@ -99,6 +100,11 @@ public void removeAll() { CentrifugeManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.CENTRIFUGE); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "4")}) @Property(property = "fluidOutput", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/CentrifugeMobs.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/CentrifugeMobs.java index 8322fdb33..9659cd09a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/CentrifugeMobs.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/CentrifugeMobs.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.CentrifugeManager; import cofh.thermalexpansion.util.managers.machine.CentrifugeManager.CentrifugeRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CentrifugeManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CentrifugeRecipeAccessor; @@ -15,14 +17,13 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; @RegistryDescription -public class CentrifugeMobs extends VirtualizedRegistry { +public class CentrifugeMobs extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('thermalexpansion:morb').withNbt(['id': 'minecraft:slime'])).fluidOutput(fluid('water') * 100).output(item('minecraft:diamond') * 2, item('minecraft:gold_ingot'), item('minecraft:gold_ingot')).chance(50, 100, 1)"), @@ -101,6 +102,11 @@ public void removeAll() { CentrifugeManagerAccessor.getRecipeMapMobs().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.CENTRIFUGE_MOBS); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "4")}) @Property(property = "fluidOutput", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Charger.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Charger.java index beea4f37c..200267bd3 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Charger.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Charger.java @@ -1,12 +1,14 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.inventory.ComparableItemStackValidated; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.ChargerManager; import cofh.thermalexpansion.util.managers.machine.ChargerManager.ChargerRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.ChargerManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -14,10 +16,14 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Charger extends VirtualizedRegistry { +public class Charger extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond') * 5).output(item('minecraft:clay'))"), @@ -92,6 +98,11 @@ public void removeAll() { ChargerManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.CHARGER); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Compactor.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Compactor.java index bca5594e6..1e4cc33cb 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Compactor.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Compactor.java @@ -1,21 +1,25 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.inventory.ComparableItemStackValidatedNBT; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.CompactorManager; import cofh.thermalexpansion.util.managers.machine.CompactorManager.CompactorRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CompactorManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CompactorRecipeAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; @@ -24,7 +28,7 @@ import java.util.stream.Collectors; @RegistryDescription -public class Compactor extends VirtualizedRegistry> { +public class Compactor extends VirtualizedRegistry> implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond') * 2).mode(compactorMode('coin'))"), @@ -144,6 +148,11 @@ public void removeAll() { Arrays.stream(CompactorManager.Mode.values()).forEach(this::removeByMode); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.COMPACTOR, RecipeUidsTE.COMPACTOR_COIN, RecipeUidsTE.COMPACTOR_GEAR); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Crucible.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Crucible.java index e90219ff3..a1c559508 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Crucible.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Crucible.java @@ -1,28 +1,33 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.inventory.ComparableItemStackValidatedNBT; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.CrucibleManager; import cofh.thermalexpansion.util.managers.machine.CrucibleManager.CrucibleRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CrucibleManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.CrucibleRecipeAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; import java.util.stream.Collectors; @RegistryDescription -public class Crucible extends VirtualizedRegistry { +public class Crucible extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).fluidOutput(fluid('lava') * 25)"), @@ -109,6 +114,11 @@ public void removeAll() { CrucibleManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.CRUCIBLE, RecipeUidsTE.CRUCIBLE_LAVA); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidOutput", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Enchanter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Enchanter.java index c5e52e7dc..90dc4d53e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Enchanter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Enchanter.java @@ -1,12 +1,16 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.inventory.ComparableItemStackValidatedNBT; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.EnchanterManager; import cofh.thermalexpansion.util.managers.machine.EnchanterManager.EnchanterRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.EnchanterManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.EnchanterRecipeAccessor; @@ -16,14 +20,17 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Enchanter extends VirtualizedRegistry { +public class Enchanter extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage arcanaStorage = new AbstractReloadableStorage<>(); @@ -138,6 +145,16 @@ public void removeAll() { EnchanterManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.ENCHANTER); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation()); + } + @Property(property = "input", valid = @Comp("2")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Extruder.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Extruder.java index ea0e172ab..a193b200e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Extruder.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Extruder.java @@ -1,32 +1,39 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.util.ItemWrapper; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.ExtruderManager; import cofh.thermalexpansion.util.managers.machine.ExtruderManager.ExtruderRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.ExtruderManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.ExtruderRecipeAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import com.google.common.primitives.Booleans; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RegistryDescription -public class Extruder extends VirtualizedRegistry> { +public class Extruder extends VirtualizedRegistry> implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".fluidHot(100).fluidCold(1000).output(item('minecraft:clay'))"), @@ -151,6 +158,16 @@ public void removeAll() { removeByType(false); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.EXTRUDER, RecipeUidsTE.EXTRUDER_SEDIMENTARY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation()); + } + @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Furnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Furnace.java index a52a84aa8..ad880b3d4 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Furnace.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Furnace.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.FurnaceManager; import cofh.thermalexpansion.util.managers.machine.FurnaceManager.FurnaceRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.FurnaceManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.FurnaceRecipeAccessor; @@ -13,12 +15,16 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; + @RegistryDescription -public class Furnace extends VirtualizedRegistry { +public class Furnace extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage foodStorage = new AbstractReloadableStorage<>(); @@ -113,6 +119,11 @@ public void removeAll() { FurnaceManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.FURNACE, RecipeUidsTE.FURNACE_FOOD); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/FurnacePyrolysis.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/FurnacePyrolysis.java index 8a351b38e..184defbf1 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/FurnacePyrolysis.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/FurnacePyrolysis.java @@ -1,23 +1,34 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.FurnaceManager; import cofh.thermalexpansion.util.managers.machine.FurnaceManager.FurnaceRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.FurnaceManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.FurnaceRecipeAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + @RegistryDescription -public class FurnacePyrolysis extends VirtualizedRegistry { +public class FurnacePyrolysis extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond') * 2).creosote(100)"), @@ -93,6 +104,16 @@ public void removeAll() { FurnaceManagerAccessor.getRecipeMapPyrolysis().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.FURNACE_PYROLYSIS); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().exclude(0)); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Insolator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Insolator.java index e666ffdf2..3ed9c88e8 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Insolator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Insolator.java @@ -1,12 +1,16 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.inventory.ComparableItemStackValidatedNBT; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.InsolatorManager; import cofh.thermalexpansion.util.managers.machine.InsolatorManager.InsolatorRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.InsolatorManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.InsolatorRecipeAccessor; @@ -14,16 +18,20 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription -public class Insolator extends VirtualizedRegistry { +public class Insolator extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage fertilizerStorage = new AbstractReloadableStorage<>(); @@ -140,6 +148,16 @@ public void removeAll() { InsolatorManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.INSOLATOR, RecipeUidsTE.INSOLATOR_TREE); + } + + @Override + public @NotNull List getJEIOperations() { + return Collections.singletonList(ItemOperation.defaultOperation()); + } + @Property(property = "input", valid = @Comp("2")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Precipitator.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Precipitator.java index 58152144e..a168af0c9 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Precipitator.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Precipitator.java @@ -1,12 +1,14 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.util.ItemWrapper; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.PrecipitatorManager; import cofh.thermalexpansion.util.managers.machine.PrecipitatorManager.PrecipitatorRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.PrecipitatorManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.PrecipitatorRecipeAccessor; @@ -17,12 +19,15 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.stream.Collectors; @RegistryDescription -public class Precipitator extends VirtualizedRegistry { +public class Precipitator extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".output(item('minecraft:clay'))"), @@ -107,6 +112,11 @@ public void removeAll() { PrecipitatorManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.PRECIPITATOR); + } + @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Pulverizer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Pulverizer.java index 0c6686fad..83535bab4 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Pulverizer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Pulverizer.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.PulverizerManager; import cofh.thermalexpansion.util.managers.machine.PulverizerManager.PulverizerRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.PulverizerManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.PulverizerRecipeAccessor; @@ -14,10 +16,14 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class Pulverizer extends VirtualizedRegistry { +public class Pulverizer extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:clay'), item('minecraft:diamond')).chance(1)"), @@ -95,6 +101,11 @@ public void removeAll() { PulverizerManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.PULVERIZER); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Refinery.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Refinery.java index 2168446ee..770bb01a2 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Refinery.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Refinery.java @@ -1,12 +1,14 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.util.helpers.FluidHelper; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.RefineryManager; import cofh.thermalexpansion.util.managers.machine.RefineryManager.RefineryRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.RefineryManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.RefineryRecipeAccessor; @@ -14,16 +16,20 @@ import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; + @RegistryDescription( admonition = @Admonition("groovyscript.wiki.thermalexpansion.refinery.note0") ) -public class Refinery extends VirtualizedRegistry { +public class Refinery extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage fossilFuelStorage = new AbstractReloadableStorage<>(); private final AbstractReloadableStorage bioFuelStorage = new AbstractReloadableStorage<>(); @@ -181,6 +187,11 @@ public void removeAll() { RefineryManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.REFINERY, RecipeUidsTE.REFINERY_BIO, RecipeUidsTE.REFINERY_FOSSIL); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "fluidOutput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/RefineryPotion.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/RefineryPotion.java index 10f6c3a83..e4b0c2b5c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/RefineryPotion.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/RefineryPotion.java @@ -1,12 +1,14 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.util.helpers.FluidHelper; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.RefineryManager; import cofh.thermalexpansion.util.managers.machine.RefineryManager.RefineryRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.RefineryManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.RefineryRecipeAccessor; @@ -16,10 +18,14 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; + @RegistryDescription -public class RefineryPotion extends VirtualizedRegistry { +public class RefineryPotion extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".fluidInput(fluid('water') * 100).fluidOutput(fluid('steam') * 200)"), @@ -96,6 +102,11 @@ public void removeAll() { RefineryManagerAccessor.getRecipeMapPotion().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.REFINERY_POTION); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "fluidOutput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Sawmill.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Sawmill.java index b22c7a9a0..bf054ffa6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Sawmill.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Sawmill.java @@ -1,25 +1,31 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.SawmillManager; import cofh.thermalexpansion.util.managers.machine.SawmillManager.SawmillRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.SawmillManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.SawmillRecipeAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; + @RegistryDescription( admonition = @Admonition("groovyscript.wiki.thermalexpansion.sawmill.note0") ) -public class Sawmill extends VirtualizedRegistry { +public class Sawmill extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond')).output(item('minecraft:gold_ingot') * 2)"), @@ -97,6 +103,11 @@ public void removeAll() { SawmillManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return ImmutableList.of(RecipeUidsTE.SAWMILL, RecipeUidsTE.SAWMILL_TAPPER); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Smelter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Smelter.java index df664c4ca..2e4796fdd 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Smelter.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/Smelter.java @@ -1,12 +1,14 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.inventory.ComparableItemStackValidatedNBT; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.SmelterManager; import cofh.thermalexpansion.util.managers.machine.SmelterManager.SmelterRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.SmelterManagerAccessor; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.SmelterRecipeAccessor; @@ -16,13 +18,16 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Smelter extends VirtualizedRegistry { +public class Smelter extends VirtualizedRegistry implements IJEIRemoval.Default { private final AbstractReloadableStorage fluxStorage = new AbstractReloadableStorage<>(); @@ -122,6 +127,11 @@ public void removeAll() { SmelterManagerAccessor.getRecipeMap().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.SMELTER); + } + @Property(property = "input", valid = @Comp("2")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "2")}) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerExtract.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerExtract.java index 8495db7ee..1864fb8a4 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerExtract.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerExtract.java @@ -1,11 +1,13 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.TransposerManager; import cofh.thermalexpansion.util.managers.machine.TransposerManager.TransposerRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.TransposerManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -14,14 +16,17 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; import java.util.stream.Collectors; @RegistryDescription( admonition = @Admonition("groovyscript.wiki.thermalexpansion.transposer.note0") ) -public class TransposerExtract extends VirtualizedRegistry { +public class TransposerExtract extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond') * 2).fluidOutput(fluid('water') * 100)"), @@ -113,6 +118,11 @@ public void removeAll() { TransposerManagerAccessor.getRecipeMapExtract().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.TRANSPOSER_EXTRACT); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) @Property(property = "fluidOutput", valid = @Comp("1")) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerFill.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerFill.java index 2e8f9fa0c..a69f68629 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerFill.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/thermalexpansion/machine/TransposerFill.java @@ -1,12 +1,14 @@ package com.cleanroommc.groovyscript.compat.mods.thermalexpansion.machine; import cofh.core.util.helpers.FluidHelper; +import cofh.thermalexpansion.plugins.jei.RecipeUidsTE; import cofh.thermalexpansion.util.managers.machine.TransposerManager; import cofh.thermalexpansion.util.managers.machine.TransposerManager.TransposerRecipe; import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.thermalexpansion.TransposerManagerAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -15,16 +17,19 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @RegistryDescription( admonition = @Admonition("groovyscript.wiki.thermalexpansion.transposer.note0") ) -public class TransposerFill extends VirtualizedRegistry { +public class TransposerFill extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = { @Example(".input(item('minecraft:diamond') * 2).fluidInput(fluid('water') * 100)"), @@ -124,6 +129,11 @@ public void removeAll() { TransposerManagerAccessor.getRecipeMapFill().clear(); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(RecipeUidsTE.TRANSPOSER_FILL); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = {@Comp(type = Comp.Type.GTE, value = "0"), @Comp(type = Comp.Type.LTE, value = "1")}) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Alloying.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Alloying.java index 0caf11fe2..8365082bc 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Alloying.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Alloying.java @@ -3,19 +3,24 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.core.mixin.tconstruct.TinkerRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import slimeknights.tconstruct.library.smeltery.AlloyRecipe; +import slimeknights.tconstruct.plugin.jei.alloy.AlloyRecipeCategory; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; @RegistryDescription -public class Alloying extends VirtualizedRegistry { +public class Alloying extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".fluidOutput(fluid('iron') * 3).fluidInput(fluid('clay') * 1,fluid('lava') * 2)")) public RecipeBuilder recipeBuilder() { @@ -107,6 +112,11 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TinkerRegistryAccessor.getAlloyRegistry()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(AlloyRecipeCategory.CATEGORY); + } + @Property(property = "fluidInput", valid = {@Comp(value = "2", type = Comp.Type.GTE), @Comp(value = "Integer.MAX_VALUE", type = Comp.Type.LTE)}) @Property(property = "fluidOutput", valid = @Comp("1")) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/CastingTable.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/CastingTable.java index 3e15466d6..6805e9647 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/CastingTable.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/CastingTable.java @@ -4,21 +4,32 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeBuilder; import com.cleanroommc.groovyscript.core.mixin.tconstruct.TinkerRegistryAccessor; import com.cleanroommc.groovyscript.helper.Alias; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import slimeknights.tconstruct.library.smeltery.CastingRecipe; import slimeknights.tconstruct.library.smeltery.ICastingRecipe; +import slimeknights.tconstruct.plugin.jei.casting.CastingRecipeCategory; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class CastingTable extends VirtualizedRegistry { +public class CastingTable extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".fluidInput(fluid('lava') * 50).output(item('minecraft:diamond')).coolingTime(750).consumesCast(true).cast(ore('gemEmerald'))")) public RecipeBuilder recipeBuilder() { @@ -105,6 +116,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TinkerRegistryAccessor.getTableCastRegistry()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(CastingRecipeCategory.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().exclude(1)); + } + @Property(property = "fluidInput", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Drying.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Drying.java index 017be0918..562dab346 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Drying.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Drying.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeBuilder; import com.cleanroommc.groovyscript.core.mixin.tconstruct.TinkerRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; @@ -11,11 +12,16 @@ import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import slimeknights.tconstruct.library.DryingRecipe; +import slimeknights.tconstruct.plugin.jei.drying.DryingRecipeCategory; + +import java.util.Collection; +import java.util.Collections; @RegistryDescription -public class Drying extends VirtualizedRegistry { +public class Drying extends VirtualizedRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:clay')).output(item('minecraft:dirt')).time(45)")) public RecipeBuilder recipeBuilder() { @@ -107,6 +113,11 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TinkerRegistryAccessor.getDryingRegistry()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(DryingRecipeCategory.CATEGORY); + } + @Property(property = "input", valid = @Comp("1")) @Property(property = "output", valid = @Comp("1")) public class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Melting.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Melting.java index 007ad223a..f1bf6f373 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Melting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/tinkersconstruct/Melting.java @@ -7,17 +7,28 @@ import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RecipeBuilderDescription; import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeBuilder; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.recipe.MeltingRecipeRegistry; import com.cleanroommc.groovyscript.core.mixin.tconstruct.TinkerRegistryAccessor; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.google.common.collect.ImmutableList; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; import net.minecraftforge.fluids.FluidStack; +import org.jetbrains.annotations.NotNull; import slimeknights.tconstruct.library.smeltery.MeltingRecipe; +import slimeknights.tconstruct.plugin.jei.smelting.SmeltingRecipeCategory; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; @RegistryDescription -public class Melting extends MeltingRecipeRegistry { +public class Melting extends MeltingRecipeRegistry implements IJEIRemoval.Default { @RecipeBuilderDescription(example = @Example(".input(item('minecraft:gravel')).fluidOutput(fluid('lava') * 25).time(80)")) public RecipeBuilder recipeBuilder() { @@ -110,6 +121,16 @@ public SimpleObjectStream streamRecipes() { return new SimpleObjectStream<>(TinkerRegistryAccessor.getMeltingRegistry()).setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(SmeltingRecipeCategory.CATEGORY); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation(), FluidOperation.defaultOperation().exclude(1)); + } + public static class RecipeBuilder extends MeltingRecipeBuilder { public RecipeBuilder(Melting melting) { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/woot/StygianIronAnvil.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/woot/StygianIronAnvil.java index b6e9faa89..3573e9b60 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/woot/StygianIronAnvil.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/woot/StygianIronAnvil.java @@ -2,6 +2,9 @@ import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; import com.cleanroommc.groovyscript.compat.mods.ModSupport; import com.cleanroommc.groovyscript.core.mixin.woot.AnvilManagerAccessor; import com.cleanroommc.groovyscript.helper.Alias; @@ -9,12 +12,18 @@ import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import com.google.common.collect.ImmutableList; import ipsis.Woot; import ipsis.woot.crafting.AnvilRecipe; import ipsis.woot.crafting.IAnvilRecipe; +import ipsis.woot.plugins.jei.JEIPlugin; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; @RegistryDescription( @@ -23,7 +32,7 @@ @Admonition(value = "groovyscript.wiki.woot.stygian_iron_anvil.note1", type = Admonition.Type.WARNING) } ) -public class StygianIronAnvil extends VirtualizedRegistry { +public class StygianIronAnvil extends VirtualizedRegistry implements IJEIRemoval.Default { public StygianIronAnvil() { super(Alias.generateOfClassAnd(StygianIronAnvil.class, "Anvil")); @@ -99,6 +108,16 @@ public SimpleObjectStream streamRecipes() { .setRemover(this::remove); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(JEIPlugin.JEI_ANVIL); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(ItemOperation.defaultOperation().include(0, 1).input("removeByBase")); + } + @Property(property = "input", valid = {@Comp(type = Comp.Type.GTE, value = "1"), @Comp(type = Comp.Type.LTE, value = "Integer.MAX_VALUE")}) @Property(property = "output", valid = @Comp("1")) public static class RecipeBuilder extends AbstractRecipeBuilder { diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Crafting.java b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Crafting.java index c2f6b5964..af9654cc2 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Crafting.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Crafting.java @@ -3,19 +3,32 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.FluidOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.IOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.ItemOperation; +import com.cleanroommc.groovyscript.api.jeiremoval.operations.WrapperOperation; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.OperationHandler; +import com.cleanroommc.groovyscript.helper.ingredient.GroovyScriptCodeConverter; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.registry.ForgeRegistryWrapper; import com.cleanroommc.groovyscript.registry.ReloadableRegistryManager; +import com.google.common.collect.ImmutableList; import it.unimi.dsi.fastutil.chars.Char2ObjectOpenHashMap; +import mezz.jei.api.recipe.VanillaRecipeCategoryUid; +import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.common.registry.ForgeRegistries; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; -public class Crafting extends ForgeRegistryWrapper { +public class Crafting extends ForgeRegistryWrapper implements IJEIRemoval.Default { private static final Char2ObjectOpenHashMap fallbackChars = new Char2ObjectOpenHashMap<>(); @@ -28,6 +41,13 @@ public static IIngredient getFallback(char c) { return fallbackChars.get(c); } + private static IOperation registryNameOperation() { + return new WrapperOperation<>(ICraftingRecipeWrapper.class, wrapper -> + wrapper.getRegistryName() == null + ? Collections.emptyList() + : Collections.singletonList(OperationHandler.format("remove", GroovyScriptCodeConverter.asGroovyCode(wrapper.getRegistryName(), true)))); + } + public void setFallback(char key, IIngredient ingredient) { fallbackChars.put(key, ingredient); } @@ -213,4 +233,15 @@ public CraftingRecipeBuilder.Shaped shapedBuilder() { public CraftingRecipeBuilder.Shapeless shapelessBuilder() { return new CraftingRecipeBuilder.Shapeless(); } + + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(VanillaRecipeCategoryUid.CRAFTING); + } + + @Override + public @NotNull List getJEIOperations() { + return ImmutableList.of(registryNameOperation(), ItemOperation.defaultOperation().include(0), FluidOperation.defaultOperation()); + } + } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Furnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Furnace.java index 3ce4aeb92..1e7b57fad 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Furnace.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/Furnace.java @@ -3,19 +3,20 @@ import com.cleanroommc.groovyscript.api.GroovyBlacklist; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.jeiremoval.IJEIRemoval; import com.cleanroommc.groovyscript.helper.SimpleObjectStream; import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import mezz.jei.api.recipe.VanillaRecipeCategoryUid; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; -public class Furnace extends VirtualizedRegistry { +public class Furnace extends VirtualizedRegistry implements IJEIRemoval.Default { public RecipeBuilder recipeBuilder() { return new RecipeBuilder(); @@ -182,6 +183,11 @@ public void onReload() { getBackupRecipes().forEach(recipe -> FurnaceRecipes.instance().addSmeltingRecipe(recipe.input, recipe.output, recipe.exp)); } + @Override + public @NotNull Collection getCategories() { + return Collections.singletonList(VanillaRecipeCategoryUid.SMELTING); + } + public static class RecipeBuilder extends AbstractRecipeBuilder { private IIngredient input; diff --git a/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java b/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java index f57115613..aea5e1d94 100644 --- a/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java +++ b/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java @@ -18,6 +18,7 @@ public class LateMixin implements ILateMixinLoader { "bloodmagic", "botania", "calculator", + "chisel", "draconicevolution", "enderio", "essentialcraft", diff --git a/src/main/java/com/cleanroommc/groovyscript/core/mixin/chisel/ChiselRecipeWrapperAccessor.java b/src/main/java/com/cleanroommc/groovyscript/core/mixin/chisel/ChiselRecipeWrapperAccessor.java new file mode 100644 index 000000000..471512dde --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/core/mixin/chisel/ChiselRecipeWrapperAccessor.java @@ -0,0 +1,14 @@ +package com.cleanroommc.groovyscript.core.mixin.chisel; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import team.chisel.api.carving.ICarvingGroup; +import team.chisel.common.integration.jei.ChiselRecipeWrapper; + +@Mixin(value = ChiselRecipeWrapper.class, remap = false) +public interface ChiselRecipeWrapperAccessor { + + @Accessor("group") + ICarvingGroup getGroup(); + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipeGuiLogicAccessor.java b/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipeGuiLogicAccessor.java new file mode 100644 index 000000000..3fb421989 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipeGuiLogicAccessor.java @@ -0,0 +1,14 @@ +package com.cleanroommc.groovyscript.core.mixin.jei; + +import mezz.jei.gui.ingredients.IngredientLookupState; +import mezz.jei.gui.recipes.RecipeGuiLogic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = RecipeGuiLogic.class, remap = false) +public interface RecipeGuiLogicAccessor { + + @Accessor("state") + IngredientLookupState getState(); + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipeLayoutAccessor.java b/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipeLayoutAccessor.java new file mode 100644 index 000000000..82e220c22 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipeLayoutAccessor.java @@ -0,0 +1,14 @@ +package com.cleanroommc.groovyscript.core.mixin.jei; + +import mezz.jei.api.recipe.IRecipeWrapper; +import mezz.jei.gui.recipes.RecipeLayout; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value = RecipeLayout.class, remap = false) +public interface RecipeLayoutAccessor { + + @Accessor("recipeWrapper") + IRecipeWrapper getRecipeWrapper(); + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipesGuiAccessor.java b/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipesGuiAccessor.java new file mode 100644 index 000000000..9a4e7464f --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/core/mixin/jei/RecipesGuiAccessor.java @@ -0,0 +1,20 @@ +package com.cleanroommc.groovyscript.core.mixin.jei; + +import mezz.jei.gui.recipes.IRecipeGuiLogic; +import mezz.jei.gui.recipes.RecipeLayout; +import mezz.jei.gui.recipes.RecipesGui; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(value = RecipesGui.class, remap = false) +public interface RecipesGuiAccessor { + + @Accessor("recipeLayouts") + List getRecipeLayouts(); + + @Accessor("logic") + IRecipeGuiLogic getLogic(); + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/GroovyScriptCodeConverter.java b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/GroovyScriptCodeConverter.java index cc8fdafa4..4b1bcddc3 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/GroovyScriptCodeConverter.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/GroovyScriptCodeConverter.java @@ -33,6 +33,17 @@ public static String formatNumber(int number, boolean colored) { return builder.toString(); } + public static String formatString(String target, boolean colored) { + StringBuilder builder = new StringBuilder(); + if (colored) builder.append(TextFormatting.GRAY); + builder.append("'"); + if (colored) builder.append(TextFormatting.AQUA); + builder.append(target); + if (colored) builder.append(TextFormatting.GRAY); + builder.append("'"); + return builder.toString(); + } + public static String formatGenericHandler(String handler, String target, boolean colored) { StringBuilder builder = new StringBuilder(); if (colored) builder.append(TextFormatting.DARK_GREEN); @@ -90,7 +101,11 @@ public static String formatNBTTag(NBTTagCompound tag, boolean colored, boolean p return builder.toString(); } - private static String getSingleItemStack(ItemStack itemStack, boolean colored) { + public static String asGroovyCode(ResourceLocation resourceLocation, boolean colored) { + return formatResourceLocation("resource", resourceLocation, colored); + } + + public static String getSingleItemStack(ItemStack itemStack, boolean colored) { StringBuilder builder = new StringBuilder(); if (colored) builder.append(TextFormatting.DARK_GREEN); builder.append("item"); @@ -122,16 +137,28 @@ public static String asGroovyCode(ItemStack itemStack, boolean colored) { return getSingleItemStack(itemStack, colored) + formatMultiple(itemStack.getCount(), colored); } + public static String getSingleItemStack(ItemStack itemStack, boolean colored, boolean prettyNbt) { + return getSingleItemStack(itemStack, colored) + formatNBTTag(itemStack.getTagCompound(), colored, prettyNbt); + } + public static String asGroovyCode(ItemStack itemStack, boolean colored, boolean prettyNbt) { return getSingleItemStack(itemStack, colored) + formatNBTTag(itemStack.getTagCompound(), colored, prettyNbt) + formatMultiple(itemStack.getCount(), colored); } + public static String getSingleFluidStack(FluidStack fluidStack, boolean colored) { + return formatGenericHandler("fluid", fluidStack.getFluid().getName(), colored); + } + public static String asGroovyCode(FluidStack fluidStack, boolean colored) { - return formatGenericHandler("fluid", fluidStack.getFluid().getName(), colored) + formatMultiple(fluidStack.amount, colored); + return getSingleFluidStack(fluidStack, colored) + formatMultiple(fluidStack.amount, colored); + } + + public static String getSingleFluidStack(FluidStack fluidStack, boolean colored, boolean prettyNbt) { + return getSingleFluidStack(fluidStack, colored) + formatNBTTag(fluidStack.tag, colored, prettyNbt); } public static String asGroovyCode(FluidStack fluidStack, boolean colored, boolean prettyNbt) { - return formatGenericHandler("fluid", fluidStack.getFluid().getName(), colored) + formatNBTTag(fluidStack.tag, colored, prettyNbt) + formatMultiple(fluidStack.amount, colored); + return getSingleFluidStack(fluidStack, colored) + formatNBTTag(fluidStack.tag, colored, prettyNbt) + formatMultiple(fluidStack.amount, colored); } public static String asGroovyCode(String oreDict, boolean colored) { diff --git a/src/main/java/com/cleanroommc/groovyscript/keybind/GroovyScriptKeybinds.java b/src/main/java/com/cleanroommc/groovyscript/keybind/GroovyScriptKeybinds.java new file mode 100644 index 000000000..e77037c05 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/keybind/GroovyScriptKeybinds.java @@ -0,0 +1,125 @@ +package com.cleanroommc.groovyscript.keybind; + +import com.cleanroommc.groovyscript.GroovyScript; +import net.minecraft.client.settings.KeyBinding; +import net.minecraftforge.client.event.GuiScreenEvent; +import net.minecraftforge.client.settings.IKeyConflictContext; +import net.minecraftforge.client.settings.KeyConflictContext; +import net.minecraftforge.client.settings.KeyModifier; +import net.minecraftforge.fml.client.registry.ClientRegistry; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.InputEvent; +import net.minecraftforge.fml.relauncher.Side; +import org.lwjgl.input.Keyboard; + +import java.util.ArrayList; +import java.util.List; + +@Mod.EventBusSubscriber(modid = GroovyScript.ID, value = Side.CLIENT) +public class GroovyScriptKeybinds extends KeyBinding { + + private static final List keys = new ArrayList<>(); + + protected GroovyScriptKeybinds(GroovyScriptKeybinds.Key key) { + super(key.getDescription(), key.getKeyConflictContext(), key.getKeyModifier(), key.getKeyCode(), GroovyScript.NAME); + ClientRegistry.registerKeyBinding(this); + } + + public static void addKey(GroovyScriptKeybinds.Key key) { + keys.add(key); + } + + public static void initialize() { + ReloadKey.createKeybind(); + RemoveRecipeKey.createKeybind(); + + for (Key key : keys) { + key.getKey(); + } + } + + @SubscribeEvent + public static void onKeyInput(InputEvent.KeyInputEvent event) { + for (Key key : keys) { + if (key.isPressed()) key.handleKeybind(); + } + } + + @SubscribeEvent + public static void onGuiKeyInput(GuiScreenEvent.KeyboardInputEvent.Pre event) { + char typedChar = Keyboard.getEventCharacter(); + int eventKey = Keyboard.getEventKey(); + + for (Key key : keys) { + if (key.isPressed(typedChar, eventKey)) key.handleKeybind(); + } + } + + public abstract static class Key { + + private final String name; + private final IKeyConflictContext keyConflictContext; + private final KeyModifier keyModifier; + private final int keyCode; + + private KeyBinding key; + + public Key(String name, int keyCode) { + this(name, KeyConflictContext.UNIVERSAL, keyCode); + } + + public Key(String name, IKeyConflictContext keyConflictContext, int keyCode) { + this(name, keyConflictContext, KeyModifier.NONE, keyCode); + } + + public Key(String name, IKeyConflictContext keyConflictContext, KeyModifier keyModifier, int keyCode) { + this.name = name; + this.keyConflictContext = keyConflictContext; + this.keyModifier = keyModifier; + this.keyCode = keyCode; + } + + public abstract boolean isValid(); + + public abstract void handleKeybind(); + + public String getName() { + return name; + } + + public IKeyConflictContext getKeyConflictContext() { + return keyConflictContext; + } + + public KeyModifier getKeyModifier() { + return keyModifier; + } + + public int getKeyCode() { + return keyCode; + } + + public KeyBinding getKey() { + if (key == null) key = new GroovyScriptKeybinds(this); + return key; + } + + public void setKey(KeyBinding key) { + this.key = key; + } + + public boolean isPressed() { + return isValid() && getKey().isPressed(); + } + + public boolean isPressed(char typedChar, int keyCode) { + return isValid() && getKey().isActiveAndMatches(keyCode); + } + + public String getDescription() { + return String.format("keybind.%s.%s", GroovyScript.ID, name); + } + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/keybind/ReloadKey.java b/src/main/java/com/cleanroommc/groovyscript/keybind/ReloadKey.java new file mode 100644 index 000000000..b4e7513e3 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/keybind/ReloadKey.java @@ -0,0 +1,37 @@ +package com.cleanroommc.groovyscript.keybind; + +import com.cleanroommc.groovyscript.network.CReload; +import com.cleanroommc.groovyscript.network.NetworkHandler; +import net.minecraft.client.Minecraft; +import net.minecraftforge.client.settings.KeyConflictContext; +import net.minecraftforge.client.settings.KeyModifier; +import org.lwjgl.input.Keyboard; + +public class ReloadKey extends GroovyScriptKeybinds.Key { + + private static final int INTERVAL = 1000; + + private long timeSinceLastUse; + + public ReloadKey() { + super("reload", KeyConflictContext.IN_GAME, KeyModifier.CONTROL, Keyboard.KEY_R); + } + + public static void createKeybind() { + GroovyScriptKeybinds.addKey(new ReloadKey()); + } + + @Override + public boolean isValid() { + return Minecraft.getMinecraft().currentScreen == null && Minecraft.getMinecraft().inGameHasFocus; + } + + @Override + public void handleKeybind() { + long time = Minecraft.getSystemTime(); + if (Minecraft.getMinecraft().isIntegratedServerRunning() && time - timeSinceLastUse >= INTERVAL && Minecraft.getMinecraft().player.getPermissionLevel() >= 4) { + NetworkHandler.sendToServer(new CReload()); + timeSinceLastUse = time; + } + } +} diff --git a/src/main/java/com/cleanroommc/groovyscript/keybind/RemoveRecipeKey.java b/src/main/java/com/cleanroommc/groovyscript/keybind/RemoveRecipeKey.java new file mode 100644 index 000000000..272d3e00d --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/keybind/RemoveRecipeKey.java @@ -0,0 +1,41 @@ +package com.cleanroommc.groovyscript.keybind; + +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.mods.jei.JeiPlugin; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.JeiRemovalHelper; +import com.cleanroommc.groovyscript.compat.mods.jei.removal.RemoveJEIRecipe; +import mezz.jei.api.IRecipesGui; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.client.settings.KeyConflictContext; +import net.minecraftforge.client.settings.KeyModifier; +import org.lwjgl.input.Keyboard; + +public class RemoveRecipeKey extends GroovyScriptKeybinds.Key { + + public RemoveRecipeKey() { + super("remove_recipe_from_jei", KeyConflictContext.GUI, KeyModifier.CONTROL, Keyboard.KEY_X); + } + + public static void createKeybind() { + if (ModSupport.JEI.isLoaded()) GroovyScriptKeybinds.addKey(new RemoveRecipeKey()); + } + + @Override + public boolean isValid() { + return Minecraft.getMinecraft().currentScreen instanceof IRecipesGui && !JeiPlugin.jeiRuntime.getIngredientListOverlay().hasKeyboardFocus(); + } + + @Override + public void handleKeybind() { + // only actually check if this is the downpress + if (Keyboard.getEventKeyState()) { + var layout = JeiRemovalHelper.getRecipeLayoutUnderMouse(); + if (layout == null) return; + var uid = JeiRemovalHelper.getFocusedRecipeUid(); + + RemoveJEIRecipe.INSTANCE.checkRemoval(layout, uid, GuiScreen.isShiftKeyDown()); + } + } + +} diff --git a/src/main/resources/assets/groovyscript/lang/en_us.lang b/src/main/resources/assets/groovyscript/lang/en_us.lang index 8d5a79fcc..1515a685c 100644 --- a/src/main/resources/assets/groovyscript/lang/en_us.lang +++ b/src/main/resources/assets/groovyscript/lang/en_us.lang @@ -3,7 +3,13 @@ groovyscript.command.copy.copied_start=Copied [ groovyscript.command.copy.copied_end=] to the clipboard key.categories.groovyscript=GroovyScript -key.groovyscript.reload=Reload Scripts +keybind.groovyscript.reload=Reload Scripts +keybind.groovyscript.remove_recipe_from_jei=Generate Recipe Removal Method (from JEI) + +# Remove Recipes from JEI +groovyscript.jei.remove_recipe.unknown_category=Couldn't find a way to remove the targeted recipe in category '%s' +groovyscript.jei.remove_recipe.first_time=GroovyScript offers the ability to generate removal methods for recipes. In many cases the methods provided would remove multiple recipes, so use the one that's right for your situation. If the methods generated do not exist, do not function in the implied way, or you encounter any crashes, please submit an issue to our %s! +groovyscript.jei.remove_recipe.view_on_github=Open GroovyScript's GitHub Issues page groovyscript.jei.category.groovyscript:fluid_recipe.name=In world fluid recipes groovyscript.jei.category.groovyscript:explosion.name=Explosion recipes diff --git a/src/main/resources/mixin.groovyscript.chisel.json b/src/main/resources/mixin.groovyscript.chisel.json new file mode 100644 index 000000000..3c77c9523 --- /dev/null +++ b/src/main/resources/mixin.groovyscript.chisel.json @@ -0,0 +1,10 @@ +{ + "package": "com.cleanroommc.groovyscript.core.mixin.chisel", + "refmap": "mixins.groovyscript.refmap.json", + "target": "@env(DEFAULT)", + "minVersion": "0.8", + "compatibilityLevel": "JAVA_8", + "mixins": [ + "ChiselRecipeWrapperAccessor" + ] +} \ No newline at end of file diff --git a/src/main/resources/mixin.groovyscript.jei.json b/src/main/resources/mixin.groovyscript.jei.json index 2b32b5c24..759842fe4 100644 --- a/src/main/resources/mixin.groovyscript.jei.json +++ b/src/main/resources/mixin.groovyscript.jei.json @@ -8,6 +8,9 @@ "IngredientInfoRecipeAccessor", "JeiProxyAccessor", "JeiStarterMixin", - "ModRegistryAccessor" + "ModRegistryAccessor", + "RecipeGuiLogicAccessor", + "RecipeLayoutAccessor", + "RecipesGuiAccessor" ] } \ No newline at end of file