Skip to content

Commit 071a2b7

Browse files
authored
add Erebus compat (#316)
* add material object mapper * add fluidstacklist to iingredient list method * add erebus dep * add jer and jem for jei support for erebus * add mixins for erebus * add erebus compat * modify material handling * adjust villager career handling * rename material to blockmaterial * reconfigure materials and remove villager career storing * the humble spotless apply * call isStatic
1 parent 805e4cd commit 071a2b7

File tree

19 files changed

+627
-59
lines changed

19 files changed

+627
-59
lines changed

dependencies.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ final def mod_dependencies = [
6969
'brandons_core-231382:3408276' : [project.debug_draconic_evolution],
7070
'draconic_evolution-223565:3431261' : [project.debug_draconic_evolution],
7171
'redstone_flux-270789:2920436' : [project.debug_draconic_evolution, project.debug_thermal],
72+
'the-erebus-220698:3211974' : [project.debug_erebus],
7273
'essentialcraft-4-unofficial-254817:5416404' : [project.debug_essentialcraft_4],
7374
'dummycore-unofficial-266491:2611426' : [project.debug_essentialcraft_4],
7475
'cyclops-core-232758:3159497' : [project.debug_evilcraft, project.debug_integrated_dynamics],
@@ -133,7 +134,9 @@ final Map<String, List<String>> runtime_dependencies = [
133134
'curse.maven:aainfo-573154:3627065' : [project.debug_actually_advanced_info],
134135
'curse.maven:dropt-284973:3758733' : [project.debug_pyrotech],
135136
'curse.maven:jei-bees-248370:2490058' : [project.debug_forestry],
137+
'curse.maven:just-enough-magiculture-940521:5796192': [project.debug_erebus],
136138
'curse.maven:just-enough-petroleum-291727:2549332' : [project.debug_immersive_petroleum],
139+
'curse.maven:just-enough-resources-240630:4440935' : [project.debug_erebus],
137140
'curse.maven:mouse-tweaks-unofficial-461660:5876158': [project.debug_mouse_tweaks_unofficial],
138141
'curse.maven:reid-629017:5502915' : [project.debug_roughly_enough_ids],
139142
'curse.maven:thaumic_jei-285492:2705304' : [project.debug_thaum],

examples/postInit/erebus.groovy

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
2+
// Auto generated groovyscript example file
3+
// MODS_LOADED: erebus
4+
5+
log.info 'mod \'erebus\' detected, running script'
6+
7+
// Organic Composter:
8+
// Converts valid items into compost. The Blacklist blocks all ItemStacks on it from being used, the Material list allows
9+
// any Blocks using the valid Materials to be converted, and the Registry contains any valid ItemStacks. The conversion
10+
// takes 10 seconds, and is fueled by erebus wall plants.
11+
12+
// mods.erebus.composter.removeFromBlacklist(item('erebus:wall_plants', 1))
13+
mods.erebus.composter.removeFromMaterial(material('sponge'))
14+
mods.erebus.composter.removeFromRegistry(item('minecraft:stick'))
15+
// mods.erebus.composter.removeAllFromBlacklist()
16+
// mods.erebus.composter.removeAllFromMaterial()
17+
// mods.erebus.composter.removeAllFromRegistry()
18+
19+
mods.erebus.composter.addBlacklist(item('erebus:wall_plants', 7))
20+
mods.erebus.composter.addBlacklist(item('erebus:wall_plants_cultivated', 7))
21+
mods.erebus.composter.addMaterial(material('tnt'))
22+
mods.erebus.composter.addRegistry(item('minecraft:gold_ingot'))
23+
24+
// Offering Altar:
25+
// Converts up to 3 input itemstacks into an output itemstack.
26+
27+
// mods.erebus.offering_altar.removeByInput(item('minecraft:emerald'))
28+
mods.erebus.offering_altar.removeByOutput(item('erebus:materials', 38))
29+
// mods.erebus.offering_altar.removeAll()
30+
31+
mods.erebus.offering_altar.recipeBuilder()
32+
.input(item('minecraft:gold_ingot'))
33+
.output(item('minecraft:clay'))
34+
.register()
35+
36+
mods.erebus.offering_altar.recipeBuilder()
37+
.input(item('minecraft:stone'), ore('gemDiamond'), item('minecraft:clay'))
38+
.output(item('minecraft:gold_ingot'))
39+
.register()
40+
41+
42+
// Smoothie-matic:
43+
// Converts a container item, up to 4 input items, and up to 4 input fluidstacks into an output itemstack.
44+
45+
mods.erebus.smoothie.removeByContainer(item('minecraft:bucket'))
46+
mods.erebus.smoothie.removeByInput(fluid('honey'))
47+
mods.erebus.smoothie.removeByInput(item('erebus:materials', 18))
48+
mods.erebus.smoothie.removeByOutput(item('erebus:materials', 21))
49+
// mods.erebus.smoothie.removeAll()
50+
51+
mods.erebus.smoothie.recipeBuilder()
52+
.container(item('minecraft:diamond'))
53+
.output(item('minecraft:gold_ingot'))
54+
.register()
55+
56+
mods.erebus.smoothie.recipeBuilder()
57+
.container(item('minecraft:clay'))
58+
.input(item('minecraft:clay'))
59+
.output(item('minecraft:gold_ingot'))
60+
.register()
61+
62+
mods.erebus.smoothie.recipeBuilder()
63+
.container(item('minecraft:gold_block'))
64+
.fluidInput(fluid('water') * 5000)
65+
.output(item('minecraft:gold_ingot'))
66+
.register()
67+
68+
mods.erebus.smoothie.recipeBuilder()
69+
.container(item('minecraft:stone'))
70+
.input(item('minecraft:gold_ingot'), item('minecraft:gold_ingot'), item('minecraft:gold_ingot'), item('minecraft:gold_ingot'))
71+
.fluidInput(fluid('lava') * 500, fluid('formic_acid') * 500, fluid('honey') * 500, fluid('milk') * 500)
72+
.output(item('minecraft:clay') * 5)
73+
.register()
74+
75+

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ debug_cyclic = false
5353
debug_draconic_evolution = false
5454

5555
debug_enderio = false
56+
debug_erebus = false
5657
debug_essentialcraft_4 = false
5758
debug_evilcraft = false
5859
debug_extended_crafting = false

src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.cleanroommc.groovyscript.compat.mods.cyclic.Cyclic;
3131
import com.cleanroommc.groovyscript.compat.mods.draconicevolution.DraconicEvolution;
3232
import com.cleanroommc.groovyscript.compat.mods.enderio.EnderIO;
33+
import com.cleanroommc.groovyscript.compat.mods.erebus.Erebus;
3334
import com.cleanroommc.groovyscript.compat.mods.essentialcraft.EssentialCraft;
3435
import com.cleanroommc.groovyscript.compat.mods.evilcraft.EvilCraft;
3536
import com.cleanroommc.groovyscript.compat.mods.extendedcrafting.ExtendedCrafting;
@@ -120,6 +121,7 @@ public class ModSupport {
120121
public static final GroovyContainer<Cyclic> CYCLIC = new InternalModContainer<>("cyclicmagic", "Cyclic", Cyclic::new, "cyclic");
121122
public static final GroovyContainer<DraconicEvolution> DRACONIC_EVOLUTION = new InternalModContainer<>("draconicevolution", "Draconic Evolution", DraconicEvolution::new, "de");
122123
public static final GroovyContainer<EnderIO> ENDER_IO = new InternalModContainer<>("enderio", "Ender IO", EnderIO::new, "eio");
124+
public static final GroovyContainer<Erebus> EREBUS = new InternalModContainer<>("erebus", "The Erebus", Erebus::new);
123125
public static final GroovyContainer<EssentialCraft> ESSENTIALCRAFT = new InternalModContainer<>("essentialcraft", "EssentialCraft 4", EssentialCraft::new, "ec4");
124126
public static final GroovyContainer<EvilCraft> EVILCRAFT = new InternalModContainer<>("evilcraft", "EvilCraft", EvilCraft::new);
125127
public static final GroovyContainer<ExtendedCrafting> EXTENDED_CRAFTING = new InternalModContainer<>("extendedcrafting", "Extended Crafting", ExtendedCrafting::new);
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
package com.cleanroommc.groovyscript.compat.mods.erebus;
2+
3+
import com.cleanroommc.groovyscript.api.IIngredient;
4+
import com.cleanroommc.groovyscript.api.IScriptReloadable;
5+
import com.cleanroommc.groovyscript.api.documentation.annotations.Admonition;
6+
import com.cleanroommc.groovyscript.api.documentation.annotations.Example;
7+
import com.cleanroommc.groovyscript.api.documentation.annotations.MethodDescription;
8+
import com.cleanroommc.groovyscript.api.documentation.annotations.RegistryDescription;
9+
import com.cleanroommc.groovyscript.core.mixin.erebus.ComposterRegistryAccessor;
10+
import com.cleanroommc.groovyscript.registry.AbstractReloadableStorage;
11+
import com.cleanroommc.groovyscript.registry.NamedRegistry;
12+
import net.minecraft.block.material.Material;
13+
import net.minecraft.item.ItemStack;
14+
15+
import java.util.List;
16+
17+
@RegistryDescription(category = RegistryDescription.Category.ENTRIES, admonition = {
18+
@Admonition(value = "groovyscript.wiki.erebus.composter.note0", type = Admonition.Type.BUG), @Admonition("groovyscript.wiki.erebus.composter.note1")
19+
})
20+
public class Composter extends NamedRegistry implements IScriptReloadable {
21+
22+
private final AbstractReloadableStorage<Material> materialStorage = new AbstractReloadableStorage<>();
23+
private final AbstractReloadableStorage<ItemStack> registryStorage = new AbstractReloadableStorage<>();
24+
private final AbstractReloadableStorage<ItemStack> blacklistStorage = new AbstractReloadableStorage<>();
25+
26+
private static List<Material> getMaterial() {
27+
return ComposterRegistryAccessor.getMaterial();
28+
}
29+
30+
private static List<ItemStack> getRegistry() {
31+
return ComposterRegistryAccessor.getRegistry();
32+
}
33+
34+
private static List<ItemStack> getBlacklist() {
35+
return ComposterRegistryAccessor.getBlacklist();
36+
}
37+
38+
@Override
39+
public void onReload() {
40+
var material = getMaterial();
41+
var registry = getRegistry();
42+
var blacklist = getBlacklist();
43+
material.removeAll(materialStorage.removeScripted());
44+
material.addAll(materialStorage.restoreFromBackup());
45+
registry.removeAll(registryStorage.removeScripted());
46+
registry.addAll(registryStorage.restoreFromBackup());
47+
blacklist.removeAll(blacklistStorage.removeScripted());
48+
blacklist.addAll(blacklistStorage.restoreFromBackup());
49+
}
50+
51+
@Override
52+
public void afterScriptLoad() {}
53+
54+
@MethodDescription(type = MethodDescription.Type.ADDITION, example = @Example("material('tnt')"))
55+
public boolean addMaterial(Material material) {
56+
return getMaterial().add(material) && materialStorage.addScripted(material);
57+
}
58+
59+
@MethodDescription(type = MethodDescription.Type.ADDITION, example = @Example("item('minecraft:gold_ingot')"))
60+
public boolean addRegistry(ItemStack stack) {
61+
return getRegistry().add(stack) && registryStorage.addScripted(stack);
62+
}
63+
64+
@MethodDescription(type = MethodDescription.Type.ADDITION, example = {
65+
@Example("item('erebus:wall_plants', 7)"),
66+
@Example("item('erebus:wall_plants_cultivated', 7)")
67+
})
68+
public boolean addBlacklist(ItemStack stack) {
69+
return getBlacklist().add(stack) && blacklistStorage.addScripted(stack);
70+
}
71+
72+
@MethodDescription(example = @Example("material('sponge')"))
73+
public boolean removeFromMaterial(Material material) {
74+
return getMaterial().removeIf(r -> material == r && materialStorage.addBackup(r));
75+
}
76+
77+
@MethodDescription(example = @Example("item('minecraft:stick')"))
78+
public boolean removeFromRegistry(IIngredient ingredient) {
79+
return getRegistry().removeIf(r -> ingredient.test(r) && registryStorage.addBackup(r));
80+
}
81+
82+
@MethodDescription(example = @Example(value = "item('erebus:wall_plants', 1)", commented = true))
83+
public boolean removeFromBlacklist(IIngredient ingredient) {
84+
return getBlacklist().removeIf(r -> ingredient.test(r) && blacklistStorage.addBackup(r));
85+
}
86+
87+
@MethodDescription(priority = 2000, example = @Example(commented = true))
88+
public void removeAllFromMaterial() {
89+
var entries = getMaterial();
90+
entries.forEach(materialStorage::addBackup);
91+
entries.clear();
92+
}
93+
94+
@MethodDescription(priority = 2000, example = @Example(commented = true))
95+
public void removeAllFromRegistry() {
96+
var entries = getRegistry();
97+
entries.forEach(registryStorage::addBackup);
98+
entries.clear();
99+
}
100+
101+
@MethodDescription(priority = 2000, example = @Example(commented = true))
102+
public void removeAllFromBlacklist() {
103+
var entries = getBlacklist();
104+
entries.forEach(blacklistStorage::addBackup);
105+
entries.clear();
106+
}
107+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.cleanroommc.groovyscript.compat.mods.erebus;
2+
3+
import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer;
4+
5+
public class Erebus extends GroovyPropertyContainer {
6+
7+
public final Composter composter = new Composter();
8+
public final Smoothie smoothie = new Smoothie();
9+
public final OfferingAltar offeringAltar = new OfferingAltar();
10+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.cleanroommc.groovyscript.compat.mods.erebus;
2+
3+
import com.cleanroommc.groovyscript.api.GroovyLog;
4+
import com.cleanroommc.groovyscript.api.IIngredient;
5+
import com.cleanroommc.groovyscript.api.IOreDicts;
6+
import com.cleanroommc.groovyscript.api.documentation.annotations.*;
7+
import com.cleanroommc.groovyscript.compat.mods.ModSupport;
8+
import com.cleanroommc.groovyscript.core.mixin.erebus.OfferingAltarRecipeAccessor;
9+
import com.cleanroommc.groovyscript.helper.ingredient.IngredientHelper;
10+
import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder;
11+
import com.cleanroommc.groovyscript.registry.StandardListRegistry;
12+
import erebus.recipes.OfferingAltarRecipe;
13+
import net.minecraft.item.ItemStack;
14+
import net.minecraftforge.oredict.OreDictionary;
15+
import org.jetbrains.annotations.Nullable;
16+
17+
import java.util.Collection;
18+
import java.util.List;
19+
20+
@RegistryDescription
21+
public class OfferingAltar extends StandardListRegistry<OfferingAltarRecipe> {
22+
23+
@RecipeBuilderDescription(example = {
24+
@Example(".input(item('minecraft:gold_ingot')).output(item('minecraft:clay'))"),
25+
@Example(".input(item('minecraft:stone'), ore('gemDiamond'), item('minecraft:clay')).output(item('minecraft:gold_ingot'))")
26+
})
27+
public OfferingAltar.RecipeBuilder recipeBuilder() {
28+
return new OfferingAltar.RecipeBuilder();
29+
}
30+
31+
@Override
32+
public Collection<OfferingAltarRecipe> getRecipes() {
33+
return OfferingAltarRecipeAccessor.getRecipes();
34+
}
35+
36+
@MethodDescription(example = @Example(value = "item('minecraft:emerald')", commented = true))
37+
public boolean removeByInput(IIngredient input) {
38+
return getRecipes().removeIf(r -> {
39+
for (Object object : r.getInputs()) {
40+
if (object instanceof ItemStack stack && input.test(stack)) return doAddBackup(r);
41+
else if (object instanceof String s) {
42+
if (input instanceof IOreDicts d && d.getOreDicts().contains(s)) {
43+
return true;
44+
} else if (OreDictionary.getOres(s, false).stream().anyMatch(input)) {
45+
return true;
46+
}
47+
}
48+
}
49+
return false;
50+
});
51+
}
52+
53+
@MethodDescription(example = @Example("item('erebus:materials', 38)"))
54+
public boolean removeByOutput(IIngredient output) {
55+
return getRecipes().removeIf(r -> output.test(r.getOutput()) && doAddBackup(r));
56+
}
57+
58+
@Property(property = "input", comp = @Comp(gte = 1, lte = 3))
59+
@Property(property = "output", comp = @Comp(eq = 1))
60+
public static class RecipeBuilder extends AbstractRecipeBuilder<OfferingAltarRecipe> {
61+
62+
@Override
63+
protected int getMaxItemInput() {
64+
return 1;
65+
}
66+
67+
@Override
68+
public String getErrorMsg() {
69+
return "Error adding Erebus Offering Altar Recipe";
70+
}
71+
72+
@Override
73+
public void validate(GroovyLog.Msg msg) {
74+
validateItems(msg, 1, 3, 1, 1);
75+
validateFluids(msg);
76+
}
77+
78+
@Override
79+
@RecipeBuilderRegistrationMethod
80+
public @Nullable OfferingAltarRecipe register() {
81+
if (!validate()) return null;
82+
OfferingAltarRecipe recipe = null;
83+
var inputs = IngredientHelper.cartesianProductOres(input);
84+
for (List<Object> objects : inputs) {
85+
recipe = OfferingAltarRecipeAccessor.createOfferingAltarRecipe(output.get(0), objects.toArray());
86+
ModSupport.EREBUS.get().offeringAltar.add(recipe);
87+
}
88+
return recipe;
89+
}
90+
}
91+
}

0 commit comments

Comments
 (0)