From 745f8bc9b5b4f06655863b70901957b508ea615c Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sun, 25 Jun 2023 18:56:29 +0200 Subject: [PATCH 1/7] avaritia compat --- build.gradle | 6 + examples/avaritia.groovy | 15 ++ gradle.properties | 23 +-- .../groovyscript/compat/mods/ModSupport.java | 2 + .../compat/mods/avaritia/Avaritia.java | 14 ++ .../compat/mods/avaritia/Compressor.java | 66 ++++++++ .../compat/mods/avaritia/ExtremeCrafting.java | 76 +++++++++ .../mods/avaritia/ExtremeRecipeBuilder.java | 145 ++++++++++++++++++ .../mods/avaritia/ExtremeShapedRecipe.java | 50 ++++++ .../mods/avaritia/ExtremeShapelessRecipe.java | 43 ++++++ .../mods/extendedcrafting/EnderCrafting.java | 4 +- .../compat/vanilla/CraftingRecipeBuilder.java | 2 +- 12 files changed, 432 insertions(+), 14 deletions(-) create mode 100644 examples/avaritia.groovy create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Avaritia.java create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Compressor.java create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeCrafting.java create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapedRecipe.java create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapelessRecipe.java diff --git a/build.gradle b/build.gradle index 0fc29a6ee..7c6bb4668 100644 --- a/build.gradle +++ b/build.gradle @@ -108,6 +108,12 @@ dependencies { implementation 'mezz.jei:jei_1.12.2:4.16.1.302' + compileOnly rfg.deobf('curse.maven:avaritia_1_10-261348:3143349') + if (project.debug_avaritia.toBoolean()) { + runtimeOnly rfg.deobf('curse.maven:codechicken_lib_1_8-242818:2779848') + runtimeOnly rfg.deobf('curse.maven:avaritia_1_10-261348:3143349') + } + compileOnly rfg.deobf("curse.maven:ctm-267602:2915363") compileOnly rfg.deobf("curse.maven:chisel-235279:2915375") if (project.debug_chisel.toBoolean()) { diff --git a/examples/avaritia.groovy b/examples/avaritia.groovy new file mode 100644 index 000000000..9ed855cc5 --- /dev/null +++ b/examples/avaritia.groovy @@ -0,0 +1,15 @@ + +mods.avaritia.ExtremeCrafting.removeByOutput(item('avaritia:resource', 6)) +mods.avaritia.ExtremeCrafting.shapedBuilder() + .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')) + .register() + +mods.avaritia.Compressor.removeByOutput(item('avaritia:singularity', 0)) +mods.avaritia.Compressor.add(item('minecraft:nether_star'), item('minecraft:clay_ball'), 100) \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 22e2b46a7..b816a0d1f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,19 +17,20 @@ coremod_plugin_class_name = com.cleanroommc.groovyscript.core.GroovyScriptCore # Debug mod compat debug_actually_additions = false +debug_astral = false +debug_avaritia = true +debug_blood_magic = false +debug_botania = false debug_chisel = false -debug_mekanism = false +debug_de = false +debug_enderio = false debug_evilcraft = false -debug_thermal = false -debug_thaum = false +debug_extended_crafting = false +debug_forestry = false debug_ic2 = false -debug_de = false debug_ie = false -debug_enderio = false -debug_astral = false -debug_roots = false -debug_blood_magic = false +debug_mekanism = false +debug_thermal = false +debug_thaum = false debug_tinkers = false -debug_extended_crafting = false -debug_botania = false -debug_forestry = false \ No newline at end of file +debug_roots = false diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index c22b71d2c..5914394c2 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -4,6 +4,7 @@ import com.cleanroommc.groovyscript.api.IDynamicGroovyProperty; import com.cleanroommc.groovyscript.compat.mods.actuallyadditions.ActuallyAdditions; import com.cleanroommc.groovyscript.compat.mods.astralsorcery.AstralSorcery; +import com.cleanroommc.groovyscript.compat.mods.avaritia.Avaritia; import com.cleanroommc.groovyscript.compat.mods.bloodmagic.BloodMagic; import com.cleanroommc.groovyscript.compat.mods.botania.Botania; import com.cleanroommc.groovyscript.compat.mods.chisel.Chisel; @@ -42,6 +43,7 @@ public class ModSupport implements IDynamicGroovyProperty { public static final Container ACTUALLY_ADDITIONS = new Container<>("actuallyadditions", "Actually Additions", ActuallyAdditions::new, "aa"); public static final Container ASTRAL_SORCERY = new Container<>("astralsorcery", "Astral Sorcery", AstralSorcery::new, "astral", "astral_sorcery", "as"); + public static final Container AVARITIA = new Container<>("avaritia", "Avaritia", Avaritia::new); public static final Container CHISEL = new Container<>("chisel", "Chisel", Chisel::new); public static final Container ENDER_IO = new Container<>("enderio", "Ender IO", EnderIO::new, "eio"); public static final Container JEI = new Container<>("jei", "Just Enough Items", JustEnoughItems::new, "hei"); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Avaritia.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Avaritia.java new file mode 100644 index 000000000..452e51549 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Avaritia.java @@ -0,0 +1,14 @@ +package com.cleanroommc.groovyscript.compat.mods.avaritia; + +import com.cleanroommc.groovyscript.compat.mods.ModPropertyContainer; + +public class Avaritia extends ModPropertyContainer { + + public final ExtremeCrafting extremeCrafting = new ExtremeCrafting(); + public final Compressor compressor = new Compressor(); + + public Avaritia() { + addRegistry(this.extremeCrafting); + addRegistry(this.compressor); + } +} 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 new file mode 100644 index 000000000..f36823e71 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/Compressor.java @@ -0,0 +1,66 @@ +package com.cleanroommc.groovyscript.compat.mods.avaritia; + +import com.cleanroommc.groovyscript.GroovyScript; +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; +import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import morph.avaritia.recipe.AvaritiaRecipeManager; +import morph.avaritia.recipe.compressor.CompressorRecipe; +import morph.avaritia.recipe.compressor.ICompressorRecipe; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import java.util.Collections; + +public class Compressor extends VirtualizedRegistry { + + @Override + public void onReload() { + removeScripted().forEach(recipe -> AvaritiaRecipeManager.COMPRESSOR_RECIPES.values().removeIf(r -> r == recipe)); + restoreFromBackup().forEach(recipe -> AvaritiaRecipeManager.COMPRESSOR_RECIPES.put(recipe.getRegistryName(), recipe)); + } + + public void remove(ICompressorRecipe recipe) { + recipe = AvaritiaRecipeManager.COMPRESSOR_RECIPES.remove(recipe.getRegistryName()); + if (recipe != null) { + addBackup(recipe); + } + } + + public boolean removeByOutput(ItemStack output) { + if (IngredientHelper.isEmpty(output)) { + GroovyLog.msg("Error removing avaritia compressor recipe") + .add("output must not be empty") + .error() + .post(); + return false; + } + return AvaritiaRecipeManager.COMPRESSOR_RECIPES.values().removeIf(recipe -> { + if (recipe != null && recipe.getResult().isItemEqual(output)) { + addBackup(recipe); + return true; + } + return false; + }); + } + + public void add(ICompressorRecipe recipe) { + AvaritiaRecipeManager.COMPRESSOR_RECIPES.put(recipe.getRegistryName(), recipe); + addScripted(recipe); + } + + public void add(ItemStack output, IIngredient input, int cost) { + if (GroovyLog.msg("Error adding avaritia compressor recipe") + .add(IngredientHelper.isEmpty(output), () -> "output must not be empty") + .add(IngredientHelper.isEmpty(input), () -> "input must not be empty") + .error() + .postIfNotEmpty()) { + return; + } + if (cost <= 0) cost = 1; + CompressorRecipe recipe = new CompressorRecipe(output, cost, true, Collections.singletonList(input.toMcIngredient())); + recipe.setRegistryName(new ResourceLocation(GroovyScript.getRunConfig().getPackId())); + add(recipe); + } +} 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 new file mode 100644 index 000000000..31bb6f65f --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeCrafting.java @@ -0,0 +1,76 @@ +package com.cleanroommc.groovyscript.compat.mods.avaritia; + +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.helper.SimpleObjectStream; +import com.cleanroommc.groovyscript.registry.VirtualizedRegistry; +import morph.avaritia.recipe.AvaritiaRecipeManager; +import morph.avaritia.recipe.extreme.IExtremeRecipe; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public class ExtremeCrafting extends VirtualizedRegistry { + + public ExtremeRecipeBuilder.Shaped shapedBuilder() { + return new ExtremeRecipeBuilder.Shaped(); + } + + public ExtremeRecipeBuilder.Shapeless shapelessBuilder() { + return new ExtremeRecipeBuilder.Shapeless(); + } + + @Override + public void onReload() { + removeScripted().forEach(recipe -> AvaritiaRecipeManager.EXTREME_RECIPES.values().removeIf(r -> r == recipe)); + restoreFromBackup().forEach(recipe -> AvaritiaRecipeManager.EXTREME_RECIPES.put(recipe.getRegistryName(), recipe)); + } + + public IExtremeRecipe addShaped(ItemStack output, List> input) { + return (IExtremeRecipe) shapedBuilder() + .matrix(input) + .output(output) + .register(); + } + + public IExtremeRecipe addShapeless(ItemStack output, List input) { + return (IExtremeRecipe) shapelessBuilder() + .input(input) + .output(output) + .register(); + } + + public IExtremeRecipe add(IExtremeRecipe recipe) { + if (recipe != null) { + addScripted(recipe); + AvaritiaRecipeManager.EXTREME_RECIPES.put(recipe.getRegistryName(), recipe); + } + return recipe; + } + + public boolean removeByOutput(ItemStack stack) { + return AvaritiaRecipeManager.EXTREME_RECIPES.values().removeIf(recipe -> { + if (recipe != null && recipe.getRecipeOutput().isItemEqual(stack)) { + addBackup(recipe); + return true; + } + return false; + }); + } + + public boolean remove(IExtremeRecipe recipe) { + recipe = AvaritiaRecipeManager.EXTREME_RECIPES.remove(recipe.getRegistryName()); + if (recipe != null) { + addBackup(recipe); + } + return recipe != null; + } + + public SimpleObjectStream streamRecipes() { + return new SimpleObjectStream<>(AvaritiaRecipeManager.EXTREME_RECIPES.values()).setRemover(this::remove); + } + + public void removeAll() { + AvaritiaRecipeManager.EXTREME_RECIPES.values().forEach(this::addBackup); + AvaritiaRecipeManager.EXTREME_RECIPES.values().clear(); + } +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java new file mode 100644 index 000000000..33846e2a5 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java @@ -0,0 +1,145 @@ +package com.cleanroommc.groovyscript.compat.mods.avaritia; + +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.compat.vanilla.CraftingRecipeBuilder; +import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper; +import it.unimi.dsi.fastutil.chars.Char2ObjectOpenHashMap; +import morph.avaritia.recipe.extreme.IExtremeRecipe; +import org.apache.commons.lang3.ArrayUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public abstract class ExtremeRecipeBuilder extends CraftingRecipeBuilder { + + public ExtremeRecipeBuilder() { + super(9, 9); + } + + public static class Shaped extends ExtremeRecipeBuilder { + + private final Char2ObjectOpenHashMap keyMap = new Char2ObjectOpenHashMap<>(); + private final List errors = new ArrayList<>(); + protected boolean mirrored = false; + private String[] keyBasedMatrix; + private List> ingredientMatrix; + + public Shaped() { + keyMap.put(' ', IIngredient.EMPTY); + } + + public ExtremeRecipeBuilder.Shaped mirrored(boolean mirrored) { + this.mirrored = mirrored; + return this; + } + + public ExtremeRecipeBuilder.Shaped mirrored() { + return mirrored(true); + } + + public ExtremeRecipeBuilder.Shaped matrix(String... matrix) { + this.keyBasedMatrix = matrix; + return this; + } + + public ExtremeRecipeBuilder.Shaped shape(String... matrix) { + this.keyBasedMatrix = matrix; + return this; + } + + public ExtremeRecipeBuilder.Shaped row(String row) { + if (this.keyBasedMatrix == null) { + this.keyBasedMatrix = new String[]{row}; + } else { + this.keyBasedMatrix = ArrayUtils.add(this.keyBasedMatrix, row); + } + return this; + } + + public ExtremeRecipeBuilder.Shaped key(String c, IIngredient ingredient) { + if (c == null || c.length() != 1) { + errors.add("key must be a single char, but found '" + c + "'"); + return this; + } + this.keyMap.put(c.charAt(0), ingredient); + return this; + } + + public ExtremeRecipeBuilder.Shaped matrix(List> matrix) { + this.ingredientMatrix = matrix; + return this; + } + + public ExtremeRecipeBuilder.Shaped shape(List> matrix) { + this.ingredientMatrix = matrix; + return this; + } + + @Override + public IExtremeRecipe register() { + GroovyLog.Msg msg = GroovyLog.msg("Error adding shaped Extended Crafting Table recipe").error() + .add((keyBasedMatrix == null || keyBasedMatrix.length == 0) && (ingredientMatrix == null || ingredientMatrix.isEmpty()), () -> "No matrix was defined") + .add(keyBasedMatrix != null && ingredientMatrix != null, () -> "A key based matrix AND a ingredient based matrix was defined. This is not allowed!"); + if (msg.postIfNotEmpty()) return null; + msg.add(IngredientHelper.isEmpty(this.output), () -> "Output must not be empty"); + IExtremeRecipe recipe = null; + if (keyBasedMatrix != null) { + recipe = validateShape(msg, errors, keyBasedMatrix, keyMap, ((width1, height1, ingredients) -> ExtremeShapedRecipe.make(output, ingredients, width1, height1, mirrored, recipeFunction, recipeAction))); + } else if (ingredientMatrix != null) { + recipe = validateShape(msg, ingredientMatrix, ((width1, height1, ingredients) -> ExtremeShapedRecipe.make(output.copy(), ingredients, width1, height1, mirrored, recipeFunction, recipeAction))); + } + if (msg.postIfNotEmpty()) return null; + if (recipe != null) { + ModSupport.AVARITIA.get().extremeCrafting.add(recipe); + } + return recipe; + } + } + + public static class Shapeless extends ExtremeRecipeBuilder { + + private final List ingredients = new ArrayList<>(); + + public ExtremeRecipeBuilder.Shapeless input(IIngredient ingredient) { + ingredients.add(ingredient); + return this; + } + + public ExtremeRecipeBuilder.Shapeless input(IIngredient... ingredients) { + if (ingredients != null) { + for (IIngredient ingredient : ingredients) { + input(ingredient); + } + } + return this; + } + + public ExtremeRecipeBuilder.Shapeless input(Collection ingredients) { + if (ingredients != null && !ingredients.isEmpty()) { + for (IIngredient ingredient : ingredients) { + input(ingredient); + } + } + return this; + } + + public boolean validate() { + GroovyLog.Msg msg = GroovyLog.msg("Error adding shapeless Extended Crafting Table recipe").error(); + msg.add(IngredientHelper.isEmpty(this.output), () -> "Output must not be empty"); + msg.add(ingredients.isEmpty(), () -> "inputs must not be empty"); + msg.add(ingredients.size() > width * height, () -> "maximum inputs are " + (width * height) + " but found " + ingredients.size()); + return !msg.postIfNotEmpty(); + } + + @Override + public IExtremeRecipe register() { + if (!validate()) return null; + IExtremeRecipe recipe = ExtremeShapelessRecipe.make(output.copy(), ingredients, recipeFunction, recipeAction); + ModSupport.AVARITIA.get().extremeCrafting.add(recipe); + return recipe; + } + } +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapedRecipe.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapedRecipe.java new file mode 100644 index 000000000..1e6c06264 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapedRecipe.java @@ -0,0 +1,50 @@ +package com.cleanroommc.groovyscript.compat.mods.avaritia; + +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.compat.vanilla.ShapedCraftingRecipe; +import groovy.lang.Closure; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import net.minecraftforge.common.crafting.CraftingHelper; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ExtremeShapedRecipe extends morph.avaritia.recipe.extreme.ExtremeShapedRecipe { + + private final ShapedCraftingRecipe groovyRecipe; + + public static ExtremeShapedRecipe make(ItemStack output, List input, int width, int height, boolean mirrored, @Nullable Closure recipeFunction, @Nullable Closure recipeAction) { + ShapedCraftingRecipe recipe = new ShapedCraftingRecipe(output, input, width, height, mirrored, recipeFunction, recipeAction); + CraftingHelper.ShapedPrimer primer = new CraftingHelper.ShapedPrimer(); + primer.width = width; + primer.height = height; + primer.mirrored = mirrored; + primer.input = recipe.getIngredients(); + return new ExtremeShapedRecipe(recipe, primer); + } + + private ExtremeShapedRecipe(ShapedCraftingRecipe groovyRecipe, CraftingHelper.ShapedPrimer primer) { + super(groovyRecipe.getRecipeOutput(), primer); + this.groovyRecipe = groovyRecipe; + setMirrored(this.groovyRecipe.isMirrored()); + } + + @Override + public @NotNull ItemStack getCraftingResult(@NotNull InventoryCrafting inv) { + return this.groovyRecipe.getCraftingResult(inv); + } + + @Override + public boolean matches(@NotNull InventoryCrafting inv, @NotNull World world) { + return this.groovyRecipe.matches(inv, world); + } + + @Override + public @NotNull NonNullList getRemainingItems(@NotNull InventoryCrafting inv) { + return this.groovyRecipe.getRemainingItems(inv); + } +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapelessRecipe.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapelessRecipe.java new file mode 100644 index 000000000..7ac3dba42 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeShapelessRecipe.java @@ -0,0 +1,43 @@ +package com.cleanroommc.groovyscript.compat.mods.avaritia; + +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.compat.vanilla.ShapelessCraftingRecipe; +import groovy.lang.Closure; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraft.world.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class ExtremeShapelessRecipe extends morph.avaritia.recipe.extreme.ExtremeShapelessRecipe { + + private final ShapelessCraftingRecipe groovyRecipe; + + public static ExtremeShapelessRecipe make(ItemStack output, List input, @Nullable Closure recipeFunction, @Nullable Closure recipeAction) { + ShapelessCraftingRecipe recipe = new ShapelessCraftingRecipe(output, input, recipeFunction, recipeAction); + return new ExtremeShapelessRecipe(recipe); + } + + public ExtremeShapelessRecipe(ShapelessCraftingRecipe groovyRecipe) { + super(groovyRecipe.getIngredients(), groovyRecipe.getRecipeOutput()); + this.groovyRecipe = groovyRecipe; + } + + @Override + public @NotNull ItemStack getCraftingResult(@NotNull InventoryCrafting inv) { + return this.groovyRecipe.getCraftingResult(inv); + } + + @Override + public boolean matches(@NotNull InventoryCrafting inv, @NotNull World world) { + return this.groovyRecipe.matches(inv, world); + } + + @Override + public @NotNull NonNullList getRemainingItems(@NotNull InventoryCrafting inv) { + return this.groovyRecipe.getRemainingItems(inv); + } +} 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 163bb2885..abfefbd1f 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 @@ -35,7 +35,7 @@ public IRecipe addShaped(ItemStack output, List> input) { } public IRecipe addShaped(int time, ItemStack output, List> input) { - return shapedBuilder() + return (IRecipe) shapedBuilder() .matrix(input) .time(time) .output(output) @@ -47,7 +47,7 @@ public IRecipe addShapeless(ItemStack output, List> input) { } public IRecipe addShapeless(int time, ItemStack output, List input) { - return shapelessBuilder() + return (IRecipe) shapelessBuilder() .input(input) .time(time) .output(output) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/CraftingRecipeBuilder.java b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/CraftingRecipeBuilder.java index 638316057..d4968043a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/CraftingRecipeBuilder.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/CraftingRecipeBuilder.java @@ -67,7 +67,7 @@ public CraftingRecipeBuilder replaceByName() { return this; } - public abstract IRecipe register(); + public abstract Object register(); @GroovyBlacklist protected void handleReplace() { From 2f55385a2ff5b319ea161c10a3d3e27932bacfe2 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Wed, 2 Aug 2023 16:42:40 +0200 Subject: [PATCH 2/7] reviews --- build.gradle | 12 +-- examples/avaritia.groovy | 21 +++++- .../compat/mods/avaritia/Compressor.java | 75 +++++++++++++++---- .../helper/recipe/AbstractRecipeBuilder.java | 2 +- 4 files changed, 90 insertions(+), 20 deletions(-) diff --git a/build.gradle b/build.gradle index 7c6bb4668..efea7acee 100644 --- a/build.gradle +++ b/build.gradle @@ -108,9 +108,13 @@ dependencies { implementation 'mezz.jei:jei_1.12.2:4.16.1.302' + compileOnly rfg.deobf('curse.maven:codechicken_lib_1_8-242818:2779848') + if (project.debug_avaritia.toBoolean() || project.debug_de.toBoolean()) { + runtimeOnly rfg.deobf('curse.maven:codechicken_lib_1_8-242818:2779848') + } + compileOnly rfg.deobf('curse.maven:avaritia_1_10-261348:3143349') if (project.debug_avaritia.toBoolean()) { - runtimeOnly rfg.deobf('curse.maven:codechicken_lib_1_8-242818:2779848') runtimeOnly rfg.deobf('curse.maven:avaritia_1_10-261348:3143349') } @@ -137,7 +141,7 @@ dependencies { runtimeOnly rfg.deobf('curse.maven:guide-api-228832:2645992') runtimeOnly rfg.deobf('curse.maven:blood-magic-224791:2822288') } - + compileOnly rfg.deobf('curse.maven:cyclops-core-232758:3159497') if (project.debug_evilcraft.toBoolean()) { runtimeOnly rfg.deobf('curse.maven:cyclops-core-232758:3159497') @@ -147,7 +151,7 @@ dependencies { if (project.debug_evilcraft.toBoolean()) { runtimeOnly rfg.deobf('curse.maven:evilcraft-74610:2811267') } - + compileOnly rfg.deobf('curse.maven:actually-additions-228404:3117927') if (project.debug_actually_additions.toBoolean()) { runtimeOnly rfg.deobf('curse.maven:actually-additions-228404:3117927') @@ -171,11 +175,9 @@ dependencies { runtimeOnly rfg.deobf('curse.maven:thermal_foundation-222880:2926428') } - compileOnly rfg.deobf('curse.maven:codechicken_lib_1_8-242818:2779848') compileOnly rfg.deobf('curse.maven:draconic_evolution-223565:3431261') compileOnly rfg.deobf('curse.maven:brandons_core-231382:3408276') if (project.debug_de.toBoolean()) { - runtimeOnly rfg.deobf('curse.maven:codechicken_lib_1_8-242818:2779848') runtimeOnly rfg.deobf('curse.maven:draconic_evolution-223565:3431261') runtimeOnly rfg.deobf('curse.maven:brandons_core-231382:3408276') } diff --git a/examples/avaritia.groovy b/examples/avaritia.groovy index 9ed855cc5..91f9e0648 100644 --- a/examples/avaritia.groovy +++ b/examples/avaritia.groovy @@ -11,5 +11,24 @@ mods.avaritia.ExtremeCrafting.shapedBuilder() .output(item('minecraft:gold_block')) .register() +mods.avaritia.ExtremeCrafting.shapedBuilder() + .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').reuse()) // stone will not be consumed in the recipe + .key('I', item('minecraft:iron_ingot')) + .key('G', item('minecraft:gold_ingot')) + .register() + mods.avaritia.Compressor.removeByOutput(item('avaritia:singularity', 0)) -mods.avaritia.Compressor.add(item('minecraft:nether_star'), item('minecraft:clay_ball'), 100) \ No newline at end of file +mods.avaritia.Compressor.add(item('minecraft:nether_star'), item('minecraft:clay_ball'), 100) // the last number is the required input amount +mods.avaritia.Compressor.recipeBuilder() + .input(item('minecraft:clay_ball')) + .output(item('minecraft:nether_star')) + .cost(100) // required input amount + .register() 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 f36823e71..47000f894 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 @@ -1,15 +1,16 @@ package com.cleanroommc.groovyscript.compat.mods.avaritia; -import com.cleanroommc.groovyscript.GroovyScript; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; +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.recipe.AvaritiaRecipeManager; import morph.avaritia.recipe.compressor.CompressorRecipe; import morph.avaritia.recipe.compressor.ICompressorRecipe; import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.Nullable; import java.util.Collections; @@ -21,11 +22,13 @@ public void onReload() { restoreFromBackup().forEach(recipe -> AvaritiaRecipeManager.COMPRESSOR_RECIPES.put(recipe.getRegistryName(), recipe)); } - public void remove(ICompressorRecipe recipe) { + public boolean remove(ICompressorRecipe recipe) { recipe = AvaritiaRecipeManager.COMPRESSOR_RECIPES.remove(recipe.getRegistryName()); if (recipe != null) { addBackup(recipe); + return true; } + return false; } public boolean removeByOutput(ItemStack output) { @@ -45,22 +48,68 @@ public boolean removeByOutput(ItemStack output) { }); } + public void removeAll() { + AvaritiaRecipeManager.COMPRESSOR_RECIPES.values().forEach(this::addBackup); + AvaritiaRecipeManager.COMPRESSOR_RECIPES.values().clear(); + } + + public SimpleObjectStream streamRecipes() { + return new SimpleObjectStream<>(AvaritiaRecipeManager.COMPRESSOR_RECIPES.values()).setRemover(this::remove); + } + + public RecipeBuilder recipeBuilder() { + return new RecipeBuilder(); + } + public void add(ICompressorRecipe recipe) { AvaritiaRecipeManager.COMPRESSOR_RECIPES.put(recipe.getRegistryName(), recipe); addScripted(recipe); } public void add(ItemStack output, IIngredient input, int cost) { - if (GroovyLog.msg("Error adding avaritia compressor recipe") - .add(IngredientHelper.isEmpty(output), () -> "output must not be empty") - .add(IngredientHelper.isEmpty(input), () -> "input must not be empty") - .error() - .postIfNotEmpty()) { - return; + recipeBuilder() + .cost(cost) + .input(input) + .output(output) + .register(); + } + + public class RecipeBuilder extends AbstractRecipeBuilder { + + private int cost = 300; + + public RecipeBuilder cost(int cost) { + this.cost = cost; + return this; + } + + @Override + public String getRecipeNamePrefix() { + return "avaritia_compressor_"; + } + + @Override + public String getErrorMsg() { + return "Error adding Avaritia compressor recipe"; + } + + @Override + public void validate(GroovyLog.Msg msg) { + validateItems(msg, 1, 1, 1, 1); + validateFluids(msg); + validateName(); + if (this.cost <= 0) { + this.cost = 1; + } + } + + @Override + public @Nullable ICompressorRecipe register() { + if (!validate()) return null; + CompressorRecipe recipe = new CompressorRecipe(this.output.get(0), this.cost, true, Collections.singletonList(this.input.get(0).toMcIngredient())); + recipe.setRegistryName(this.name); + add(recipe); + return recipe; } - if (cost <= 0) cost = 1; - CompressorRecipe recipe = new CompressorRecipe(output, cost, true, Collections.singletonList(input.toMcIngredient())); - recipe.setRegistryName(new ResourceLocation(GroovyScript.getRunConfig().getPackId())); - add(recipe); } } diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/recipe/AbstractRecipeBuilder.java b/src/main/java/com/cleanroommc/groovyscript/helper/recipe/AbstractRecipeBuilder.java index 84b5a158a..d435b2e5c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/recipe/AbstractRecipeBuilder.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/recipe/AbstractRecipeBuilder.java @@ -123,7 +123,7 @@ public boolean validate() { public void validateName() { if (name == null) { - name = new ResourceLocation(GroovyScript.getRunConfig().getPackId(), RecipeName.generate(getRecipeNamePrefix())); + name = RecipeName.generateRl(getRecipeNamePrefix()); } } From 46e704536565ec11b46b15fc7a7033a08240d3de Mon Sep 17 00:00:00 2001 From: brachy84 Date: Wed, 2 Aug 2023 16:44:25 +0200 Subject: [PATCH 3/7] example --- examples/avaritia.groovy | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/examples/avaritia.groovy b/examples/avaritia.groovy index 91f9e0648..dfef8b37a 100644 --- a/examples/avaritia.groovy +++ b/examples/avaritia.groovy @@ -25,6 +25,16 @@ mods.avaritia.ExtremeCrafting.shapedBuilder() .key('G', item('minecraft:gold_ingot')) .register() +mods.avaritia.ExtremeCrafting.shapelessBuilder() + .output(item('minecraft:stone') * 64) + .input(item('minecraft:stone'), + item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'), + item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'), + item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'), + item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'), + item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone'),item('minecraft:stone')) + .register() + mods.avaritia.Compressor.removeByOutput(item('avaritia:singularity', 0)) mods.avaritia.Compressor.add(item('minecraft:nether_star'), item('minecraft:clay_ball'), 100) // the last number is the required input amount mods.avaritia.Compressor.recipeBuilder() From 71d09471a121ab3772787bc187440a397accd486 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Thu, 3 Aug 2023 08:30:22 +0200 Subject: [PATCH 4/7] more reviews --- examples/avaritia.groovy | 2 +- gradle.properties | 2 +- .../compat/mods/avaritia/Compressor.java | 21 ++++++++++++------- .../mods/avaritia/ExtremeRecipeBuilder.java | 2 ++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/examples/avaritia.groovy b/examples/avaritia.groovy index dfef8b37a..0826ffe0a 100644 --- a/examples/avaritia.groovy +++ b/examples/avaritia.groovy @@ -40,5 +40,5 @@ mods.avaritia.Compressor.add(item('minecraft:nether_star'), item('minecraft:clay mods.avaritia.Compressor.recipeBuilder() .input(item('minecraft:clay_ball')) .output(item('minecraft:nether_star')) - .cost(100) // required input amount + .inputCount(100) // required input amount .register() diff --git a/gradle.properties b/gradle.properties index e89634ac0..484edecad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ coremod_plugin_class_name = com.cleanroommc.groovyscript.core.GroovyScriptCore # Debug mod compat debug_actually_additions = false debug_astral = false -debug_avaritia = true +debug_avaritia = false debug_blood_magic = false debug_botania = false debug_chisel = false 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 47000f894..1bbab7365 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 @@ -68,7 +68,7 @@ public void add(ICompressorRecipe recipe) { public void add(ItemStack output, IIngredient input, int cost) { recipeBuilder() - .cost(cost) + .inputCount(cost) .input(input) .output(output) .register(); @@ -76,10 +76,17 @@ public void add(ItemStack output, IIngredient input, int cost) { public class RecipeBuilder extends AbstractRecipeBuilder { - private int cost = 300; + private int inputCount = 300; - public RecipeBuilder cost(int cost) { - this.cost = cost; + @Override + public AbstractRecipeBuilder input(IIngredient ingredient) { + if (ingredient == null) return this; + this.inputCount = ingredient.getAmount(); + return super.input(ingredient.withAmount(1)); + } + + public RecipeBuilder inputCount(int inputCount) { + this.inputCount = inputCount; return this; } @@ -98,15 +105,15 @@ public void validate(GroovyLog.Msg msg) { validateItems(msg, 1, 1, 1, 1); validateFluids(msg); validateName(); - if (this.cost <= 0) { - this.cost = 1; + if (this.inputCount <= 0) { + this.inputCount = 1; } } @Override public @Nullable ICompressorRecipe register() { if (!validate()) return null; - CompressorRecipe recipe = new CompressorRecipe(this.output.get(0), this.cost, true, Collections.singletonList(this.input.get(0).toMcIngredient())); + CompressorRecipe recipe = new CompressorRecipe(this.output.get(0), this.inputCount, true, Collections.singletonList(this.input.get(0).toMcIngredient())); recipe.setRegistryName(this.name); add(recipe); return recipe; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java index 33846e2a5..70938eb01 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java @@ -93,6 +93,7 @@ public IExtremeRecipe register() { } if (msg.postIfNotEmpty()) return null; if (recipe != null) { + recipe.setRegistryName(createName(this.name, "extreme_shaped_")); ModSupport.AVARITIA.get().extremeCrafting.add(recipe); } return recipe; @@ -138,6 +139,7 @@ public boolean validate() { public IExtremeRecipe register() { if (!validate()) return null; IExtremeRecipe recipe = ExtremeShapelessRecipe.make(output.copy(), ingredients, recipeFunction, recipeAction); + recipe.setRegistryName(createName(this.name, "extreme_shapeless_")); ModSupport.AVARITIA.get().extremeCrafting.add(recipe); return recipe; } From 2dc6520a73a8ce2dad42c56d398db8de5e48b6b3 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Thu, 3 Aug 2023 10:29:54 +0200 Subject: [PATCH 5/7] check ingredient amount --- .../compat/mods/avaritia/Compressor.java | 4 +++- .../mods/extendedcrafting/CompressionCrafting.java | 13 +++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) 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 1bbab7365..fbe315f30 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 @@ -81,7 +81,9 @@ public class RecipeBuilder extends AbstractRecipeBuilder { @Override public AbstractRecipeBuilder input(IIngredient ingredient) { if (ingredient == null) return this; - this.inputCount = ingredient.getAmount(); + if (ingredient.getAmount() > 1) { + this.inputCount = ingredient.getAmount(); + } return super.input(ingredient.withAmount(1)); } 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 c21793a97..9d6df8d74 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 @@ -95,7 +95,6 @@ public RecipeBuilder recipeBuilder() { public static class RecipeBuilder extends AbstractRecipeBuilder { - private IIngredient input; private int inputCount; private IIngredient catalyst = IngredientHelper.toIIngredient(ItemSingularity.getCatalystStack()); private boolean consumeCatalyst = false; @@ -103,8 +102,11 @@ public static class RecipeBuilder extends AbstractRecipeBuilder 1) { + this.inputCount = input.getAmount(); + } + this.input.add(input.withAmount(1)); return this; } @@ -140,10 +142,9 @@ public String getErrorMsg() { @Override public void validate(GroovyLog.Msg msg) { + validateItems(msg, 1, 1, 1, 1); validateFluids(msg); - msg.add(IngredientHelper.isEmpty(input), () -> "input must not be empty"); - msg.add(output.size() != 1, () -> getRequiredString(1, 1, "item output") + ", but found " + output.size()); msg.add(IngredientHelper.isEmpty(catalyst), "catalyst must not be empty"); msg.add(powerCost < 0, "power cost must not be negative"); msg.add(powerRate < 0, "power rate must not be negative"); @@ -153,7 +154,7 @@ public void validate(GroovyLog.Msg msg) { @Override public CompressorRecipe register() { if (!validate()) return null; - CompressorRecipe recipe = new CompressorRecipe(output.get(0), input.toMcIngredient(), inputCount, catalyst.toMcIngredient(), consumeCatalyst, powerCost, powerRate); + CompressorRecipe recipe = new CompressorRecipe(output.get(0), input.get(0).toMcIngredient(), inputCount, catalyst.toMcIngredient(), consumeCatalyst, powerCost, powerRate); ModSupport.EXTENDED_CRAFTING.get().compressionCrafting.add(recipe); return recipe; } From bbd8e99edb2bf7ed25d5fd2d318dccc41d85c94b Mon Sep 17 00:00:00 2001 From: brachy84 Date: Mon, 7 Aug 2023 17:40:04 +0200 Subject: [PATCH 6/7] fix error --- .../mods/avaritia/ExtremeRecipeBuilder.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java index 70938eb01..c1c9127cb 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/avaritia/ExtremeRecipeBuilder.java @@ -93,11 +93,17 @@ public IExtremeRecipe register() { } if (msg.postIfNotEmpty()) return null; if (recipe != null) { - recipe.setRegistryName(createName(this.name, "extreme_shaped_")); + validateName(); + recipe.setRegistryName(this.name); ModSupport.AVARITIA.get().extremeCrafting.add(recipe); } return recipe; } + + @Override + public String getRecipeNamePrefix() { + return "grs_extreme_shaped_"; + } } public static class Shapeless extends ExtremeRecipeBuilder { @@ -138,10 +144,16 @@ public boolean validate() { @Override public IExtremeRecipe register() { if (!validate()) return null; + validateName(); IExtremeRecipe recipe = ExtremeShapelessRecipe.make(output.copy(), ingredients, recipeFunction, recipeAction); - recipe.setRegistryName(createName(this.name, "extreme_shapeless_")); + recipe.setRegistryName(this.name); ModSupport.AVARITIA.get().extremeCrafting.add(recipe); return recipe; } + + @Override + public String getRecipeNamePrefix() { + return "grs_extreme_shapeless_"; + } } } From 834360570049a431dfd79200c38250d25ab8801e Mon Sep 17 00:00:00 2001 From: brachy84 Date: Mon, 7 Aug 2023 18:30:57 +0200 Subject: [PATCH 7/7] fix more merge errors --- gradle.properties | 16 ++++------ .../groovyscript/compat/mods/ModSupport.java | 32 +++++++++---------- .../groovyscript/core/LateMixin.java | 1 - 3 files changed, 22 insertions(+), 27 deletions(-) diff --git a/gradle.properties b/gradle.properties index 889261114..0dddd5430 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,31 +18,27 @@ coremod_plugin_class_name = com.cleanroommc.groovyscript.core.GroovyScriptCore # Debug mod compat debug_actually_additions = false +debug_adv_mortars = false +debug_applied_energistics_2 = false debug_astral = false debug_avaritia = false debug_blood_magic = false debug_botania = false -debug_applied_energistics_2 = false debug_chisel = false +debug_compact_machines = false debug_draconic_evolution = false debug_enderio = false debug_evilcraft = false debug_extended_crafting = false debug_forestry = false +debug_immersive_engineering = false debug_integrated_dynamics = false -debug_thermal = false -debug_thaum = false debug_industrial_craft_2_classic = false debug_industrial_craft_2_experimental = false -debug_immersive_engineering = false +debug_inspirations = false debug_mekanism = false debug_roots = false debug_thaum = false debug_thermal = false debug_tinkers = false -debug_extended_crafting = false -debug_adv_mortars = false -debug_botania = false -debug_forestry = false -debug_inspirations = false -debug_compact_machines = false +debug_woot = false diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index d529e973a..c338914ff 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -48,31 +48,31 @@ public class ModSupport implements IDynamicGroovyProperty { public static final ModSupport INSTANCE = new ModSupport(); // Just for Binding purposes public static final Container ACTUALLY_ADDITIONS = new Container<>("actuallyadditions", "Actually Additions", ActuallyAdditions::new, "aa"); + public static final Container ADVANCED_MORTARS = new Container<>("advancedmortars", "Advanced Mortars", AdvancedMortars::new); + public static final Container APPLIED_ENERGISTICS_2 = new Container<>("appliedenergistics2", "Applied Energistics 2", AppliedEnergistics2::new, "ae2"); public static final Container ASTRAL_SORCERY = new Container<>("astralsorcery", "Astral Sorcery", AstralSorcery::new, "astral", "astral_sorcery", "as"); public static final Container AVARITIA = new Container<>("avaritia", "Avaritia", Avaritia::new); + public static final Container BLOOD_MAGIC = new Container<>("bloodmagic", "Blood Magic: Alchemical Wizardry", BloodMagic::new, "bm"); + public static final Container BOTANIA = new Container<>("botania", "Botania", Botania::new); public static final Container CHISEL = new Container<>("chisel", "Chisel", Chisel::new); + public static final Container COMPACT_MACHINES = new Container<>("compactmachines3", "Compact Machines 3", CompactMachines::new, "compactmachines"); + public static final Container DRACONIC_EVOLUTION = new Container<>("draconicevolution", "Draconic Evolution", DraconicEvolution::new, "de"); public static final Container ENDER_IO = new Container<>("enderio", "Ender IO", EnderIO::new, "eio"); + public static final Container EVILCRAFT = new Container<>("evilcraft", "EvilCraft", EvilCraft::new); + public static final Container EXTENDED_CRAFTING = new Container<>("extendedcrafting", "Extended Crafting", ExtendedCrafting::new); + public static final Container FORESTRY = new Container<>("forestry", "Forestry", Forestry::new); + public static final Container IMMERSIVE_ENGINEERING = new Container<>("immersiveengineering", "Immersive Engineering", ImmersiveEngineering::new, "ie"); + public static final Container INDUSTRIALCRAFT = new Container<>("ic2", "Industrial Craft 2", IC2::new, "industrialcraft"); + public static final Container INSPIRATIONS = new Container<>("inspirations", "Inspirations", Inspirations::new); + public static final Container INTEGRATED_DYNAMICS = new Container<>("integrateddynamics", "Integrated Dynamics", IntegratedDynamics::new, "id"); public static final Container JEI = new Container<>("jei", "Just Enough Items", JustEnoughItems::new, "hei"); - public static final Container THAUMCRAFT = new Container<>("thaumcraft", "Thaumcraft", Thaumcraft::new, "tc", "thaum"); - public static final Container BOTANIA = new Container<>("botania", "Botania", Botania::new); public static final Container MEKANISM = new Container<>("mekanism", "Mekanism", Mekanism::new); - public static final Container APPLIED_ENERGISTICS_2 = new Container<>("appliedenergistics2", "Applied Energistics 2", AppliedEnergistics2::new, "ae2"); + public static final Container ROOTS = new Container<>("roots", "Roots 3", Roots::new); + public static final Container THAUMCRAFT = new Container<>("thaumcraft", "Thaumcraft", Thaumcraft::new, "tc", "thaum"); public static final Container THERMAL_EXPANSION = new Container<>("thermalexpansion", "Thermal Expansion", ThermalExpansion::new, "te", "thermal"); - public static final Container TINKERS_CONSTRUCT = new Container<>("tconstruct", "Tinkers' Construct", TinkersConstruct::new, "ticon", "tinkersconstruct"); public static final Container TINKERS_COMPLEMENT = new Container<>("tcomplement", "Tinkers Complement", TinkersComplement::new, "tcomp", "tinkerscomplement"); - public static final Container DRACONIC_EVOLUTION = new Container<>("draconicevolution", "Draconic Evolution", DraconicEvolution::new, "de"); - public static final Container ROOTS = new Container<>("roots", "Roots 3", Roots::new); - public static final Container BLOOD_MAGIC = new Container<>("bloodmagic", "Blood Magic: Alchemical Wizardry", BloodMagic::new, "bm"); - public static final Container EVILCRAFT = new Container<>("evilcraft", "EvilCraft", EvilCraft::new); - public static final Container INTEGRATED_DYNAMICS = new Container<>("integrateddynamics", "Integrated Dynamics", IntegratedDynamics::new, "id"); - public static final Container IMMERSIVE_ENGINEERING = new Container<>("immersiveengineering", "Immersive Engineering", ImmersiveEngineering::new, "ie"); - public static final Container INDUSTRIALCRAFT = new Container<>("ic2", "Industrial Craft 2", IC2::new, "industrialcraft"); - public static final Container EXTENDED_CRAFTING = new Container<>("extendedcrafting", "Extended Crafting", ExtendedCrafting::new); - public static final Container FORESTRY = new Container<>("forestry", "Forestry", Forestry::new); - public static final Container ADVANCED_MORTARS = new Container<>("advancedmortars", "Advanced Mortars", AdvancedMortars::new); + public static final Container TINKERS_CONSTRUCT = new Container<>("tconstruct", "Tinkers' Construct", TinkersConstruct::new, "ticon", "tinkersconstruct"); public static final Container WOOT = new Container<>("woot", "Woot", Woot::new); - public static final Container INSPIRATIONS = new Container<>("inspirations", "Inspirations", Inspirations::new); - public static final Container COMPACT_MACHINES = new Container<>("compactmachines3", "Compact Machines 3", CompactMachines::new, "compactmachines"); public static Collection> getAllContainers() { return new ObjectOpenHashSet<>(containers.values()); diff --git a/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java b/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java index 7cabea85e..abe22b778 100644 --- a/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java +++ b/src/main/java/com/cleanroommc/groovyscript/core/LateMixin.java @@ -28,7 +28,6 @@ public class LateMixin implements ILateMixinLoader { "roots", "tcomplement", "tconstruct", - "thermalexpansion" "thermalexpansion", "woot" );