From bb89236c7cc5dd9d82cd7e4d265acac5f4e70e00 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sun, 7 Apr 2024 17:26:44 +0200 Subject: [PATCH 1/7] material registry for groovy --- .../internal/MaterialRegistryManager.java | 5 +++ .../groovy/GroovyScriptModule.java | 44 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/core/unification/material/internal/MaterialRegistryManager.java b/src/main/java/gregtech/core/unification/material/internal/MaterialRegistryManager.java index 265e2a875d0..ff26e95cdd2 100644 --- a/src/main/java/gregtech/core/unification/material/internal/MaterialRegistryManager.java +++ b/src/main/java/gregtech/core/unification/material/internal/MaterialRegistryManager.java @@ -140,6 +140,11 @@ private MaterialRegistryImpl createInternalRegistry() { return registry; } + @NotNull + public MaterialRegistry getDefaultRegistry() { + return gregtechRegistry; + } + @NotNull public Material getDefaultFallback() { return gregtechRegistry.getFallbackMaterial(); diff --git a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java index e5082df1461..87b6c554379 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java +++ b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java @@ -12,6 +12,7 @@ import gregtech.api.unification.Elements; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.event.MaterialEvent; +import gregtech.api.unification.material.event.MaterialRegistryEvent; import gregtech.api.unification.material.event.PostMaterialEvent; import gregtech.api.unification.material.registry.MaterialRegistry; import gregtech.api.unification.ore.OrePrefix; @@ -22,6 +23,7 @@ import gregtech.common.pipelike.cable.BlockCable; import gregtech.common.pipelike.fluidpipe.BlockFluidPipe; import gregtech.common.pipelike.itempipe.BlockItemPipe; +import gregtech.core.unification.material.internal.MaterialRegistryManager; import gregtech.integration.IntegrationSubmodule; import gregtech.modules.GregTechModules; @@ -69,6 +71,7 @@ description = "GroovyScript Integration Module") public class GroovyScriptModule extends IntegrationSubmodule implements GroovyPlugin { + private static MaterialRegistry materialRegistry; private static GroovyContainer modSupportContainer; private static final Object2ObjectOpenHashMap> metaItems = new Object2ObjectOpenHashMap<>(); @@ -83,6 +86,11 @@ public static void onRecipeEvent(RegistryEvent.Register event) { GroovyScriptModule.loadMetaItemBracketHandler(); } + @SubscribeEvent + public static void onMaterialRegistryRegistry(MaterialRegistryEvent event) { + materialRegistry = GregTechAPI.materialManager.createRegistry(GroovyScript.getRunConfig().getPackOrModId()); + } + public static boolean isCurrentlyRunning() { return GregTechAPI.moduleManager.isModuleEnabled(GregTechModules.MODULE_GRS) && GroovyScript.getSandbox().isRunning(); @@ -242,9 +250,9 @@ public void onCompatLoaded(GroovyContainer groovyContainer) { .register(); GameObjectHandler.builder("material", Material.class) .mod(GTValues.MODID) - .parser(IGameObjectParser.wrapStringGetter(GregTechAPI.materialManager::getMaterial)) + .parser(GroovyScriptModule::parseMaterial) .completerOfNamed(GregTechAPI.materialManager::getRegisteredMaterials, - mat -> mat.getResourceLocation().toString()) + GroovyScriptModule::getMaterialId) .register(); GameObjectHandler.builder("oreprefix", OrePrefix.class) @@ -299,6 +307,38 @@ public void onCompatLoaded(GroovyContainer groovyContainer) { ExpansionHelper.mixinMethod(FluidBuilder.class, GroovyExpansions.class, "acidic"); } + public static Result parseMaterial(String s, Object... args) { + String name; + MaterialRegistry reg; + int i = s.indexOf(':'); + if (i < 0) { + if (args.length > 0 && args[0] instanceof String n) { + name = n; + reg = MaterialRegistryManager.getInstance().getRegistry(s); + } else { + name = s; + reg = materialRegistry; + } + } else { + name = s.substring(i + 1); + reg = MaterialRegistryManager.getInstance().getRegistry(s.substring(0, i)); + } + Material mat = reg.getObject(name); + if (mat == null && reg != MaterialRegistryManager.getInstance().getDefaultRegistry()) { + mat = MaterialRegistryManager.getInstance().getDefaultRegistry().getObject(name); + } + if (mat != null) return Result.some(mat); + return Result.error(); + } + + private static String getMaterialId(Material mat) { + if (mat.getRegistry() == MaterialRegistryManager.getInstance().getDefaultRegistry() || + mat.getRegistry() == materialRegistry) { + return mat.getResourceLocation().getPath(); + } + return mat.getResourceLocation().toString(); + } + protected static boolean checkFrozen(String description) { if (!GregTechAPI.materialManager.canModifyMaterials()) { GroovyLog.get().error("Cannot {} now, must be done in preInit loadStage and material event", description); From 9b5f5e978f65345845c1990776b58c335b064485 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sun, 16 Jun 2024 20:54:54 +0200 Subject: [PATCH 2/7] update grs to 1.1.0 --- dependencies.gradle | 2 +- .../groovy/GroovyScriptModule.java | 28 +++++++++---------- .../integration/groovy/PropertyContainer.java | 4 +-- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 70fa763ed88..e2ef40e1819 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -41,7 +41,7 @@ dependencies { // Published dependencies api("codechicken:codechickenlib:3.2.3.358") api("com.cleanroommc:modularui:2.4.3") { transitive = false } - api("com.cleanroommc:groovyscript:1.0.1") { transitive = false } + api("com.cleanroommc:groovyscript:1.1.0") { transitive = false } api("CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.698") api("appeng:ae2-uel:v0.56.4") { transitive = false } api rfg.deobf("curse.maven:ctm-267602:2915363") // CTM 1.0.2.31 diff --git a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java index 8b776baab21..967088de236 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java +++ b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java @@ -39,12 +39,11 @@ import com.cleanroommc.groovyscript.GroovyScript; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.GroovyPlugin; -import com.cleanroommc.groovyscript.api.IGameObjectParser; +import com.cleanroommc.groovyscript.api.IObjectParser; import com.cleanroommc.groovyscript.api.Result; import com.cleanroommc.groovyscript.compat.mods.GroovyContainer; -import com.cleanroommc.groovyscript.compat.mods.ModPropertyContainer; +import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer; import com.cleanroommc.groovyscript.event.ScriptRunEvent; -import com.cleanroommc.groovyscript.gameobjects.GameObjectHandler; import com.cleanroommc.groovyscript.helper.EnumHelper; import com.cleanroommc.groovyscript.sandbox.expand.ExpansionHelper; import com.google.common.collect.ImmutableList; @@ -244,36 +243,35 @@ public static void loadMetaItemBracketHandler() { return GTValues.MOD_NAME; } - @Optional.Method(modid = Mods.Names.GROOVY_SCRIPT) @Override - public @Nullable ModPropertyContainer createModPropertyContainer() { + public @Nullable GroovyPropertyContainer createGroovyPropertyContainer() { return new PropertyContainer(); } @Override - public void onCompatLoaded(GroovyContainer groovyContainer) { - GroovyScriptModule.modSupportContainer = groovyContainer; - GameObjectHandler.builder("recipemap", RecipeMap.class) + public void onCompatLoaded(GroovyContainer container) { + GroovyScriptModule.modSupportContainer = container; + container.objectMapperBuilder("recipemap", RecipeMap.class) .mod(GTValues.MODID) - .parser(IGameObjectParser.wrapStringGetter(RecipeMap::getByName)) + .parser(IObjectParser.wrapStringGetter(RecipeMap::getByName)) .completerOfNamed(RecipeMap::getRecipeMaps, RecipeMap::getUnlocalizedName) .register(); - GameObjectHandler.builder("material", Material.class) + container.objectMapperBuilder("material", Material.class) .mod(GTValues.MODID) .parser(GroovyScriptModule::parseMaterial) .completerOfNamed(GregTechAPI.materialManager::getRegisteredMaterials, GroovyScriptModule::getMaterialId) .register(); - GameObjectHandler.builder("oreprefix", OrePrefix.class) + container.objectMapperBuilder("oreprefix", OrePrefix.class) .mod(GTValues.MODID) - .parser(IGameObjectParser.wrapStringGetter(OrePrefix::getPrefix)) + .parser(IObjectParser.wrapStringGetter(OrePrefix::getPrefix)) .completerOfNamed(OrePrefix::values, v -> v.name) .register(); - GameObjectHandler.builder("metaitem", ItemStack.class) + container.objectMapperBuilder("metaitem", ItemStack.class) .mod(GTValues.MODID) - .parser(IGameObjectParser.wrapStringGetter(GroovyScriptModule::getMetaItem)) + .parser(IObjectParser.wrapStringGetter(GroovyScriptModule::getMetaItem)) .completer((paramIndex, items) -> { if (paramIndex != 0) return; for (var iterator = metaItems.object2ObjectEntrySet().fastIterator(); iterator.hasNext();) { @@ -288,7 +286,7 @@ public void onCompatLoaded(GroovyContainer groovyContainer) { }) .register(); - GameObjectHandler.builder("element", Element.class) + container.objectMapperBuilder("element", Element.class) .mod(GTValues.MODID) .parser((s, args) -> { Element element = Elements.get(s); diff --git a/src/main/java/gregtech/integration/groovy/PropertyContainer.java b/src/main/java/gregtech/integration/groovy/PropertyContainer.java index 35da8ce4905..30930c68f9c 100644 --- a/src/main/java/gregtech/integration/groovy/PropertyContainer.java +++ b/src/main/java/gregtech/integration/groovy/PropertyContainer.java @@ -7,7 +7,7 @@ import com.cleanroommc.groovyscript.GroovyScript; import com.cleanroommc.groovyscript.api.GroovyLog; -import com.cleanroommc.groovyscript.compat.mods.ModPropertyContainer; +import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer; import com.cleanroommc.groovyscript.event.EventBusType; import com.cleanroommc.groovyscript.event.GroovyEventManager; import com.cleanroommc.groovyscript.sandbox.ClosureHelper; @@ -15,7 +15,7 @@ import groovy.lang.Closure; import groovy.lang.DelegatesTo; -public class PropertyContainer extends ModPropertyContainer { +public class PropertyContainer extends GroovyPropertyContainer { public void materialEvent(EventPriority priority, @DelegatesTo(MaterialEvent.class) Closure eventListener) { if (GroovyScriptModule.isCurrentlyRunning() && From 08c28e41bbf31492f4b0fbedebfa67eaf988a323 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sun, 16 Jun 2024 21:08:39 +0200 Subject: [PATCH 3/7] warn if people try using overwritten method --- .../groovy/GroovyMaterialBuilderExpansion.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java index 2b67fa26844..f132c8ea481 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java +++ b/src/main/java/gregtech/integration/groovy/GroovyMaterialBuilderExpansion.java @@ -108,10 +108,16 @@ public static Material.Builder components(Material.Builder builder, Object... ob materialStacks.add(materialStack); } else if (o instanceof Material material) { materialStacks.add(new MaterialStack(material, 1)); + } else if (o instanceof Integer) { + GroovyLog.msg("Error creating GregTech material") + .add("Tried to use old method for material components in the shape of (material1, amount1, material2, amount2)") + .add("Please change this into (material1 * amount1, material2 * amount2)") + .error().post(); } else { - GroovyLog.get() - .error("Material components must be of type Material or MaterialStack, but was of type {}", - o == null ? null : o.getClass()); + GroovyLog.msg("Error creating GregTech material") + .add("Material components must be of type Material or MaterialStack, but was of type {}", + o == null ? null : o.getClass()) + .error().post(); } } return builder.components(materialStacks.toArray(new MaterialStack[0])); From 32a9fdca291cbf69083e468c33c108893957324e Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sun, 16 Jun 2024 21:09:32 +0200 Subject: [PATCH 4/7] more grs 1.1.0 stuff --- .../java/gregtech/integration/groovy/GroovyScriptModule.java | 5 ----- .../gregtech/integration/groovy/VirtualizedRecipeMap.java | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java index 967088de236..6873372d3d1 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java +++ b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java @@ -252,25 +252,21 @@ public static void loadMetaItemBracketHandler() { public void onCompatLoaded(GroovyContainer container) { GroovyScriptModule.modSupportContainer = container; container.objectMapperBuilder("recipemap", RecipeMap.class) - .mod(GTValues.MODID) .parser(IObjectParser.wrapStringGetter(RecipeMap::getByName)) .completerOfNamed(RecipeMap::getRecipeMaps, RecipeMap::getUnlocalizedName) .register(); container.objectMapperBuilder("material", Material.class) - .mod(GTValues.MODID) .parser(GroovyScriptModule::parseMaterial) .completerOfNamed(GregTechAPI.materialManager::getRegisteredMaterials, GroovyScriptModule::getMaterialId) .register(); container.objectMapperBuilder("oreprefix", OrePrefix.class) - .mod(GTValues.MODID) .parser(IObjectParser.wrapStringGetter(OrePrefix::getPrefix)) .completerOfNamed(OrePrefix::values, v -> v.name) .register(); container.objectMapperBuilder("metaitem", ItemStack.class) - .mod(GTValues.MODID) .parser(IObjectParser.wrapStringGetter(GroovyScriptModule::getMetaItem)) .completer((paramIndex, items) -> { if (paramIndex != 0) return; @@ -287,7 +283,6 @@ public void onCompatLoaded(GroovyContainer container) { .register(); container.objectMapperBuilder("element", Element.class) - .mod(GTValues.MODID) .parser((s, args) -> { Element element = Elements.get(s); if (element != null) return Result.some(element); diff --git a/src/main/java/gregtech/integration/groovy/VirtualizedRecipeMap.java b/src/main/java/gregtech/integration/groovy/VirtualizedRecipeMap.java index 6bd80f4db05..ff2e351d811 100644 --- a/src/main/java/gregtech/integration/groovy/VirtualizedRecipeMap.java +++ b/src/main/java/gregtech/integration/groovy/VirtualizedRecipeMap.java @@ -23,7 +23,7 @@ public class VirtualizedRecipeMap extends VirtualizedRegistry { public VirtualizedRecipeMap(RecipeMap recipeMap) { super(Alias.generateOf(recipeMap.unlocalizedName, CaseFormat.LOWER_UNDERSCORE)); this.recipeMap = recipeMap; - GroovyScriptModule.getInstance().getRegistrar().addRegistry(this); + GroovyScriptModule.getInstance().addProperty(this); } @Override From 4424c1f0c6e9e817b5ceb5017fb3bc8f634fdff0 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sat, 22 Jun 2024 11:11:17 +0200 Subject: [PATCH 5/7] bump required grs version --- src/main/java/gregtech/GregTechMod.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/gregtech/GregTechMod.java b/src/main/java/gregtech/GregTechMod.java index 97350a1a009..a23dabd03c4 100644 --- a/src/main/java/gregtech/GregTechMod.java +++ b/src/main/java/gregtech/GregTechMod.java @@ -35,7 +35,7 @@ dependencies = "required:forge@[14.23.5.2847,);" + "required-after:codechickenlib@[3.2.3,);" + "required-after:modularui@[2.3,);" + "required-after:mixinbooter@[8.0,);" + "after:appliedenergistics2;" + "after:forestry;" + "after:extrabees;" + "after:extratrees;" + "after:genetics;" + "after:magicbees;" + - "after:jei@[4.15.0,);" + "after:crafttweaker@[4.1.20,);" + "after:groovyscript@[1.0.1,);" + + "after:jei@[4.15.0,);" + "after:crafttweaker@[4.1.20,);" + "after:groovyscript@[1.1.0,);" + "after:theoneprobe;" + "after:hwyla;") public class GregTechMod { From 90056541dfc2ed4c2f08875be15683c61f1badec Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sat, 22 Jun 2024 11:11:36 +0200 Subject: [PATCH 6/7] probably fix crash --- .../java/gregtech/integration/groovy/GroovyScriptModule.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java index 6873372d3d1..859bd7c467d 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java +++ b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java @@ -125,6 +125,7 @@ public static > T parseAndValidateEnumValue(Class clazz, St return t; } + @Optional.Method(modid = Mods.Names.GROOVY_SCRIPT) public static GroovyContainer getInstance() { return modSupportContainer; } @@ -243,11 +244,13 @@ public static void loadMetaItemBracketHandler() { return GTValues.MOD_NAME; } + @Optional.Method(modid = Mods.Names.GROOVY_SCRIPT) @Override public @Nullable GroovyPropertyContainer createGroovyPropertyContainer() { return new PropertyContainer(); } + @Optional.Method(modid = Mods.Names.GROOVY_SCRIPT) @Override public void onCompatLoaded(GroovyContainer container) { GroovyScriptModule.modSupportContainer = container; From 0f4aa085a62b9017d613c4e8f5642a83a7ba73dd Mon Sep 17 00:00:00 2001 From: brachy84 Date: Mon, 1 Jul 2024 19:27:51 +0200 Subject: [PATCH 7/7] remove material registry stuff --- .../groovy/GroovyScriptModule.java | 44 +------------------ 1 file changed, 2 insertions(+), 42 deletions(-) diff --git a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java index 859bd7c467d..cca6dc79bab 100644 --- a/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java +++ b/src/main/java/gregtech/integration/groovy/GroovyScriptModule.java @@ -13,7 +13,6 @@ import gregtech.api.unification.Elements; import gregtech.api.unification.material.Material; import gregtech.api.unification.material.event.MaterialEvent; -import gregtech.api.unification.material.event.MaterialRegistryEvent; import gregtech.api.unification.material.event.PostMaterialEvent; import gregtech.api.unification.material.registry.MaterialRegistry; import gregtech.api.unification.ore.OrePrefix; @@ -24,7 +23,6 @@ import gregtech.common.pipelike.cable.BlockCable; import gregtech.common.pipelike.fluidpipe.BlockFluidPipe; import gregtech.common.pipelike.itempipe.BlockItemPipe; -import gregtech.core.unification.material.internal.MaterialRegistryManager; import gregtech.integration.IntegrationSubmodule; import gregtech.modules.GregTechModules; @@ -72,7 +70,6 @@ description = "GroovyScript Integration Module") public class GroovyScriptModule extends IntegrationSubmodule implements GroovyPlugin { - private static MaterialRegistry materialRegistry; private static GroovyContainer modSupportContainer; private static final Object2ObjectOpenHashMap> metaItems = new Object2ObjectOpenHashMap<>(); @@ -95,11 +92,6 @@ public static void afterScriptLoad(ScriptRunEvent.Post event) { GTRecipeOreInput.refreshStackCache(); } - @SubscribeEvent - public static void onMaterialRegistryRegistry(MaterialRegistryEvent event) { - materialRegistry = GregTechAPI.materialManager.createRegistry(GroovyScript.getRunConfig().getPackOrModId()); - } - public static boolean isCurrentlyRunning() { return GregTechAPI.moduleManager.isModuleEnabled(GregTechModules.MODULE_GRS) && GroovyScript.getSandbox().isRunning(); @@ -259,9 +251,9 @@ public void onCompatLoaded(GroovyContainer container) { .completerOfNamed(RecipeMap::getRecipeMaps, RecipeMap::getUnlocalizedName) .register(); container.objectMapperBuilder("material", Material.class) - .parser(GroovyScriptModule::parseMaterial) + .parser(IObjectParser.wrapStringGetter(GregTechAPI.materialManager::getMaterial)) .completerOfNamed(GregTechAPI.materialManager::getRegisteredMaterials, - GroovyScriptModule::getMaterialId) + mat -> mat.getResourceLocation().toString()) .register(); container.objectMapperBuilder("oreprefix", OrePrefix.class) @@ -313,38 +305,6 @@ public void onCompatLoaded(GroovyContainer container) { ExpansionHelper.mixinMethod(FluidBuilder.class, GroovyExpansions.class, "acidic"); } - public static Result parseMaterial(String s, Object... args) { - String name; - MaterialRegistry reg; - int i = s.indexOf(':'); - if (i < 0) { - if (args.length > 0 && args[0] instanceof String n) { - name = n; - reg = MaterialRegistryManager.getInstance().getRegistry(s); - } else { - name = s; - reg = materialRegistry; - } - } else { - name = s.substring(i + 1); - reg = MaterialRegistryManager.getInstance().getRegistry(s.substring(0, i)); - } - Material mat = reg.getObject(name); - if (mat == null && reg != MaterialRegistryManager.getInstance().getDefaultRegistry()) { - mat = MaterialRegistryManager.getInstance().getDefaultRegistry().getObject(name); - } - if (mat != null) return Result.some(mat); - return Result.error(); - } - - private static String getMaterialId(Material mat) { - if (mat.getRegistry() == MaterialRegistryManager.getInstance().getDefaultRegistry() || - mat.getRegistry() == materialRegistry) { - return mat.getResourceLocation().getPath(); - } - return mat.getResourceLocation().toString(); - } - protected static boolean checkFrozen(String description) { if (!GregTechAPI.materialManager.canModifyMaterials()) { GroovyLog.get().error("Cannot {} now, must be done in preInit loadStage and material event", description);