Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,8 @@ final Map<String, List<String>> mod_dependencies = [
'thermal_foundation-222880:2926428' : [debug_thermal_expansion],
'tinkers-complement-272671:2843439' : [debug_tinkers_construct],
'tinkers_construct-74072:2902483' : [debug_tinkers_construct],
'woot-244049:2712670' : [debug_woot],
'railcraft-51195:3853491' : [debug_railcraft],
'woot-244049:2712670' : [debug_woot],
Comment thread
LonelyxiyaOVO marked this conversation as resolved.
]

// Maps mods from CurseMaven to the properties that enable the mod.
Expand Down
141 changes: 141 additions & 0 deletions examples/postInit/generated/railcraft_example.groovy
Comment thread
LonelyxiyaOVO marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
// Railcraft GroovyScript Example
// This file demonstrates how to use the Railcraft compat features
// pls Railcraft 1.2.1.0 beta8

// ============================================
// Blast Furnace
// ============================================

// Add a recipe: input, output, time (ticks), slag amount
mods.railcraft.blastFurnace.add(item('minecraft:iron_ingot'), item('railcraft:ingot:1'), 1280, 1)

// Add with default time (1280 ticks) and slag (1)
mods.railcraft.blastFurnace.add(item('minecraft:iron_block'), item('railcraft:ingot:1') * 9)

// Using recipe builder
mods.railcraft.blastFurnace.recipeBuilder()
.input(item('minecraft:gold_ingot'))
.output(item('railcraft:ingot:2'))
.time(1000)
.slag(2)
.register()

// Remove by output
mods.railcraft.blastFurnace.removeByOutput(item('railcraft:ingot:1'))

// Remove by input
mods.railcraft.blastFurnace.removeByInput(item('minecraft:iron_ingot'))

// Remove all
mods.railcraft.blastFurnace.removeAll()


// ============================================
// Coke Oven
// ============================================

// Add a recipe: input, output, fluid output, time (ticks)
mods.railcraft.cokeOven.add(item('minecraft:log'), item('railcraft:fuel_coke'), fluid('creosote') * 500, 1800)

// Add with item output only
mods.railcraft.cokeOven.add(item('minecraft:log:1'), item('railcraft:fuel_coke'), 1800)

// Using recipe builder
mods.railcraft.cokeOven.recipeBuilder()
.input(item('minecraft:coal'))
.output(item('railcraft:fuel_coke'))
.fluid(fluid('creosote') * 1000)
.time(2000)
.register()

// Remove by output
mods.railcraft.cokeOven.removeByOutput(item('railcraft:fuel_coke'))

// Remove by input
mods.railcraft.cokeOven.removeByInput(item('minecraft:log'))

// Remove all
mods.railcraft.cokeOven.removeAll()


// ============================================
// Rock Crusher
// ============================================

// Add a recipe with multiple outputs and chances
mods.railcraft.rockCrusher.recipeBuilder()
.input(item('minecraft:stone'))
.output(item('minecraft:cobblestone'), 1.0f)
.output(item('minecraft:sand'), 0.5f)
.output(item('minecraft:gravel'), 0.25f)
.time(200)
.register()

// Remove by output
mods.railcraft.rockCrusher.removeByOutput(item('minecraft:cobblestone'))

// Remove by input
mods.railcraft.rockCrusher.removeByInput(item('minecraft:stone'))

// Remove all
mods.railcraft.rockCrusher.removeAll()


// ============================================
// Rolling Machine
// ============================================

// Add shaped recipe
mods.railcraft.rollingMachine.addShaped(
item('minecraft:iron_bars') * 8,
[
[item('minecraft:iron_ingot'), item('minecraft:iron_ingot'), item('minecraft:iron_ingot')],
[item('minecraft:iron_ingot'), item('minecraft:iron_ingot'), item('minecraft:iron_ingot')]
],
200
)

// Add shapeless recipe
mods.railcraft.rollingMachine.addShapeless(
item('minecraft:iron_ingot') * 9,
[item('minecraft:iron_block')],
100
)

// Using shaped builder
mods.railcraft.rollingMachine.shapedBuilder()
.output(item('minecraft:rail') * 16)
.matrix('I I', 'I I', 'I I')
.key('I', item('minecraft:iron_ingot'))
.time(100)
.register()

// Using shapeless builder
mods.railcraft.rollingMachine.shapelessBuilder()
.output(item('minecraft:iron_nugget') * 9)
.input(item('minecraft:iron_ingot'))
.time(50)
.register()

// Remove by output
mods.railcraft.rollingMachine.removeByOutput(item('minecraft:rail'))

// Remove all
mods.railcraft.rollingMachine.removeAll()


// ============================================
// Fluid Fuels (for Boilers)
// ============================================

// Add a fluid fuel with heat value
mods.railcraft.fluidFuels.add(fluid('lava'), 32000)

// Add with default heat value
mods.railcraft.fluidFuels.add(fluid('oil'))

// Remove a fluid fuel
mods.railcraft.fluidFuels.remove(fluid('creosote'))

// Remove all
mods.railcraft.fluidFuels.removeAll()
1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ debug_primal_tech = false
debug_prodigytech = false
debug_projecte = false
debug_pyrotech = false
debug_railcraft = false
Comment thread
LonelyxiyaOVO marked this conversation as resolved.

debug_random_things = false
debug_roots = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import com.cleanroommc.groovyscript.compat.mods.prodigytech.ProdigyTech;
import com.cleanroommc.groovyscript.compat.mods.projecte.ProjectE;
import com.cleanroommc.groovyscript.compat.mods.pyrotech.PyroTech;
import com.cleanroommc.groovyscript.compat.mods.railcraft.Railcraft;
import com.cleanroommc.groovyscript.compat.mods.randomthings.RandomThings;
import com.cleanroommc.groovyscript.compat.mods.roots.Roots;
import com.cleanroommc.groovyscript.compat.mods.rustic.Rustic;
Expand Down Expand Up @@ -156,6 +157,7 @@ public class ModSupport {
public static final GroovyContainer<ProdigyTech> PRODIGY_TECH = new InternalModContainer<>("prodigytech", "Prodigy Tech", ProdigyTech::new);
public static final GroovyContainer<ProjectE> PROJECT_E = new InternalModContainer<>("projecte", "ProjectE", ProjectE::new);
public static final GroovyContainer<PyroTech> PYROTECH = new InternalModContainer<>("pyrotech", "Pyrotech", PyroTech::new);
public static final GroovyContainer<Railcraft> RAILCRAFT = new InternalModContainer<>("railcraft", "Railcraft", Railcraft::new, "rc");
public static final GroovyContainer<RandomThings> RANDOM_THINGS = new InternalModContainer<>("randomthings", "Random Things", RandomThings::new);
public static final GroovyContainer<Roots> ROOTS = new InternalModContainer<>("roots", "Roots 3", Roots::new);
public static final GroovyContainer<Rustic> RUSTIC = new InternalModContainer<>("rustic", "Rustic", Rustic::new);
Expand Down
Comment thread
LonelyxiyaOVO marked this conversation as resolved.
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
package com.cleanroommc.groovyscript.compat.mods.railcraft;

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.ingredient.IngredientHelper;
import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder;
import com.cleanroommc.groovyscript.registry.StandardListRegistry;
import mods.railcraft.api.crafting.Crafters;
import mods.railcraft.api.crafting.IBlastFurnaceCrafter;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.Ingredient;
import org.jetbrains.annotations.Nullable;

import java.util.Collection;

@RegistryDescription
public class BlastFurnace extends StandardListRegistry<IBlastFurnaceCrafter.IRecipe> {

@RecipeBuilderDescription(example = @Example(".input(item('minecraft:iron_ingot')).output(item('railcraft:ingot:1')).time(1280).slag(1)"))
public static RecipeBuilder recipeBuilder() {
return new RecipeBuilder();
}

@Override
public Collection<IBlastFurnaceCrafter.IRecipe> getRecipes() {
return Crafters.blastFurnace().getRecipes();
}

@MethodDescription(type = MethodDescription.Type.ADDITION)
public IBlastFurnaceCrafter.IRecipe add(IIngredient input, ItemStack output, int time, int slag) {
RecipeBuilder builder = recipeBuilder();
builder.input(input);
builder.output(output);
builder.time = time;
builder.slag = slag;
Comment thread
LonelyxiyaOVO marked this conversation as resolved.
return builder.register();
}

@MethodDescription(type = MethodDescription.Type.ADDITION)
public IBlastFurnaceCrafter.IRecipe add(IIngredient input, ItemStack output, int time) {
return add(input, output, time, 1);
}

@MethodDescription(type = MethodDescription.Type.ADDITION)
public IBlastFurnaceCrafter.IRecipe add(IIngredient input, ItemStack output) {
return add(input, output, IBlastFurnaceCrafter.SMELT_TIME, 1);
}

@MethodDescription(example = @Example("item('railcraft:ingot:1')"))
public void removeByOutput(ItemStack output) {
Comment thread
LonelyxiyaOVO marked this conversation as resolved.
if (IngredientHelper.isEmpty(output)) {
GroovyLog.msg("Error removing Railcraft Blast Furnace recipe")
.error()
.add("output must not be empty")
.post();
return;
}
if (!getRecipes().removeIf(recipe -> {
if (ItemStack.areItemStacksEqual(recipe.getOutput(), output)) {
addBackup(recipe);
return true;
}
return false;
})) {
GroovyLog.msg("Error removing Railcraft Blast Furnace recipe")
.error()
.add("no recipes found for {}", output)
.post();
}
}

@MethodDescription(example = @Example("item('minecraft:iron_ingot')"))
public void removeByInput(IIngredient input) {
if (IngredientHelper.isEmpty(input)) {
GroovyLog.msg("Error removing Railcraft Blast Furnace recipe")
.error()
.add("input must not be empty")
.post();
return;
}
if (!getRecipes().removeIf(recipe -> {
if (recipe.getInput().test(input.getMatchingStacks()[0])) {
Comment thread
LonelyxiyaOVO marked this conversation as resolved.
addBackup(recipe);
return true;
}
return false;
})) {
GroovyLog.msg("Error removing Railcraft Blast Furnace recipe")
.error()
.add("no recipes found for {}", input)
.post();
}
}

@Property(property = "input", comp = @Comp(eq = 1))
@Property(property = "output", comp = @Comp(eq = 1))
public static class RecipeBuilder extends AbstractRecipeBuilder<IBlastFurnaceCrafter.IRecipe> {

@Property(comp = @Comp(gte = 0), defaultValue = "IBlastFurnaceCrafter.SMELT_TIME")
private int time = IBlastFurnaceCrafter.SMELT_TIME;
@Property(comp = @Comp(gte = 0), defaultValue = "1")
private int slag = 1;

@RecipeBuilderMethodDescription
public RecipeBuilder time(int time) {
this.time = time;
return this;
}

@RecipeBuilderMethodDescription
public RecipeBuilder slag(int slag) {
this.slag = slag;
return this;
}

@Override
public String getErrorMsg() {
return "Error adding Railcraft Blast Furnace recipe";
}

@Override
public void validate(GroovyLog.Msg msg) {
validateItems(msg, 1, 1, 1, 1);
validateFluids(msg);
msg.add(time <= 0, "time must be greater than 0, got: {}", time);
msg.add(slag < 0, "slag must be non-negative, got: {}", slag);
}

@Override
@RecipeBuilderRegistrationMethod
public @Nullable IBlastFurnaceCrafter.IRecipe register() {
if (!validate()) return null;
ItemStack outputStack = output.get(0);
Ingredient inputIngredient = input.get(0).toMcIngredient();

IBlastFurnaceCrafter.IRecipe recipe = new IBlastFurnaceCrafter.IRecipe() {
@Override
public net.minecraft.util.ResourceLocation getName() {
return new net.minecraft.util.ResourceLocation("groovyscript", "blastfurnace_" + System.currentTimeMillis());
Comment thread
LonelyxiyaOVO marked this conversation as resolved.
}

@Override
public Ingredient getInput() {
return inputIngredient;
}

@Override
public int getTickTime(ItemStack input) {
return time;
}

@Override
public ItemStack getOutput() {
return outputStack.copy();
}

@Override
public int getSlagOutput() {
return slag;
}
};

ModSupport.RAILCRAFT.get().blastFurnace.add(recipe);
return recipe;
}
}
}
Loading