diff --git a/dependencies.gradle b/dependencies.gradle index e63137874..bd8eeadd1 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -34,7 +34,7 @@ final def mod_dependencies = [ 'aether-255308:3280119' : [project.debug_aether], 'alchemistry-293425:3186612' : [project.debug_alchemistry], 'alchemylib-293426:2761706' : [project.debug_alchemistry], - 'shadowfacts-forgelin-248453:2785465' : [project.debug_alchemistry, project.debug_industrial_foregoing], + 'shadowfacts-forgelin-248453:2785465' : [project.debug_alchemistry, project.debug_future_mc, project.debug_industrial_foregoing], 'ae2-extended-life-570458:4553942' : [project.debug_applied_energistics_2, project.debug_lazy_ae2], 'arcane-archives-311357:3057332' : [project.debug_arcane_archives], 'guidebook-253874:2989594' : [project.debug_arcane_archives], @@ -70,6 +70,7 @@ final def mod_dependencies = [ 'extrabotany-299086:3112313' : [project.debug_extra_botany], 'extra-utilities-2-225561:2678374' : [project.debug_extra_utilities_2], 'forestry-59751:2918418' : [project.debug_forestry], + 'future-mc-310059:5626387' : [project.debug_future_mc], 'immersive_engineering-231951:2974106' : [project.debug_immersive_engineering, project.debug_immersive_petroleum, project.debug_immersive_technology], 'immersive-petroleum-268250:3382321' : [project.debug_immersive_petroleum], 'mct-immersive-technology-359407:5108047' : [project.debug_immersive_technology], diff --git a/examples/postInit/futuremc.groovy b/examples/postInit/futuremc.groovy new file mode 100644 index 000000000..37e03148d --- /dev/null +++ b/examples/postInit/futuremc.groovy @@ -0,0 +1,99 @@ + +// Auto generated groovyscript example file +// MODS_LOADED: futuremc + +log.info 'mod \'futuremc\' detected, running script' + +// Blast Furnace: +// Converts an input itemstack into an output itemstack at the cost of burnable fuel. + +mods.futuremc.blast_furnace.removeByInput(item('minecraft:gold_ore')) +mods.futuremc.blast_furnace.removeByOutput(item('minecraft:iron_ingot')) +// mods.futuremc.blast_furnace.removeAll() + +mods.futuremc.blast_furnace.recipeBuilder() + .input(item('minecraft:clay')) + .output(item('minecraft:diamond')) + .register() + +mods.futuremc.blast_furnace.recipeBuilder() + .input(item('minecraft:gold_ingot')) + .output(item('minecraft:clay')) + .register() + + +// Campfire: +// Converts an input itemstack into an output itemstack when placed on the Campfire. + +mods.futuremc.campfire.removeByInput(item('minecraft:fish')) +mods.futuremc.campfire.removeByOutput(item('minecraft:cooked_mutton')) +// mods.futuremc.campfire.removeAll() + +mods.futuremc.campfire.recipeBuilder() + .input(item('minecraft:clay')) + .output(item('minecraft:diamond')) + .duration(10) + .register() + +mods.futuremc.campfire.recipeBuilder() + .input(item('minecraft:gold_ingot')) + .output(item('minecraft:clay')) + .duration(1) + .register() + + +// Smithing: +// Converts two input itemstacks into an output output itemstack in the Smithing Table. + +mods.futuremc.smithing.removeByInput(item('minecraft:diamond_hoe')) +// mods.futuremc.smithing.removeByInput(item('futuremc:netherite_ingot')) +mods.futuremc.smithing.removeByOutput(item('futuremc:netherite_pickaxe')) +// mods.futuremc.smithing.removeAll() + +mods.futuremc.smithing.recipeBuilder() + .input(item('minecraft:clay'), item('minecraft:gold_ingot')) + .output(item('minecraft:diamond')) + .register() + +mods.futuremc.smithing.recipeBuilder() + .input(item('minecraft:gold_ingot') * 4, item('minecraft:clay')) + .output(item('minecraft:clay') * 8) + .register() + + +// Smoker: +// Converts an input itemstack into an output itemstack at the cost of burnable fuel. + +mods.futuremc.smoker.removeByInput(item('minecraft:porkchop')) +mods.futuremc.smoker.removeByOutput(item('minecraft:baked_potato')) +// mods.futuremc.smoker.removeAll() + +mods.futuremc.smoker.recipeBuilder() + .input(item('minecraft:clay')) + .output(item('minecraft:diamond')) + .register() + +mods.futuremc.smoker.recipeBuilder() + .input(item('minecraft:gold_ingot')) + .output(item('minecraft:clay')) + .register() + + +// Stoenecutter: +// Converts an input itemstack into an output itemstack via selecting the desired output from the Stonecutter GUI. + +mods.futuremc.stonecutter.removeByInput(item('minecraft:stonebrick')) +mods.futuremc.stonecutter.removeByOutput(item('minecraft:stone_slab')) +// mods.futuremc.stonecutter.removeAll() + +mods.futuremc.stonecutter.recipeBuilder() + .input(item('minecraft:clay')) + .output(item('minecraft:diamond')) + .register() + +mods.futuremc.stonecutter.recipeBuilder() + .input(item('minecraft:gold_ingot')) + .output(item('minecraft:clay')) + .register() + + diff --git a/gradle.properties b/gradle.properties index a3f5c69cb..0c06dc95f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -45,6 +45,7 @@ debug_extra_botany = false debug_extra_utilities_2 = false debug_forestry = false +debug_future_mc = false debug_immersive_engineering = false debug_immersive_petroleum = 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 9702e5c2e..4e650c953 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -12,11 +12,11 @@ import com.cleanroommc.groovyscript.compat.mods.arcanearchives.ArcaneArchives; import com.cleanroommc.groovyscript.compat.mods.astralsorcery.AstralSorcery; import com.cleanroommc.groovyscript.compat.mods.atum.Atum; -import com.cleanroommc.groovyscript.compat.mods.botaniatweaks.BotaniaTweaks; import com.cleanroommc.groovyscript.compat.mods.avaritia.Avaritia; import com.cleanroommc.groovyscript.compat.mods.betterwithmods.BetterWithMods; import com.cleanroommc.groovyscript.compat.mods.bloodmagic.BloodMagic; import com.cleanroommc.groovyscript.compat.mods.botania.Botania; +import com.cleanroommc.groovyscript.compat.mods.botaniatweaks.BotaniaTweaks; import com.cleanroommc.groovyscript.compat.mods.botanicadditions.BotanicAdditions; import com.cleanroommc.groovyscript.compat.mods.calculator.Calculator; import com.cleanroommc.groovyscript.compat.mods.chisel.Chisel; @@ -30,6 +30,7 @@ import com.cleanroommc.groovyscript.compat.mods.extrabotany.ExtraBotany; import com.cleanroommc.groovyscript.compat.mods.extrautils2.ExtraUtils2; import com.cleanroommc.groovyscript.compat.mods.forestry.Forestry; +import com.cleanroommc.groovyscript.compat.mods.futuremc.FutureMC; import com.cleanroommc.groovyscript.compat.mods.ic2.IC2; import com.cleanroommc.groovyscript.compat.mods.immersiveengineering.ImmersiveEngineering; import com.cleanroommc.groovyscript.compat.mods.immersivepetroleum.ImmersivePetroleum; @@ -63,8 +64,6 @@ import net.minecraftforge.fml.common.discovery.ASMDataTable; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.UnmodifiableView; import java.util.*; @@ -105,6 +104,7 @@ public class ModSupport { public static final GroovyContainer EXTRA_BOTANY = new InternalModContainer<>("extrabotany", "Extra Botany", ExtraBotany::new); public static final GroovyContainer EXTRA_UTILITIES_2 = new InternalModContainer<>("extrautils2", "Extra Utilities 2", ExtraUtils2::new, "extrautilities2"); public static final GroovyContainer FORESTRY = new InternalModContainer<>("forestry", "Forestry", Forestry::new); + public static final GroovyContainer FUTURE_MC = new InternalModContainer<>("futuremc", "Future MC", FutureMC::new); public static final GroovyContainer IMMERSIVE_ENGINEERING = new InternalModContainer<>("immersiveengineering", "Immersive Engineering", ImmersiveEngineering::new, "ie"); public static final GroovyContainer IMMERSIVE_PETROLEUM = new InternalModContainer<>("immersivepetroleum", "Immersive Petroleum", ImmersivePetroleum::new); public static final GroovyContainer IMMERSIVE_TECHNOLOGY = new InternalModContainer<>("immersivetech", "Immersive Technology", ImmersiveTechnology::new); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/BlastFurnace.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/BlastFurnace.java new file mode 100644 index 000000000..2604a3d03 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/BlastFurnace.java @@ -0,0 +1,68 @@ +package com.cleanroommc.groovyscript.compat.mods.futuremc; + +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; +import com.cleanroommc.groovyscript.registry.StandardListRegistry; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.futuremc.recipe.SimpleRecipe; +import thedarkcolour.futuremc.recipe.furnace.BlastFurnaceRecipes; + +import java.util.Arrays; +import java.util.Collection; + +@RegistryDescription +public class BlastFurnace extends StandardListRegistry { + + @Override + public Collection getRecipes() { + return BlastFurnaceRecipes.INSTANCE.getRecipes(); + } + + @RecipeBuilderDescription(example = { + @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))"), + @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))") + }) + public RecipeBuilder recipeBuilder() { + return new RecipeBuilder(); + } + + @MethodDescription(example = @Example("item('minecraft:gold_ore')")) + public void removeByInput(IIngredient input) { + getRecipes().removeIf(r -> Arrays.stream(r.getInput().getMatchingStacks()).anyMatch(input) && addBackup(r)); + } + + @MethodDescription(example = @Example("item('minecraft:iron_ingot')")) + public void removeByOutput(IIngredient output) { + getRecipes().removeIf(r -> output.test(r.getOutput()) && addBackup(r)); + } + + @Property(property = "input", comp = @Comp(eq = 1)) + @Property(property = "output", comp = @Comp(eq = 1)) + public static class RecipeBuilder extends AbstractRecipeBuilder { + + @Override + public String getErrorMsg() { + return "Error adding FutureMC Blast Furnace recipe"; + } + + @Override + public void validate(GroovyLog.Msg msg) { + validateItems(msg, 1, 1, 1, 1); + validateFluids(msg); + } + + @Override + @RecipeBuilderRegistrationMethod + public @Nullable SimpleRecipe register() { + if (!validate()) return null; + SimpleRecipe recipe = new SimpleRecipe(input.get(0).toMcIngredient(), output.get(0)); + ModSupport.FUTURE_MC.get().blastFurnace.add(recipe); + return recipe; + } + + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Campfire.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Campfire.java new file mode 100644 index 000000000..bf03f9a44 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Campfire.java @@ -0,0 +1,78 @@ +package com.cleanroommc.groovyscript.compat.mods.futuremc; + +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; +import com.cleanroommc.groovyscript.registry.StandardListRegistry; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.futuremc.recipe.campfire.CampfireRecipe; +import thedarkcolour.futuremc.recipe.campfire.CampfireRecipes; + +import java.util.Arrays; +import java.util.Collection; + +@RegistryDescription +public class Campfire extends StandardListRegistry { + + @Override + public Collection getRecipes() { + return CampfireRecipes.INSTANCE.getRecipes(); + } + + @RecipeBuilderDescription(example = { + @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).duration(10)"), + @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay')).duration(1)") + }) + public RecipeBuilder recipeBuilder() { + return new RecipeBuilder(); + } + + @MethodDescription(example = @Example("item('minecraft:fish')")) + public void removeByInput(IIngredient input) { + getRecipes().removeIf(r -> Arrays.stream(r.getInput().getMatchingStacks()).anyMatch(input) && addBackup(r)); + } + + @MethodDescription(example = @Example("item('minecraft:cooked_mutton')")) + public void removeByOutput(IIngredient output) { + getRecipes().removeIf(r -> output.test(r.getOutput()) && addBackup(r)); + } + + @Property(property = "input", comp = @Comp(eq = 1)) + @Property(property = "output", comp = @Comp(eq = 1)) + public static class RecipeBuilder extends AbstractRecipeBuilder { + + @Property(comp = @Comp(gte = 1)) + private int duration; + + @RecipeBuilderMethodDescription + public RecipeBuilder duration(int duration) { + this.duration = duration; + return this; + } + + @Override + public String getErrorMsg() { + return "Error adding FutureMC Campfire recipe"; + } + + @Override + public void validate(GroovyLog.Msg msg) { + validateItems(msg, 1, 1, 1, 1); + validateFluids(msg); + msg.add(duration <= 0, "duration must be greater than or equal to 1, yet it was {}", duration); + } + + @Override + @RecipeBuilderRegistrationMethod + public @Nullable CampfireRecipe register() { + if (!validate()) return null; + CampfireRecipe recipe = new CampfireRecipe(input.get(0).toMcIngredient(), output.get(0), duration); + ModSupport.FUTURE_MC.get().campfire.add(recipe); + return recipe; + } + + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/FutureMC.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/FutureMC.java new file mode 100644 index 000000000..7d97d45b9 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/FutureMC.java @@ -0,0 +1,13 @@ +package com.cleanroommc.groovyscript.compat.mods.futuremc; + +import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer; + +public class FutureMC extends GroovyPropertyContainer { + + public final BlastFurnace blastFurnace = new BlastFurnace(); + public final Campfire campfire = new Campfire(); + public final Smithing smithing = new Smithing(); + public final Smoker smoker = new Smoker(); + public final Stonecutter stonecutter = new Stonecutter(); + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Smithing.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Smithing.java new file mode 100644 index 000000000..76e2acab6 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Smithing.java @@ -0,0 +1,70 @@ +package com.cleanroommc.groovyscript.compat.mods.futuremc; + +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; +import com.cleanroommc.groovyscript.registry.StandardListRegistry; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.futuremc.recipe.smithing.SmithingRecipe; +import thedarkcolour.futuremc.recipe.smithing.SmithingRecipes; + +import java.util.Arrays; +import java.util.Collection; + +@RegistryDescription(admonition = @Admonition(value = "groovyscript.wiki.futuremc.smithing.note0", type = Admonition.Type.WARNING)) +public class Smithing extends StandardListRegistry { + + @Override + public Collection getRecipes() { + return SmithingRecipes.INSTANCE.getRecipes(); + } + + @RecipeBuilderDescription(example = { + @Example(".input(item('minecraft:clay'), item('minecraft:gold_ingot')).output(item('minecraft:diamond'))"), + @Example(".input(item('minecraft:gold_ingot') * 4, item('minecraft:clay')).output(item('minecraft:clay') * 8)") + }) + public RecipeBuilder recipeBuilder() { + return new RecipeBuilder(); + } + + @MethodDescription(example = { + @Example("item('minecraft:diamond_hoe')"), @Example(value = "item('futuremc:netherite_ingot')", commented = true), + }) + public void removeByInput(IIngredient input) { + getRecipes().removeIf(r -> Arrays.stream(r.getInput().getMatchingStacks()).anyMatch(input) && addBackup(r)); + } + + @MethodDescription(example = @Example("item('futuremc:netherite_pickaxe')")) + public void removeByOutput(IIngredient output) { + getRecipes().removeIf(r -> output.test(r.getOutput()) && addBackup(r)); + } + + @Property(property = "input", comp = @Comp(eq = 2)) + @Property(property = "output", comp = @Comp(eq = 1)) + public static class RecipeBuilder extends AbstractRecipeBuilder { + + @Override + public String getErrorMsg() { + return "Error adding FutureMC Smithing recipe"; + } + + @Override + public void validate(GroovyLog.Msg msg) { + validateItems(msg, 2, 2, 1, 1); + validateFluids(msg); + } + + @Override + @RecipeBuilderRegistrationMethod + public @Nullable SmithingRecipe register() { + if (!validate()) return null; + SmithingRecipe recipe = new SmithingRecipe(input.get(0).toMcIngredient(), input.get(1).toMcIngredient(), output.get(0)); + ModSupport.FUTURE_MC.get().smithing.add(recipe); + return recipe; + } + + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Smoker.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Smoker.java new file mode 100644 index 000000000..592bdf767 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Smoker.java @@ -0,0 +1,68 @@ +package com.cleanroommc.groovyscript.compat.mods.futuremc; + +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; +import com.cleanroommc.groovyscript.registry.StandardListRegistry; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.futuremc.recipe.SimpleRecipe; +import thedarkcolour.futuremc.recipe.furnace.SmokerRecipes; + +import java.util.Arrays; +import java.util.Collection; + +@RegistryDescription +public class Smoker extends StandardListRegistry { + + @Override + public Collection getRecipes() { + return SmokerRecipes.INSTANCE.getRecipes(); + } + + @RecipeBuilderDescription(example = { + @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))"), + @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))") + }) + public RecipeBuilder recipeBuilder() { + return new RecipeBuilder(); + } + + @MethodDescription(example = @Example("item('minecraft:porkchop')")) + public void removeByInput(IIngredient input) { + getRecipes().removeIf(r -> Arrays.stream(r.getInput().getMatchingStacks()).anyMatch(input) && addBackup(r)); + } + + @MethodDescription(example = @Example("item('minecraft:baked_potato')")) + public void removeByOutput(IIngredient output) { + getRecipes().removeIf(r -> output.test(r.getOutput()) && addBackup(r)); + } + + @Property(property = "input", comp = @Comp(eq = 1)) + @Property(property = "output", comp = @Comp(eq = 1)) + public static class RecipeBuilder extends AbstractRecipeBuilder { + + @Override + public String getErrorMsg() { + return "Error adding FutureMC Smoker recipe"; + } + + @Override + public void validate(GroovyLog.Msg msg) { + validateItems(msg, 1, 1, 1, 1); + validateFluids(msg); + } + + @Override + @RecipeBuilderRegistrationMethod + public @Nullable SimpleRecipe register() { + if (!validate()) return null; + SimpleRecipe recipe = new SimpleRecipe(input.get(0).toMcIngredient(), output.get(0)); + ModSupport.FUTURE_MC.get().smoker.add(recipe); + return recipe; + } + + } + +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Stonecutter.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Stonecutter.java new file mode 100644 index 000000000..254af77d0 --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/futuremc/Stonecutter.java @@ -0,0 +1,68 @@ +package com.cleanroommc.groovyscript.compat.mods.futuremc; + +import com.cleanroommc.groovyscript.api.GroovyLog; +import com.cleanroommc.groovyscript.api.IIngredient; +import com.cleanroommc.groovyscript.api.documentation.annotations.*; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; +import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder; +import com.cleanroommc.groovyscript.registry.StandardListRegistry; +import org.jetbrains.annotations.Nullable; +import thedarkcolour.futuremc.recipe.SimpleRecipe; +import thedarkcolour.futuremc.recipe.stonecutter.StonecutterRecipes; + +import java.util.Arrays; +import java.util.Collection; + +@RegistryDescription +public class Stonecutter extends StandardListRegistry { + + @Override + public Collection getRecipes() { + return StonecutterRecipes.INSTANCE.getRecipes(); + } + + @RecipeBuilderDescription(example = { + @Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))"), + @Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))") + }) + public RecipeBuilder recipeBuilder() { + return new RecipeBuilder(); + } + + @MethodDescription(example = @Example("item('minecraft:stonebrick')")) + public void removeByInput(IIngredient input) { + getRecipes().removeIf(r -> Arrays.stream(r.getInput().getMatchingStacks()).anyMatch(input) && addBackup(r)); + } + + @MethodDescription(example = @Example("item('minecraft:stone_slab')")) + public void removeByOutput(IIngredient output) { + getRecipes().removeIf(r -> output.test(r.getOutput()) && addBackup(r)); + } + + @Property(property = "input", comp = @Comp(eq = 1)) + @Property(property = "output", comp = @Comp(eq = 1)) + public static class RecipeBuilder extends AbstractRecipeBuilder { + + @Override + public String getErrorMsg() { + return "Error adding FutureMC Stonecutter recipe"; + } + + @Override + public void validate(GroovyLog.Msg msg) { + validateItems(msg, 1, 1, 1, 1); + validateFluids(msg); + } + + @Override + @RecipeBuilderRegistrationMethod + public @Nullable SimpleRecipe register() { + if (!validate()) return null; + SimpleRecipe recipe = new SimpleRecipe(input.get(0).toMcIngredient(), output.get(0)); + ModSupport.FUTURE_MC.get().stonecutter.add(recipe); + return recipe; + } + + } + +} diff --git a/src/main/resources/assets/groovyscript/lang/en_us.lang b/src/main/resources/assets/groovyscript/lang/en_us.lang index 9168c01dc..9ee5aac25 100644 --- a/src/main/resources/assets/groovyscript/lang/en_us.lang +++ b/src/main/resources/assets/groovyscript/lang/en_us.lang @@ -1079,6 +1079,26 @@ groovyscript.wiki.extrautils2.resonator.ownerTag.value=Sets if the output itemst groovyscript.wiki.extrautils2.resonator.requirementText.value=Sets the text in JEI displaying an additional requirement for the recipe to run groovyscript.wiki.extrautils2.resonator.shouldProgress.value=Sets the function used to determine if the recipe should run, with the Closure taking 3 parameters, `TileEntity resonator`, `int frequency`, `ItemStack input` and returning a `boolean` + +# Future MC +groovyscript.wiki.futuremc.blast_furnace.title=Blast Furnace +groovyscript.wiki.futuremc.blast_furnace.description=Converts an input itemstack into an output itemstack at the cost of burnable fuel. + +groovyscript.wiki.futuremc.campfire.title=Campfire +groovyscript.wiki.futuremc.campfire.description=Converts an input itemstack into an output itemstack when placed on the Campfire. +groovyscript.wiki.futuremc.campfire.duration.value=Sets the time in ticks the takes to process + +groovyscript.wiki.futuremc.smithing.title=Smithing +groovyscript.wiki.futuremc.smithing.description=Converts two input itemstacks into an output output itemstack in the Smithing Table. +groovyscript.wiki.futuremc.smithing.note0=Crafting with stackable items may require picking up and placing an input to allow crafting the recipe again. + +groovyscript.wiki.futuremc.smoker.title=Smoker +groovyscript.wiki.futuremc.smoker.description=Converts an input itemstack into an output itemstack at the cost of burnable fuel. + +groovyscript.wiki.futuremc.stonecutter.title=Stoenecutter +groovyscript.wiki.futuremc.stonecutter.description=Converts an input itemstack into an output itemstack via selecting the desired output from the Stonecutter GUI. + + # Immersive Engineering groovyscript.wiki.immersiveengineering.alloy_kiln.title=Alloy Kiln groovyscript.wiki.immersiveengineering.alloy_kiln.description=Converts two input itemstacks into an output itemstack, consuming fuel (based on burn time).