Skip to content

Commit 9065eb2

Browse files
authored
add Magneticraft compat (#255)
* Magneticraft compat * add shorthand methods for the Hydraulic Press Mode * adjust chance methods * remove unused files * remove oreDict and defer to OreDictIngredient * apply chances to sieve
1 parent c9ee6a9 commit 9065eb2

21 files changed

+1251
-2
lines changed

dependencies.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ final def mod_dependencies = [
3434
'aether-255308:3280119' : [project.debug_aether],
3535
'alchemistry-293425:3186612' : [project.debug_alchemistry],
3636
'alchemylib-293426:2761706' : [project.debug_alchemistry],
37-
'shadowfacts-forgelin-248453:2785465' : [project.debug_alchemistry, project.debug_future_mc, project.debug_industrial_foregoing],
37+
'shadowfacts-forgelin-248453:2785465' : [project.debug_alchemistry, project.debug_future_mc, project.debug_industrial_foregoing, project.debug_magneticraft],
3838
'ae2-extended-life-570458:4553942' : [project.debug_applied_energistics_2, project.debug_lazy_ae2],
3939
'arcane-archives-311357:3057332' : [project.debug_arcane_archives],
4040
'guidebook-253874:2989594' : [project.debug_arcane_archives],
@@ -85,6 +85,8 @@ final def mod_dependencies = [
8585
'integrated-dynamics-236307:3159505' : [project.debug_integrated_dynamics],
8686
'lazy-ae2-322347:3254160' : [project.debug_lazy_ae2],
8787
'libnine-322344:3509087' : [project.debug_lazy_ae2],
88+
'magneticraft-224808:3791484' : [project.debug_magneticraft],
89+
'modelloader-277663:2744735' : [project.debug_magneticraft],
8890
'mekanism-268560:2835175' : [project.debug_mekanism],
8991
'mystical_agriculture-246640:2704562' : [project.debug_mystical_agriculture],
9092
'natures-aura-306626:2882138' : [project.debug_natures_aura],
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
2+
// Auto generated groovyscript example file
3+
// MODS_LOADED: magneticraft
4+
5+
import com.cout970.magneticraft.api.registries.machines.hydraulicpress.HydraulicPressMode
6+
7+
log.info 'mod \'magneticraft\' detected, running script'
8+
9+
// Crushing Table:
10+
// Converts an input itemstack into an output itemstack when placed on top of the Crushing Table and interacted with by a
11+
// Hammer which has.
12+
13+
mods.magneticraft.crushing_table.removeByInput(item('minecraft:iron_ore'))
14+
mods.magneticraft.crushing_table.removeByOutput(item('minecraft:gunpowder'))
15+
// mods.magneticraft.crushing_table.removeAll()
16+
17+
mods.magneticraft.crushing_table.recipeBuilder()
18+
.input(item('minecraft:clay'))
19+
.output(item('minecraft:diamond'))
20+
.register()
21+
22+
mods.magneticraft.crushing_table.recipeBuilder()
23+
.input(item('minecraft:diamond'))
24+
.output(item('minecraft:clay'))
25+
.register()
26+
27+
28+
// Gasification Unit:
29+
// Converts an input itemstack into either an output itemstack, an output fluidstack, or both in a Gasification Unit block.
30+
31+
// mods.magneticraft.gasification_unit.removeAll()
32+
33+
mods.magneticraft.gasification_unit.recipeBuilder()
34+
.input(item('minecraft:clay'))
35+
.output(item('minecraft:diamond'))
36+
.duration(50)
37+
.minTemperature(700)
38+
.register()
39+
40+
mods.magneticraft.gasification_unit.recipeBuilder()
41+
.input(item('minecraft:diamond'))
42+
.fluidOutput(fluid('lava'))
43+
.duration(100)
44+
.minTemperature(500)
45+
.register()
46+
47+
48+
// Grinder:
49+
// Converts an input itemstack into an output itemstack with a chance at a second itemstack in a Grinder Multiblock.
50+
51+
mods.magneticraft.grinder.removeByInput(item('minecraft:iron_ore'))
52+
mods.magneticraft.grinder.removeByOutput(item('minecraft:gravel'))
53+
// mods.magneticraft.grinder.removeAll()
54+
55+
mods.magneticraft.grinder.recipeBuilder()
56+
.input(item('minecraft:clay'))
57+
.output(item('minecraft:diamond'))
58+
.ticks(50)
59+
.register()
60+
61+
mods.magneticraft.grinder.recipeBuilder()
62+
.input(item('minecraft:diamond'))
63+
.output(item('minecraft:clay'), item('minecraft:gold_ingot'))
64+
.chance(10)
65+
.ticks(50)
66+
.register()
67+
68+
69+
// Hydraulic Press:
70+
// Converts an input itemstack into an output itemstack when set to a given mode in a Hydraulic Press Multiblock.
71+
72+
mods.magneticraft.hydraulic_press.removeByInput(item('minecraft:iron_ingot'))
73+
mods.magneticraft.hydraulic_press.removeByMode(HydraulicPressMode.MEDIUM)
74+
mods.magneticraft.hydraulic_press.removeByOutput(item('minecraft:cobblestone'))
75+
// mods.magneticraft.hydraulic_press.removeAll()
76+
77+
mods.magneticraft.hydraulic_press.recipeBuilder()
78+
.input(item('minecraft:clay'))
79+
.output(item('minecraft:diamond'))
80+
.ticks(50)
81+
.register()
82+
83+
mods.magneticraft.hydraulic_press.recipeBuilder()
84+
.input(item('minecraft:gold_ingot'))
85+
.output(item('minecraft:diamond'))
86+
.ticks(50)
87+
.medium()
88+
.register()
89+
90+
mods.magneticraft.hydraulic_press.recipeBuilder()
91+
.input(item('minecraft:diamond'))
92+
.output(item('minecraft:clay'))
93+
.ticks(100)
94+
.mode(HydraulicPressMode.HEAVY)
95+
.register()
96+
97+
98+
// Oil Heater:
99+
// Converts an input fluidstack into an output fluidstack in a Oil Heater Multiblock.
100+
101+
mods.magneticraft.oil_heater.removeByInput(fluid('oil'))
102+
mods.magneticraft.oil_heater.removeByOutput(fluid('steam'))
103+
// mods.magneticraft.oil_heater.removeAll()
104+
105+
mods.magneticraft.oil_heater.recipeBuilder()
106+
.fluidInput(fluid('water'))
107+
.fluidOutput(fluid('lava'))
108+
.duration(50)
109+
.minTemperature(200)
110+
.register()
111+
112+
mods.magneticraft.oil_heater.recipeBuilder()
113+
.fluidInput(fluid('lava'))
114+
.fluidOutput(fluid('water'))
115+
.duration(100)
116+
.minTemperature(50)
117+
.register()
118+
119+
120+
// Refinery:
121+
// Converts an input fluidstack into up to three output fluidstacks in a Refinery Multiblock.
122+
123+
mods.magneticraft.refinery.removeByInput(fluid('steam'))
124+
mods.magneticraft.refinery.removeByOutput(fluid('fuel'))
125+
// mods.magneticraft.refinery.removeAll()
126+
127+
mods.magneticraft.refinery.recipeBuilder()
128+
.fluidInput(fluid('water'))
129+
.fluidOutput(fluid('lava'))
130+
.duration(50)
131+
.register()
132+
133+
mods.magneticraft.refinery.recipeBuilder()
134+
.fluidInput(fluid('lava'))
135+
.fluidOutput(fluid('water'))
136+
.duration(100)
137+
.register()
138+
139+
140+
// Sieve:
141+
// Converts an input itemstack into up to three output itemstacks, each with a separate chance in a Sieve Multiblock.
142+
143+
mods.magneticraft.sieve.removeByInput(item('minecraft:sand'))
144+
mods.magneticraft.sieve.removeByOutput(item('minecraft:quartz'))
145+
// mods.magneticraft.sieve.removeAll()
146+
147+
mods.magneticraft.sieve.recipeBuilder()
148+
.input(item('minecraft:clay'))
149+
.output(item('minecraft:diamond'), 0.5)
150+
.duration(50)
151+
.register()
152+
153+
mods.magneticraft.sieve.recipeBuilder()
154+
.input(item('minecraft:gold_ingot'))
155+
.output(item('minecraft:diamond'), 0.05)
156+
.output(item('minecraft:clay'))
157+
.duration(50)
158+
.register()
159+
160+
mods.magneticraft.sieve.recipeBuilder()
161+
.input(item('minecraft:diamond'))
162+
.output(item('minecraft:clay'), 0.5)
163+
.output(item('minecraft:clay'), 0.5)
164+
.output(item('minecraft:clay'), 0.5)
165+
.duration(1)
166+
.register()
167+
168+
169+
// Sluice Box:
170+
// Converts an input itemstack into any number of output itemstacks each with a given chance. Consumes a bucket of water
171+
// per batch, and can be crafted 10 at a time in a Sluice Box.
172+
173+
mods.magneticraft.sluice_box.removeByInput(item('minecraft:sand'))
174+
mods.magneticraft.sluice_box.removeByOutput(item('minecraft:cobblestone'))
175+
// mods.magneticraft.sluice_box.removeAll()
176+
177+
mods.magneticraft.sluice_box.recipeBuilder()
178+
.input(item('minecraft:gold_ingot'))
179+
.output(item('minecraft:clay'))
180+
.register()
181+
182+
mods.magneticraft.sluice_box.recipeBuilder()
183+
.input(item('minecraft:clay'))
184+
.output(item('minecraft:diamond'), 0.5)
185+
.register()
186+
187+
mods.magneticraft.sluice_box.recipeBuilder()
188+
.input(item('minecraft:diamond'))
189+
.output(item('minecraft:clay'), 0.5)
190+
.output(item('minecraft:clay'), 0.3)
191+
.output(item('minecraft:clay'), 0.2)
192+
.output(item('minecraft:clay'), 0.1)
193+
.register()
194+
195+
196+
// Thermopile:
197+
// The Thermopile generates energy from temperature differences modified by the thermal resistances of the block. This lets
198+
// you generate energy when placed on either side of a Thermopile.
199+
200+
mods.magneticraft.thermopile.removeByInput(blockstate('minecraft:ice'))
201+
// mods.magneticraft.thermopile.removeAll()
202+
203+
mods.magneticraft.thermopile.recipeBuilder()
204+
.state(blockstate('minecraft:clay'))
205+
.conductivity(10)
206+
.temperature(500)
207+
.register()
208+
209+
mods.magneticraft.thermopile.recipeBuilder()
210+
.state(blockstate('minecraft:diamond_block'))
211+
.conductivity(70)
212+
.temperature(700)
213+
.register()
214+
215+

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ debug_integrated_dynamics = false
5858

5959
debug_lazy_ae2 = false
6060

61+
debug_magneticraft = false
6162
debug_mekanism = false
6263
debug_mystical_agriculture = false
6364

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import com.cleanroommc.groovyscript.compat.mods.integrateddynamics.IntegratedDynamics;
4141
import com.cleanroommc.groovyscript.compat.mods.jei.JustEnoughItems;
4242
import com.cleanroommc.groovyscript.compat.mods.lazyae2.LazyAE2;
43+
import com.cleanroommc.groovyscript.compat.mods.magneticraft.Magneticraft;
4344
import com.cleanroommc.groovyscript.compat.mods.mekanism.Mekanism;
4445
import com.cleanroommc.groovyscript.compat.mods.mysticalagriculture.MysticalAgriculture;
4546
import com.cleanroommc.groovyscript.compat.mods.naturesaura.NaturesAura;
@@ -113,6 +114,7 @@ public class ModSupport {
113114
public static final GroovyContainer<Inspirations> INSPIRATIONS = new InternalModContainer<>("inspirations", "Inspirations", Inspirations::new);
114115
public static final GroovyContainer<IntegratedDynamics> INTEGRATED_DYNAMICS = new InternalModContainer<>("integrateddynamics", "Integrated Dynamics", IntegratedDynamics::new, "id");
115116
public static final GroovyContainer<JustEnoughItems> JEI = new InternalModContainer<>("jei", "Just Enough Items", JustEnoughItems::new, "hei");
117+
public static final GroovyContainer<Magneticraft> MAGNETICRAFT = new InternalModContainer<>("magneticraft", "Magneticraft", Magneticraft::new);
116118
public static final GroovyContainer<Mekanism> MEKANISM = new InternalModContainer<>("mekanism", "Mekanism", Mekanism::new);
117119
public static final GroovyContainer<MysticalAgriculture> MYSTICAL_AGRICULTURE = new InternalModContainer<>("mysticalagriculture", "Mystical Agriculture", MysticalAgriculture::new);
118120
public static final GroovyContainer<LazyAE2> LAZYAE2 = new InternalModContainer<>("threng", "LazyAE2", LazyAE2::new, "lazyae2");
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package com.cleanroommc.groovyscript.compat.mods.magneticraft;
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.core.mixin.magneticraft.CrushingTableRecipeManagerAccessor;
8+
import com.cleanroommc.groovyscript.helper.ingredient.OreDictIngredient;
9+
import com.cleanroommc.groovyscript.helper.recipe.AbstractRecipeBuilder;
10+
import com.cleanroommc.groovyscript.registry.StandardListRegistry;
11+
import com.cout970.magneticraft.api.MagneticraftApi;
12+
import com.cout970.magneticraft.api.registries.machines.crushingtable.ICrushingTableRecipe;
13+
import org.jetbrains.annotations.Nullable;
14+
15+
import java.util.Collection;
16+
17+
@RegistryDescription
18+
public class CrushingTable extends StandardListRegistry<ICrushingTableRecipe> {
19+
20+
@RecipeBuilderDescription(example = {
21+
@Example(".input(item('minecraft:clay')).output(item('minecraft:diamond'))"),
22+
@Example(".input(item('minecraft:diamond')).output(item('minecraft:clay'))")
23+
})
24+
public RecipeBuilder recipeBuilder() {
25+
return new RecipeBuilder();
26+
}
27+
28+
/**
29+
* Internally, the API method uses {@link java.util.Collections#unmodifiableList},
30+
* so a mixin is required to access the actual list and avoid {@link UnsupportedOperationException}s.
31+
*
32+
* @see com.cout970.magneticraft.api.internal.registries.machines.crushingtable.CrushingTableRecipeManager#getRecipes() MagneticraftApi.getCrushingTableRecipeManager().getRecipes()
33+
*/
34+
@Override
35+
public Collection<ICrushingTableRecipe> getRecipes() {
36+
return CrushingTableRecipeManagerAccessor.getRecipes();
37+
}
38+
39+
@MethodDescription(example = @Example("item('minecraft:iron_ore')"))
40+
public boolean removeByInput(IIngredient input) {
41+
return getRecipes().removeIf(r -> input.test(r.getInput()) && addBackup(r));
42+
}
43+
44+
@MethodDescription(example = @Example("item('minecraft:gunpowder')"))
45+
public boolean removeByOutput(IIngredient output) {
46+
return getRecipes().removeIf(r -> output.test(r.getOutput()) && addBackup(r));
47+
}
48+
49+
@Property(property = "input", comp = @Comp(eq = 1))
50+
@Property(property = "output", comp = @Comp(eq = 1))
51+
public static class RecipeBuilder extends AbstractRecipeBuilder<ICrushingTableRecipe> {
52+
53+
@Override
54+
public String getErrorMsg() {
55+
return "Error adding Magneticraft Crushing Table recipe";
56+
}
57+
58+
@Override
59+
public void validate(GroovyLog.Msg msg) {
60+
validateItems(msg, 1, 1, 1, 1);
61+
validateFluids(msg);
62+
}
63+
64+
@Override
65+
@RecipeBuilderRegistrationMethod
66+
public @Nullable ICrushingTableRecipe register() {
67+
if (!validate()) return null;
68+
ICrushingTableRecipe recipe = null;
69+
if (input.get(0) instanceof OreDictIngredient ore) {
70+
recipe = MagneticraftApi.getCrushingTableRecipeManager().createRecipe(ore.getMatchingStacks()[0], output.get(0), true);
71+
ModSupport.MAGNETICRAFT.get().crushingTable.add(recipe);
72+
} else {
73+
for (var stack : input.get(0).getMatchingStacks()) {
74+
recipe = MagneticraftApi.getCrushingTableRecipeManager().createRecipe(stack, output.get(0), false);
75+
ModSupport.MAGNETICRAFT.get().crushingTable.add(recipe);
76+
}
77+
}
78+
return recipe;
79+
}
80+
81+
}
82+
83+
}

0 commit comments

Comments
 (0)