Skip to content
Merged
1 change: 1 addition & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
// Sorted by alphabetical name of the `project.debug_[this]` value
final def mod_dependencies = [
'actually-additions-228404:3117927' : [project.debug_actually_additions],
'additionalenchantedminer-282837:3851282' : [project.debug_additional_enchanted_miner],
'advancedmortars-283777:2780626' : [project.debug_adv_mortars],
'advanced-rocketry-236542:4671856' : [project.debug_advanced_rocketry],
'libvulpes-236541:3801015' : [project.debug_advanced_rocketry],
Expand Down
19 changes: 19 additions & 0 deletions examples/postInit/quarryplus.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

// Auto generated groovyscript example file
// MODS_LOADED: quarryplus

log.info 'mod \'quarryplus\' detected, running script'

// Work bench:
// Workbench for crafting items using electricity.

mods.quarryplus.work_bench_plus.removeByOutput(item('quarryplus:quarry'))
// mods.quarryplus.work_bench_plus.removeAll()

mods.quarryplus.work_bench_plus.recipeBuilder()
.output(item('minecraft:nether_star'))
.input(item('minecraft:diamond'),item('minecraft:gold_ingot'))
.energy(10000)
.register()


1 change: 1 addition & 0 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ debug_disable_cache = false
# SECTION: debug mod compat

debug_actually_additions = false
debug_additional_enchanted_miner = false
debug_adv_mortars = false
debug_advanced_rocketry = false
debug_aether = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.cleanroommc.groovyscript.api.GroovyBlacklist;
import com.cleanroommc.groovyscript.api.GroovyPlugin;
import com.cleanroommc.groovyscript.compat.mods.actuallyadditions.ActuallyAdditions;
import com.cleanroommc.groovyscript.compat.mods.additionalenchantedminer.AdditionalEnchantedMiner;
import com.cleanroommc.groovyscript.compat.mods.advancedmortars.AdvancedMortars;
import com.cleanroommc.groovyscript.compat.mods.advancedrocketry.AdvancedRocketry;
import com.cleanroommc.groovyscript.compat.mods.aetherlegacy.Aether;
Expand Down Expand Up @@ -83,6 +84,7 @@ public class ModSupport {
public static final ModSupport INSTANCE = new ModSupport(); // Just for Binding purposes

public static final GroovyContainer<ActuallyAdditions> ACTUALLY_ADDITIONS = new InternalModContainer<>("actuallyadditions", "Actually Additions", ActuallyAdditions::new, "aa");
public static final GroovyContainer<AdditionalEnchantedMiner> ADDITIONAL_ENCHANTED_MINER = new InternalModContainer<>("quarryplus", "Additional Enchanted Miner", AdditionalEnchantedMiner::new);
public static final GroovyContainer<AdvancedMortars> ADVANCED_MORTARS = new InternalModContainer<>("advancedmortars", "Advanced Mortars", AdvancedMortars::new);
public static final GroovyContainer<AdvancedRocketry> ADVANCED_ROCKETRY = new InternalModContainer<>("advancedrocketry", "Advanced Rocketry", AdvancedRocketry::new);
public static final GroovyContainer<Aether> AETHER = new InternalModContainer<>("aether_legacy", "Aether Legacy", Aether::new, "aether");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.cleanroommc.groovyscript.compat.mods.additionalenchantedminer;

import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer;

public class AdditionalEnchantedMiner extends GroovyPropertyContainer {

public final WorkBenchPlus workBenchPlus = new WorkBenchPlus();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
package com.cleanroommc.groovyscript.compat.mods.additionalenchantedminer;

import com.cleanroommc.groovyscript.api.GroovyLog;
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.VirtualizedRegistry;
import com.yogpc.qp.recipe.IngredientRecipe;
import com.yogpc.qp.recipe.WorkbenchRecipe;
import com.yogpc.qp.tile.ItemDamage;
import com.yogpc.qp.utils.IngredientWithCount;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import org.jetbrains.annotations.Nullable;
import scala.collection.JavaConversions;
import scala.collection.JavaConverters;
import scala.collection.Seq;
import scala.collection.SeqLike;
import scala.collection.convert.Decorators;
import scala.collection.immutable.Map;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

@RegistryDescription
public class WorkBenchPlus extends VirtualizedRegistry<IngredientRecipe> {

@Override
public void onReload() {
removeScripted().forEach(recipe -> WorkbenchRecipe.removeRecipe(recipe.location()));
restoreFromBackup().forEach(recipe -> WorkbenchRecipe.addIngredientRecipe(recipe.location(), recipe.getOutput(), recipe.energy(), recipe.inputs(), recipe.hardCode(), recipe.showInJEI()));
}

@MethodDescription(example = @Example("item('quarryplus:quarry')"))
public void removeByOutput(ItemStack output) {
ItemDamage itemDamage = ItemDamage.apply(output);
Map<ResourceLocation, WorkbenchRecipe> recipeMap = WorkbenchRecipe.getRecipeMap();
Iterable<WorkbenchRecipe> iterable = JavaConversions.asJavaIterable(recipeMap.values());
iterable.forEach(recipe -> {
if (recipe.key().equals(itemDamage)) {
addBackup(new IngredientRecipe(recipe.location(), recipe.getOutput(), recipe.energy(), recipe.showInJEI(), recipe.inputs(), recipe.hardCode()));
}
});
WorkbenchRecipe.removeRecipe(ItemDamage.apply(output));
}

@MethodDescription(priority = 2000, example = @Example(commented = true))
public void removeAll() {
Map<ResourceLocation, WorkbenchRecipe> recipeMap = WorkbenchRecipe.getRecipeMap();
Iterable<ResourceLocation> iterableLocation = JavaConversions.asJavaIterable(recipeMap.keys());
Iterable<WorkbenchRecipe> iterableRecipe = JavaConversions.asJavaIterable(recipeMap.values());
iterableLocation.forEach(
WorkbenchRecipe::removeRecipe
);
iterableRecipe.forEach(
recipe -> addBackup(new IngredientRecipe(recipe.location(),recipe.getOutput(),recipe.energy(),recipe.showInJEI(),recipe.inputs(),recipe.hardCode()))
);
}

private void add(IngredientRecipe recipe) {
addScripted(recipe);
WorkbenchRecipe.addIngredientRecipe(recipe.location(), recipe.getOutput(), recipe.energy(), recipe.inputs(), recipe.hardCode(), recipe.showInJEI());
}

@RecipeBuilderDescription(example = @Example(".output(item('minecraft:nether_star')).input(item('minecraft:diamond'),item('minecraft:gold_ingot')).energy(10000)"))
public RecipeBuilder recipeBuilder() {
return new RecipeBuilder();
}

@Property(property = "input", comp = @Comp(gte = 1, lte = 27))
@Property(property = "output", comp = @Comp(eq = 1))
public static class RecipeBuilder extends AbstractRecipeBuilder<IngredientRecipe> {

@Property(comp = @Comp(gt = 0))
private double energy;

@RecipeBuilderMethodDescription
public RecipeBuilder energy(double energy) {
this.energy = energy;
return this;
}

@Override
public String getRecipeNamePrefix() {
return "additionalenchantedminer_workbenchplus_";
}

@Override
public String getErrorMsg() {
return "Error adding Additional Enchanted Miner WorkbenchPlus recipe";
}

@Override
public void validate(GroovyLog.Msg msg) {
validateName();
validateItems(msg, 1, 27, 1, 1);
msg.add(energy <= 0, "energy must be an integer greater than 0, yet it was {}", energy);
}

@Override
@RecipeBuilderRegistrationMethod
public @Nullable IngredientRecipe register() {
if (!validate()) return null;
//convert Java List to Scala Seq
List<List<IngredientWithCount>> inputJavaList = input.stream()
.map(i -> {
IngredientWithCount ingredient = new IngredientWithCount(i.toMcIngredient(), i.getAmount());
return Collections.singletonList(ingredient);
})
.collect(Collectors.toList());
Seq<Seq<IngredientWithCount>> inputScalaList = JavaConverters.asScalaBufferConverter(
inputJavaList.stream()
.map(JavaConverters::asScalaBufferConverter)
.map(Decorators.AsScala::asScala)
.map(SeqLike::toSeq)
.collect(Collectors.toList())).asScala().toSeq();
IngredientRecipe recipe = new IngredientRecipe(this.name, output.get(0), energy, true, inputScalaList, true);
ModSupport.ADDITIONAL_ENCHANTED_MINER.get().workBenchPlus.add(recipe);
return recipe;
}
}
}
4 changes: 4 additions & 0 deletions src/main/resources/assets/groovyscript/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ groovyscript.wiki.actuallyadditions.treasure_chest.min.required=less than or equ
groovyscript.wiki.actuallyadditions.treasure_chest.max.value=Sets the maximum stack size given when rolled
groovyscript.wiki.actuallyadditions.treasure_chest.max.required=greater than or equal to the size of min

#Additional Enchanted Miner
groovyscript.wiki.quarryplus.work_bench_plus.title=Work bench
groovyscript.wiki.quarryplus.work_bench_plus.description=Workbench for crafting items using electricity.

# Advanced Mortars
groovyscript.wiki.advancedmortars.mortar.title=Mortar
groovyscript.wiki.advancedmortars.mortar.description=Uses any number of specific types of Mortars to convert multiple items into a single output with a possible chance output after a number of player interactions.
Expand Down