Skip to content

Commit ffb59ba

Browse files
authored
add Silent's Gems compat (#276)
* add Silent's Gems compat * the spotless check, so easily forgotten * wait, it respects stack size of input?
1 parent 0cdf700 commit ffb59ba

File tree

7 files changed

+144
-0
lines changed

7 files changed

+144
-0
lines changed

dependencies.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ final def mod_dependencies = [
101101
'prodigytech-297414:2769520' : [project.debug_prodigytech],
102102
'roots-246183:3905074' : [project.debug_roots],
103103
'rustic-256141:3107974' : [project.debug_rustic],
104+
'silents-gems-220311:2804966' : [project.debug_silents_gems],
105+
'silents-lib-242998:2851111' : [project.debug_silents_gems],
104106
'reborncore-237903:3330308' : [project.debug_tech_reborn],
105107
'techreborn-233564:2966851' : [project.debug_tech_reborn],
106108
'thaumcraft-223628:2629023' : [project.debug_thaum],

examples/postInit/silentgems.groovy

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
// Auto generated groovyscript example file
3+
// MODS_LOADED: silentgems
4+
5+
log.info 'mod \'silentgems\' detected, running script'
6+
7+
// Chaos Altar:
8+
// Converts an input itemstack into an output itemstack with an optional catalyst, consuming a specified amount of Chaos
9+
// from a Chaos Altar. Chaos is consumed at a maximum of 400 per tick, meaning the time taken corresponds to the Chaos
10+
// cost.
11+
12+
mods.silentgems.chaos_altar.removeByCatalyst(item('minecraft:slime_ball'))
13+
mods.silentgems.chaos_altar.removeByInput(item('silentgems:gem'))
14+
mods.silentgems.chaos_altar.removeByOutput(item('silentgems:craftingmaterial'))
15+
// mods.silentgems.chaos_altar.removeAll()
16+
17+
mods.silentgems.chaos_altar.recipeBuilder()
18+
.input(item('minecraft:clay'))
19+
.output(item('minecraft:diamond'))
20+
.cost(5)
21+
.register()
22+
23+
mods.silentgems.chaos_altar.recipeBuilder()
24+
.input(item('minecraft:gold_ingot') * 2)
25+
.output(item('minecraft:clay'))
26+
.catalyst(item('minecraft:diamond'))
27+
.cost(5000)
28+
.register()
29+
30+

gradle.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ debug_random_things = false
7979
debug_roots = false
8080
debug_rustic = false
8181

82+
debug_silents_gems = false
83+
8284
debug_tech_reborn = false
8385
debug_thaum = false
8486
debug_thermal = 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
@@ -54,6 +54,7 @@
5454
import com.cleanroommc.groovyscript.compat.mods.randomthings.RandomThings;
5555
import com.cleanroommc.groovyscript.compat.mods.roots.Roots;
5656
import com.cleanroommc.groovyscript.compat.mods.rustic.Rustic;
57+
import com.cleanroommc.groovyscript.compat.mods.silentsgems.SilentGems;
5758
import com.cleanroommc.groovyscript.compat.mods.tcomplement.TinkersComplement;
5859
import com.cleanroommc.groovyscript.compat.mods.techreborn.TechReborn;
5960
import com.cleanroommc.groovyscript.compat.mods.thaumcraft.Thaumcraft;
@@ -132,6 +133,7 @@ public class ModSupport {
132133
public static final GroovyContainer<RandomThings> RANDOM_THINGS = new InternalModContainer<>("randomthings", "Random Things", RandomThings::new);
133134
public static final GroovyContainer<Roots> ROOTS = new InternalModContainer<>("roots", "Roots 3", Roots::new);
134135
public static final GroovyContainer<Rustic> RUSTIC = new InternalModContainer<>("rustic", "Rustic", Rustic::new);
136+
public static final GroovyContainer<SilentGems> SILENT_GEMS = new InternalModContainer<>("silentgems", "Silent's Gems", SilentGems::new);
135137
public static final GroovyContainer<TechReborn> TECH_REBORN = new InternalModContainer<>("techreborn", "Tech Reborn", TechReborn::new);
136138
public static final GroovyContainer<Thaumcraft> THAUMCRAFT = new InternalModContainer<>("thaumcraft", "Thaumcraft", Thaumcraft::new, "tc", "thaum");
137139
public static final GroovyContainer<TheAurorian> THE_AURORIAN = new InternalModContainer<>("theaurorian", "The Aurorian", TheAurorian::new, "aurorian");
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.cleanroommc.groovyscript.compat.mods.silentsgems;
2+
3+
import com.cleanroommc.groovyscript.api.GroovyLog;
4+
import com.cleanroommc.groovyscript.api.IIngredient;
5+
import com.cleanroommc.groovyscript.api.documentation.annotations.*;
6+
import com.cleanroommc.groovyscript.compat.mods.ModSupport;
7+
import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder;
8+
import com.cleanroommc.groovyscript.registry.StandardListRegistry;
9+
import net.minecraft.item.ItemStack;
10+
import net.silentchaos512.gems.api.recipe.altar.RecipeChaosAltar;
11+
import org.jetbrains.annotations.Nullable;
12+
13+
import java.util.Collection;
14+
15+
@RegistryDescription(admonition = @Admonition(value = "groovyscript.wiki.silentgems.chaos_altar.note0", type = Admonition.Type.WARNING))
16+
public class ChaosAltar extends StandardListRegistry<RecipeChaosAltar> {
17+
18+
@RecipeBuilderDescription(example = {
19+
@Example(".input(item('minecraft:clay')).output(item('minecraft:diamond')).cost(5)"),
20+
@Example(".input(item('minecraft:gold_ingot') * 2).output(item('minecraft:clay')).catalyst(item('minecraft:diamond')).cost(5000)")
21+
})
22+
public static RecipeBuilder recipeBuilder() {
23+
return new RecipeBuilder();
24+
}
25+
26+
@Override
27+
public Collection<RecipeChaosAltar> getRecipes() {
28+
return RecipeChaosAltar.ALL_RECIPES;
29+
}
30+
31+
@MethodDescription(example = @Example("item('silentgems:gem')"))
32+
public boolean removeByInput(IIngredient input) {
33+
return getRecipes().removeIf(r -> input.test(r.getInput()) && doAddBackup(r));
34+
}
35+
36+
@MethodDescription(example = @Example("item('minecraft:slime_ball')"))
37+
public boolean removeByCatalyst(IIngredient catalyst) {
38+
return getRecipes().removeIf(r -> catalyst.test(r.getCatalyst()) && doAddBackup(r));
39+
}
40+
41+
@MethodDescription(example = @Example("item('silentgems:craftingmaterial')"))
42+
public boolean removeByOutput(IIngredient output) {
43+
return getRecipes().removeIf(r -> output.test(r.getOutput()) && doAddBackup(r));
44+
}
45+
46+
@Property(property = "input", comp = @Comp(eq = 1))
47+
@Property(property = "output", comp = @Comp(eq = 1))
48+
public static class RecipeBuilder extends AbstractRecipeBuilder<RecipeChaosAltar> {
49+
50+
@Property(defaultValue = "ItemStack.EMPTY", comp = @Comp(not = "null"))
51+
private ItemStack catalyst = ItemStack.EMPTY;
52+
@Property(comp = @Comp(gt = 0))
53+
private int cost;
54+
55+
@RecipeBuilderMethodDescription
56+
public RecipeBuilder catalyst(ItemStack catalyst) {
57+
this.catalyst = catalyst;
58+
return this;
59+
}
60+
61+
@RecipeBuilderMethodDescription
62+
public RecipeBuilder cost(int cost) {
63+
this.cost = cost;
64+
return this;
65+
}
66+
67+
@Override
68+
public String getErrorMsg() {
69+
return "Error adding Silents Gems Chaos Altar recipe";
70+
}
71+
72+
@Override
73+
public void validate(GroovyLog.Msg msg) {
74+
validateItems(msg, 1, 1, 1, 1);
75+
validateFluids(msg);
76+
msg.add(catalyst == null, "catalyst must be defined");
77+
msg.add(cost <= 0, "cost must be greater than 0, yet it was {}", cost);
78+
}
79+
80+
@Override
81+
@RecipeBuilderRegistrationMethod
82+
public @Nullable RecipeChaosAltar register() {
83+
if (!validate()) return null;
84+
RecipeChaosAltar recipe = null;
85+
for (var stack : input.get(0).getMatchingStacks()) {
86+
recipe = new RecipeChaosAltar(output.get(0), stack, cost, catalyst);
87+
ModSupport.SILENT_GEMS.get().chaosAltar.add(recipe);
88+
}
89+
return recipe;
90+
}
91+
}
92+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.cleanroommc.groovyscript.compat.mods.silentsgems;
2+
3+
import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer;
4+
5+
public class SilentGems extends GroovyPropertyContainer {
6+
7+
public final ChaosAltar chaosAltar = new ChaosAltar();
8+
}

src/main/resources/assets/groovyscript/lang/en_us.lang

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2100,6 +2100,14 @@ groovyscript.wiki.rustic.evaporating_basin.description=Converts fluids into item
21002100
groovyscript.wiki.rustic.evaporating_basin.time.value=Sets the time in ticks the recipe will take
21012101

21022102

2103+
# Silent's Gems
2104+
groovyscript.wiki.silentgems.chaos_altar.title=Chaos Altar
2105+
groovyscript.wiki.silentgems.chaos_altar.description=Converts an input itemstack into an output itemstack with an optional catalyst, consuming a specified amount of Chaos from a Chaos Altar. Chaos is consumed at a maximum of 400 per tick, meaning the time taken corresponds to the Chaos cost.
2106+
groovyscript.wiki.silentgems.chaos_altar.note0=If no catalyst is required by the recipe, the Chaos Altar must have no item in the catalyst slot to be valid.
2107+
groovyscript.wiki.silentgems.chaos_altar.cost.value=Sets the total amount of Chaos required
2108+
groovyscript.wiki.silentgems.chaos_altar.catalyst.value=Sets the catalyst itemstack
2109+
2110+
21032111
# Tech Reborn
21042112
groovyscript.wiki.techreborn.alloy_smelter.title=Alloy Smelter
21052113
groovyscript.wiki.techreborn.alloy_smelter.description=Converts two itemstack inputs into an itemstack output after a given process time, consuming energy per tick.

0 commit comments

Comments
 (0)