From 457ad26e9018cccc4c5f294601c97687a44c1356 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Thu, 13 Mar 2025 17:43:13 +0100 Subject: [PATCH 1/8] fallback mod container --- .../mods/BasicGroovyPropertyContainer.java | 72 +++++++++++++++++++ .../compat/mods/GroovyPropertyContainer.java | 2 +- .../groovyscript/compat/mods/ModSupport.java | 16 ++++- 3 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java new file mode 100644 index 000000000..e9589ccbe --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java @@ -0,0 +1,72 @@ +package com.cleanroommc.groovyscript.compat.mods; + +import com.google.common.collect.AbstractIterator; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; +import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; +import net.minecraftforge.fml.common.registry.ForgeRegistries; + +import java.util.Iterator; + +public class BasicGroovyPropertyContainer { + + private ModContainer container; + private Iterable items; + + public BasicGroovyPropertyContainer(ModContainer container) { + this.container = container; + } + + public BasicGroovyPropertyContainer() {} + + void initialize(String owner) { + this.container = Loader.instance().getIndexedModList().get(owner); + if (this.container == null) { + throw new IllegalStateException("Can't create property container for unloaded mod!"); + } + } + + public Iterable getAllItems() { + if (this.items == null) { + this.items = () -> new AbstractIterator<>() { + + private final Iterator iterator = ForgeRegistries.ITEMS.iterator(); + private final NonNullList currentStacks = NonNullList.create(); + private int i = 0; + + @Override + protected ItemStack computeNext() { + while (i >= currentStacks.size()) { + if (!iterator.hasNext()) { + return endOfData(); + } + currentStacks.clear(); + iterator.next().getSubItems(CreativeTabs.SEARCH, currentStacks); + i = 0; + } + return currentStacks.get(i++); + } + }; + } + return this.items; + } + + public ModContainer getContainer() { + return container; + } + + public String getId() { + return this.container.getModId(); + } + + public String getName() { + return this.container.getName(); + } + + public String getVersion() { + return this.container.getVersion(); + } +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java index 7f2ce94ad..cbcb49463 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java @@ -15,7 +15,7 @@ import java.util.Collections; import java.util.Map; -public class GroovyPropertyContainer { +public class GroovyPropertyContainer extends BasicGroovyPropertyContainer { private final Map properties = new Object2ObjectOpenHashMap<>(); private final Map view = Collections.unmodifiableMap(properties); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index 207bad668..426fca964 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -66,9 +66,11 @@ import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.TinkersConstruct; import com.cleanroommc.groovyscript.compat.mods.woot.Woot; import com.cleanroommc.groovyscript.sandbox.expand.ExpansionHelper; +import com.google.common.base.Suppliers; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import net.minecraftforge.fml.common.Loader; +import net.minecraftforge.fml.common.ModContainer; import net.minecraftforge.fml.common.discovery.ASMDataTable; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -222,7 +224,9 @@ public static void init() { for (GroovyContainer container : containerList) { if (container.isLoaded()) { container.onCompatLoaded(container); - container.get().initialize(container); + GroovyPropertyContainer propertyContainer = container.get(); + propertyContainer.initialize(container); + propertyContainer.initialize(container.getModId()); ExpansionHelper.mixinConstProperty(ModSupport.class, container.getModId(), container.get(), false); for (String s : container.getAliases()) { if (!container.getModId().equals(s)) { @@ -231,6 +235,16 @@ public static void init() { } } } + for (ModContainer container : Loader.instance().getModList()) { + if (!containers.containsKey(container.getModId())) { + ExpansionHelper.mixinProperty(ModSupport.class, + container.getModId(), + BasicGroovyPropertyContainer.class, + Suppliers.memoize(() -> new BasicGroovyPropertyContainer(container)), + null, + false); + } + } } public @NotNull GroovyContainer getContainer(String mod) { From 555dfb4822a28d57549867b90619f9dce92022f7 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Fri, 14 Mar 2025 09:19:50 +0100 Subject: [PATCH 2/8] for item iterator --- examples/postInit/custom/vanilla.groovy | 4 ++++ .../compat/mods/BasicGroovyPropertyContainer.java | 9 ++++++++- .../cleanroommc/groovyscript/compat/mods/ModSupport.java | 6 +++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/examples/postInit/custom/vanilla.groovy b/examples/postInit/custom/vanilla.groovy index 88e7d2ae5..68386a577 100644 --- a/examples/postInit/custom/vanilla.groovy +++ b/examples/postInit/custom/vanilla.groovy @@ -21,6 +21,10 @@ log.info(ore_iron >> (item_iron * 3)) // false println file.path }*/ +for (var stack in mods.theoneprobe.allItems) { + log.info stack +} + // Crafting recipes are typically created via recipe builder, but also have shorthand versions for some common uses. // Here are a series of examples, with the shorthand and corresponding recipe builder: diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java index e9589ccbe..d3c2c85cd 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java @@ -43,8 +43,15 @@ protected ItemStack computeNext() { if (!iterator.hasNext()) { return endOfData(); } + Item item = iterator.next(); + while (!item.getRegistryName().getNamespace().equals(BasicGroovyPropertyContainer.this.container.getModId())) { + if (!iterator.hasNext()) { + return endOfData(); + } + item = iterator.next(); + } currentStacks.clear(); - iterator.next().getSubItems(CreativeTabs.SEARCH, currentStacks); + item.getSubItems(CreativeTabs.SEARCH, currentStacks); i = 0; } return currentStacks.get(i++); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index 426fca964..3f591d01c 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -236,7 +236,7 @@ public static void init() { } } for (ModContainer container : Loader.instance().getModList()) { - if (!containers.containsKey(container.getModId())) { + if (!hasExplicitCompatFor(container.getModId())) { ExpansionHelper.mixinProperty(ModSupport.class, container.getModId(), BasicGroovyPropertyContainer.class, @@ -258,6 +258,10 @@ public boolean hasCompatFor(String mod) { return containers.containsKey(mod); } + public static boolean hasExplicitCompatFor(String mod) { + return containers.containsKey(mod); + } + public static boolean isFrozen() { return frozen; } From e88628e0500511e44e6a2807261192807949222d Mon Sep 17 00:00:00 2001 From: brachy84 Date: Fri, 14 Mar 2025 09:33:30 +0100 Subject: [PATCH 3/8] make ingredient instead of iterable --- .../mods/BasicGroovyPropertyContainer.java | 43 +++++++------------ .../groovyscript/helper/GroovyHelper.java | 11 +++++ 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java index d3c2c85cd..81631a6c7 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java @@ -1,5 +1,6 @@ package com.cleanroommc.groovyscript.compat.mods; +import com.cleanroommc.groovyscript.helper.ingredient.ItemsIngredient; import com.google.common.collect.AbstractIterator; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; @@ -9,12 +10,14 @@ import net.minecraftforge.fml.common.ModContainer; import net.minecraftforge.fml.common.registry.ForgeRegistries; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; public class BasicGroovyPropertyContainer { private ModContainer container; - private Iterable items; + private ItemsIngredient items; public BasicGroovyPropertyContainer(ModContainer container) { this.container = container; @@ -29,35 +32,19 @@ void initialize(String owner) { } } - public Iterable getAllItems() { + public ItemsIngredient getAllItems() { if (this.items == null) { - this.items = () -> new AbstractIterator<>() { - - private final Iterator iterator = ForgeRegistries.ITEMS.iterator(); - private final NonNullList currentStacks = NonNullList.create(); - private int i = 0; - - @Override - protected ItemStack computeNext() { - while (i >= currentStacks.size()) { - if (!iterator.hasNext()) { - return endOfData(); - } - Item item = iterator.next(); - while (!item.getRegistryName().getNamespace().equals(BasicGroovyPropertyContainer.this.container.getModId())) { - if (!iterator.hasNext()) { - return endOfData(); - } - item = iterator.next(); - } - currentStacks.clear(); - item.getSubItems(CreativeTabs.SEARCH, currentStacks); - i = 0; - } - return currentStacks.get(i++); + List items = new ArrayList<>(); + NonNullList stacks = NonNullList.create(); + for (Item item : ForgeRegistries.ITEMS) { + if (item.getRegistryName().getNamespace().equals(container.getModId())) { + item.getSubItems(CreativeTabs.SEARCH, stacks); + items.addAll(stacks); + stacks.clear(); } - }; - } + } + this.items = new ItemsIngredient(items); + } return this.items; } diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java b/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java index 2c7533c76..0a5d44bef 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java @@ -2,13 +2,16 @@ import com.cleanroommc.groovyscript.GroovyScript; import com.cleanroommc.groovyscript.api.GroovyBlacklist; +import com.cleanroommc.groovyscript.helper.ingredient.ItemsIngredient; import com.cleanroommc.groovyscript.packmode.Packmode; import com.cleanroommc.groovyscript.registry.ReloadableRegistryManager; import com.cleanroommc.groovyscript.sandbox.LoadStage; +import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Loader; import java.io.File; +import java.util.Collection; public class GroovyHelper { @@ -102,4 +105,12 @@ public static GroovyFile file(GroovyFile parent, String child) { public static GroovyFile file(String... parts) { return new GroovyFile(parts); } + + public static ItemsIngredient items(ItemStack... stacks) { + return new ItemsIngredient(stacks); + } + + public static ItemsIngredient items(Collection stacks) { + return new ItemsIngredient(stacks); + } } From 6dea48ff7ee3d0c7b6e80716712f614e034a911c Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sat, 15 Mar 2025 08:37:57 +0100 Subject: [PATCH 4/8] reviews --- ...rtyContainer.java => ForgeModWrapper.java} | 8 +-- .../compat/mods/GroovyPropertyContainer.java | 2 +- .../groovyscript/compat/mods/ModSupport.java | 13 ++-- .../compat/vanilla/VanillaModule.java | 62 +++++-------------- .../groovyscript/helper/GroovyHelper.java | 8 --- .../registry/ReloadableRegistryManager.java | 2 - 6 files changed, 26 insertions(+), 69 deletions(-) rename src/main/java/com/cleanroommc/groovyscript/compat/mods/{BasicGroovyPropertyContainer.java => ForgeModWrapper.java} (88%) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ForgeModWrapper.java similarity index 88% rename from src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java rename to src/main/java/com/cleanroommc/groovyscript/compat/mods/ForgeModWrapper.java index 81631a6c7..93ed5b010 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/BasicGroovyPropertyContainer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ForgeModWrapper.java @@ -1,7 +1,6 @@ package com.cleanroommc.groovyscript.compat.mods; import com.cleanroommc.groovyscript.helper.ingredient.ItemsIngredient; -import com.google.common.collect.AbstractIterator; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -11,19 +10,18 @@ import net.minecraftforge.fml.common.registry.ForgeRegistries; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; -public class BasicGroovyPropertyContainer { +public class ForgeModWrapper { private ModContainer container; private ItemsIngredient items; - public BasicGroovyPropertyContainer(ModContainer container) { + public ForgeModWrapper(ModContainer container) { this.container = container; } - public BasicGroovyPropertyContainer() {} + public ForgeModWrapper() {} void initialize(String owner) { this.container = Loader.instance().getIndexedModList().get(owner); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java index cbcb49463..80dacb468 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/GroovyPropertyContainer.java @@ -15,7 +15,7 @@ import java.util.Collections; import java.util.Map; -public class GroovyPropertyContainer extends BasicGroovyPropertyContainer { +public class GroovyPropertyContainer extends ForgeModWrapper { private final Map properties = new Object2ObjectOpenHashMap<>(); private final Map view = Collections.unmodifiableMap(properties); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index 3f591d01c..58f828c4d 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -65,6 +65,7 @@ import com.cleanroommc.groovyscript.compat.mods.thermalexpansion.ThermalExpansion; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.TinkersConstruct; import com.cleanroommc.groovyscript.compat.mods.woot.Woot; +import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.sandbox.expand.ExpansionHelper; import com.google.common.base.Suppliers; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -87,6 +88,8 @@ public class ModSupport { public static final ModSupport INSTANCE = new ModSupport(); // Just for Binding purposes + public static final GroovyContainer MINECRAFT = new InternalModContainer<>("minecraft", "Minecraft", VanillaModule::new, "mc"); + public static final GroovyContainer ACTUALLY_ADDITIONS = new InternalModContainer<>("actuallyadditions", "Actually Additions", ActuallyAdditions::new, "aa"); public static final GroovyContainer ADDITIONAL_ENCHANTED_MINER = new InternalModContainer<>("quarryplus", "Additional Enchanted Miner", AdditionalEnchantedMiner::new); public static final GroovyContainer ADVANCED_MORTARS = new InternalModContainer<>("advancedmortars", "Advanced Mortars", AdvancedMortars::new); @@ -236,11 +239,11 @@ public static void init() { } } for (ModContainer container : Loader.instance().getModList()) { - if (!hasExplicitCompatFor(container.getModId())) { + if (!INSTANCE.hasCompatFor(container.getModId())) { ExpansionHelper.mixinProperty(ModSupport.class, container.getModId(), - BasicGroovyPropertyContainer.class, - Suppliers.memoize(() -> new BasicGroovyPropertyContainer(container)), + ForgeModWrapper.class, + Suppliers.memoize(() -> new ForgeModWrapper(container)), null, false); } @@ -258,10 +261,6 @@ public boolean hasCompatFor(String mod) { return containers.containsKey(mod); } - public static boolean hasExplicitCompatFor(String mod) { - return containers.containsKey(mod); - } - public static boolean isFrozen() { return frozen; } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java index 74ee1c544..f64b116c3 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java @@ -1,35 +1,32 @@ package com.cleanroommc.groovyscript.compat.vanilla; import com.cleanroommc.groovyscript.GroovyScript; -import com.cleanroommc.groovyscript.api.GroovyBlacklist; -import com.cleanroommc.groovyscript.api.IScriptReloadable; import com.cleanroommc.groovyscript.compat.content.Content; import com.cleanroommc.groovyscript.compat.inworldcrafting.InWorldCrafting; import com.cleanroommc.groovyscript.compat.loot.Loot; +import com.cleanroommc.groovyscript.compat.mods.GroovyContainer; import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer; import com.cleanroommc.groovyscript.sandbox.expand.ExpansionHelper; import net.minecraft.command.ICommandSender; import net.minecraft.item.ItemStack; -import java.util.Collection; -import java.util.Collections; +public class VanillaModule extends GroovyPropertyContainer { -public class VanillaModule extends GroovyPropertyContainer implements IScriptReloadable { + public final Crafting crafting = new Crafting(); + public final Furnace furnace = new Furnace(); + public final Loot loot = new Loot(); + public final OreDict oreDict = new OreDict(); + public final Player player = new Player(); + public final Content content = new Content(); + public final Rarity rarity = new Rarity(); + public final InWorldCrafting inWorldCrafting = new InWorldCrafting(); + public final Command command = new Command(); + public final GameRule gameRule = new GameRule(); - public static final VanillaModule INSTANCE = new VanillaModule(); - - public static final Crafting crafting = new Crafting(); - public static final Furnace furnace = new Furnace(); - public static final Loot loot = new Loot(); - public static final OreDict oreDict = new OreDict(); - public static final Player player = new Player(); - public static final Content content = new Content(); - public static final Rarity rarity = new Rarity(); - public static final InWorldCrafting inWorldCrafting = new InWorldCrafting(); - public static final Command command = new Command(); - public static final GameRule gameRule = new GameRule(); - - public static void initializeBinding() { + @Override + public void initialize(GroovyContainer owner) { + GroovyScript.getSandbox().registerBinding("Minecraft", this); + // maybe remove some of these as globals? GroovyScript.getSandbox().registerBinding(crafting); GroovyScript.getSandbox().registerBinding(furnace); GroovyScript.getSandbox().registerBinding(loot); @@ -44,31 +41,4 @@ public static void initializeBinding() { ExpansionHelper.mixinClass(ItemStack.class, ItemStackExpansion.class); ExpansionHelper.mixinClass(ICommandSender.class, CommandSenderExpansion.class); } - - @Override - @GroovyBlacklist - public void onReload() { - crafting.onReload(); - furnace.onReload(); - loot.onReload(); - oreDict.onReload(); - rarity.onReload(); - player.onReload(); - inWorldCrafting.onReload(); - command.onReload(); - gameRule.onReload(); - } - - @Override - @GroovyBlacklist - public void afterScriptLoad() { - furnace.afterScriptLoad(); - loot.afterScriptLoad(); - inWorldCrafting.afterScriptLoad(); - } - - @Override - public Collection getAliases() { - return Collections.emptyList(); - } } diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java b/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java index 0a5d44bef..14210b66f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java @@ -105,12 +105,4 @@ public static GroovyFile file(GroovyFile parent, String child) { public static GroovyFile file(String... parts) { return new GroovyFile(parts); } - - public static ItemsIngredient items(ItemStack... stacks) { - return new ItemsIngredient(stacks); - } - - public static ItemsIngredient items(Collection stacks) { - return new ItemsIngredient(stacks); - } } diff --git a/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java b/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java index 647a5ec44..99bce5f9f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java +++ b/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java @@ -76,7 +76,6 @@ public static void init() { @ApiStatus.Internal public static void onReload() { GroovyScript.reloadRunConfig(false); - VanillaModule.INSTANCE.onReload(); ModSupport.getAllContainers() .stream() .filter(GroovyContainer::isLoaded) @@ -103,7 +102,6 @@ public static void afterScriptRun() { .filter(IScriptReloadable.class::isInstance) .map(IScriptReloadable.class::cast) .forEach(IScriptReloadable::afterScriptLoad); - VanillaModule.INSTANCE.afterScriptLoad(); unfreezeForgeRegistries(); } From 8c3883458d2e4ff8354cea713eb979cade31e4a1 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sat, 15 Mar 2025 08:38:39 +0100 Subject: [PATCH 5/8] [i] operator for item stacks, make OreDictIngredient extend ItemsIngredient, improvements --- .../groovyscript/api/IIngredient.java | 9 +++ .../helper/ingredient/ItemsIngredient.java | 33 ++++++-- .../helper/ingredient/OreDictIngredient.java | 79 ++++--------------- .../ingredient/OreDictWildcardIngredient.java | 16 ++-- .../mapper/ObjectMapperManager.java | 2 +- 5 files changed, 60 insertions(+), 79 deletions(-) diff --git a/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java b/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java index 6dccc43a0..30cb72202 100644 --- a/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java +++ b/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java @@ -51,6 +51,15 @@ default boolean isCase(ItemStack ingredient) { return ingredient != null && test(ingredient); } + // [i] operator + default ItemStack getAt(int index) { + return getMatchingStacks()[index]; + } + + default ItemStack getFirst() { + return getAt(0); + } + @Override default IIngredient withAmount(int amount) { IIngredient iIngredientStack = exactCopy(); diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/ItemsIngredient.java b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/ItemsIngredient.java index d0b0b75a6..25180b59e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/ItemsIngredient.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/ItemsIngredient.java @@ -1,7 +1,7 @@ package com.cleanroommc.groovyscript.helper.ingredient; import com.cleanroommc.groovyscript.api.IIngredient; -import com.google.common.collect.Iterators; +import com.google.common.collect.AbstractIterator; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraftforge.oredict.OreDictionary; @@ -17,6 +17,8 @@ public class ItemsIngredient extends IngredientBase implements Iterable itemStacks) { + setItemStacks(itemStacks); + } + + protected final void setItemStacks(Collection itemStacks) { this.itemStacks.addAll(itemStacks); this.itemStacks.trim(); this.itemStacks.copyElements(); @@ -47,13 +53,18 @@ public Ingredient toMcIngredient() { public ItemStack[] getMatchingStacks() { ItemStack[] stacks = new ItemStack[itemStacks.size()]; for (int i = 0; i < stacks.length; i++) { - ItemStack stack = itemStacks.get(i).copy(); - stack.setCount(getAmount()); - stacks[i] = stack; + stacks[i] = getAt(i); } return stacks; } + @Override + public ItemStack getAt(int index) { + ItemStack stack = this.itemStacks.get(index).copy(); + stack.setCount(getAmount()); + return stack; + } + @Override public int getAmount() { return itemStacks.isEmpty() ? 0 : amount; @@ -74,12 +85,22 @@ public boolean matches(ItemStack itemStack) { return false; } - public List getItemStacks() { + // protected since modifying un-copied stack directly can result in unexpected results + protected List getItemStacks() { return Collections.unmodifiableList(this.itemStacks); } @Override public @NotNull Iterator iterator() { - return Iterators.unmodifiableIterator(this.itemStacks.iterator()); + return new AbstractIterator<>() { + + private int index = 0; + + @Override + protected ItemStack computeNext() { + if (index >= itemStacks.size()) return endOfData(); + return getAt(index++); + } + }; } } diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictIngredient.java b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictIngredient.java index 77ab97ab7..8c6513ed5 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictIngredient.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictIngredient.java @@ -1,92 +1,46 @@ package com.cleanroommc.groovyscript.helper.ingredient; -import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; +import com.cleanroommc.groovyscript.compat.mods.ModSupport; import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.Ingredient; import net.minecraftforge.oredict.OreDictionary; -import org.jetbrains.annotations.NotNull; -import java.util.Arrays; -import java.util.Iterator; import java.util.List; -public class OreDictIngredient extends IngredientBase implements Iterable { +public class OreDictIngredient extends ItemsIngredient implements Iterable { private final String oreDict; - private int count = 1; public OreDictIngredient(String oreDict) { + super(OreDictionary.getOres(oreDict)); this.oreDict = oreDict; } - public String getOreDict() { - return oreDict; - } - - @Override - public int getAmount() { - return count; + // fast copy + private OreDictIngredient(String oreDict, List itemStacks) { + super(itemStacks); + this.oreDict = oreDict; } - @Override - public void setAmount(int amount) { - count = Math.max(0, amount); + public String getOreDict() { + return oreDict; } @Override public OreDictIngredient exactCopy() { - OreDictIngredient oreDictIngredient = new OreDictIngredient(this.oreDict); - oreDictIngredient.setAmount(this.count); + OreDictIngredient oreDictIngredient = new OreDictIngredient(this.oreDict, getItemStacks()); + oreDictIngredient.setAmount(getAmount()); oreDictIngredient.transformer = transformer; oreDictIngredient.matchCondition = matchCondition; return oreDictIngredient; } - @Override - public boolean matches(ItemStack stack) { - // TODO this sucks - if (IngredientHelper.isEmpty(stack)) return false; - for (int id : OreDictionary.getOreIDs(stack)) { - String oreName = OreDictionary.getOreName(id); - if (oreDict.equals(oreName)) { - return true; - } - } - return false; - } - - @Override - public Ingredient toMcIngredient() { - return Ingredient.fromStacks(getMatchingStacks()); - } - - @Override - public ItemStack[] getMatchingStacks() { - List stacks = OreDictionary.getOres(this.oreDict); - ItemStack[] copies = new ItemStack[stacks.size()]; - for (int i = 0; i < stacks.size(); i++) { - ItemStack stack = stacks.get(i).copy(); - stack.setCount(getAmount()); - copies[i] = stack; - } - return copies; - } - - public ItemStack getFirst() { - return getMatchingStacks()[0]; - } - - public ItemStack getAt(int index) { - return getMatchingStacks()[index]; - } - @Override public String toString() { - return "OreDictIngredient{ " + oreDict + " } * " + count; + return "OreDictIngredient{ " + oreDict + " } * " + getAmount(); } public void add(ItemStack itemStack) { - VanillaModule.oreDict.add(this.oreDict, itemStack); + ModSupport.MINECRAFT.get().oreDict.add(this.oreDict, itemStack); } public void add(ItemStack... itemStacks) { @@ -106,7 +60,7 @@ public void add(OreDictIngredient ingredient) { } public void remove(ItemStack itemStack) { - VanillaModule.oreDict.remove(this.oreDict, itemStack); + ModSupport.MINECRAFT.get().oreDict.remove(this.oreDict, itemStack); } public void remove(ItemStack... itemStacks) { @@ -120,9 +74,4 @@ public void remove(Iterable itemStacks) { remove(itemStack); } } - - @Override - public @NotNull Iterator iterator() { - return Arrays.asList(getMatchingStacks()).listIterator(); - } } diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictWildcardIngredient.java b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictWildcardIngredient.java index ca7dd62e4..3dcd0295a 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictWildcardIngredient.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/ingredient/OreDictWildcardIngredient.java @@ -17,7 +17,14 @@ public class OreDictWildcardIngredient extends ItemsIngredient { private final List matchingOreDictionaries = new ArrayList<>(); public final List ores = Collections.unmodifiableList(this.matchingOreDictionaries); - public static OreDictWildcardIngredient of(String oreDict) { + private OreDictWildcardIngredient(String oreDict, List matchingOreDictionaries, List itemStacks) { + super(itemStacks); + this.oreDict = oreDict; + this.matchingOreDictionaries.addAll(matchingOreDictionaries); + } + + public OreDictWildcardIngredient(String oreDict) { + this.oreDict = oreDict; List matchingOreDictionaries = new ArrayList<>(); List stacks = new ArrayList<>(); Pattern pattern = Pattern.compile(oreDict.replace("*", ".*")); @@ -30,13 +37,8 @@ public static OreDictWildcardIngredient of(String oreDict) { } } } - return new OreDictWildcardIngredient(oreDict, matchingOreDictionaries, stacks); - } - - public OreDictWildcardIngredient(String oreDict, List matchingOreDictionaries, List itemStacks) { - super(itemStacks); - this.oreDict = oreDict; this.matchingOreDictionaries.addAll(matchingOreDictionaries); + setItemStacks(stacks); } public String getOreDict() { diff --git a/src/main/java/com/cleanroommc/groovyscript/mapper/ObjectMapperManager.java b/src/main/java/com/cleanroommc/groovyscript/mapper/ObjectMapperManager.java index 219411d6e..65220e86e 100644 --- a/src/main/java/com/cleanroommc/groovyscript/mapper/ObjectMapperManager.java +++ b/src/main/java/com/cleanroommc/groovyscript/mapper/ObjectMapperManager.java @@ -84,7 +84,7 @@ public static void init() { .docOfType("resource location") .register(); ObjectMapper.builder("ore", IIngredient.class) - .parser((s, args) -> s.contains(WILDCARD) ? Result.some(OreDictWildcardIngredient.of(s)) : Result.some(new OreDictIngredient(s))) + .parser((s, args) -> s.contains(WILDCARD) ? Result.some(new OreDictWildcardIngredient(s)) : Result.some(new OreDictIngredient(s))) .completerOfNames(OreDictionaryAccessor::getIdToName) .docOfType("ore dict entry") .textureBinder(TextureBinder.of(i -> Arrays.asList(i.getMatchingStacks()), TextureBinder.ofItem(), i -> String.format("![](${item('%s')}) %s", i.getItem().getRegistryName(), i.getDisplayName()))) From 5f936c645d026df32365e75a351481c67577cefb Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sat, 15 Mar 2025 09:26:20 +0100 Subject: [PATCH 6/8] fixes & allow range in [] op --- examples/postInit/custom/vanilla.groovy | 6 +- .../groovyscript/GroovyScript.java | 1 - .../groovyscript/api/IIngredient.java | 21 +++++++ .../compat/mods/MinecraftModContainer.java | 60 +++++++++++++++++++ .../groovyscript/compat/mods/ModSupport.java | 2 +- .../compat/vanilla/VanillaModule.java | 24 ++++---- 6 files changed, 99 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java diff --git a/examples/postInit/custom/vanilla.groovy b/examples/postInit/custom/vanilla.groovy index 68386a577..4c3405ebc 100644 --- a/examples/postInit/custom/vanilla.groovy +++ b/examples/postInit/custom/vanilla.groovy @@ -21,7 +21,7 @@ log.info(ore_iron >> (item_iron * 3)) // false println file.path }*/ -for (var stack in mods.theoneprobe.allItems) { +for (var stack in mods.minecraft.allItems[5..12]) { log.info stack } @@ -29,13 +29,13 @@ for (var stack in mods.theoneprobe.allItems) { // Here are a series of examples, with the shorthand and corresponding recipe builder: //crafting.addShaped(item('minecraft:gold_block'), [[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')],[null, null, null],[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')]]) -crafting.shapedBuilder() +mods.minecraft.crafting.shapedBuilder() .output(item('minecraft:gold_block')) .shape([[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')],[null, null, null],[item('minecraft:gold_ingot'),item('minecraft:gold_ingot'),item('minecraft:gold_ingot')]]) .register() //crafting.addShaped('gold_v_to_clay', item('minecraft:clay'), [[item('minecraft:gold_ingot'),null,item('minecraft:gold_ingot')],[null,item('minecraft:gold_ingot'),null]]) -crafting.shapedBuilder() +minecraft.crafting.shapedBuilder() .name('gold_v_to_clay') .output(item('minecraft:clay')) .shape([[item('minecraft:gold_ingot'),null,item('minecraft:gold_ingot')],[null,item('minecraft:stone_pickaxe').transformDamage(2).whenAnyDamage(),null]]) diff --git a/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java b/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java index 52d0470d5..bc0b260a4 100644 --- a/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java +++ b/src/main/java/com/cleanroommc/groovyscript/GroovyScript.java @@ -165,7 +165,6 @@ public static void initializeGroovyPreInit() { // called via mixin in between construction and fml pre init ObjectMapperManager.init(); StandardInfoParserRegistry.init(); - VanillaModule.initializeBinding(); ModSupport.init(); for (ObjectMapper goh : ObjectMapperManager.getObjectMappers()) { getSandbox().registerBinding(goh); diff --git a/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java b/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java index 30cb72202..8592ed148 100644 --- a/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java +++ b/src/main/java/com/cleanroommc/groovyscript/api/IIngredient.java @@ -1,12 +1,15 @@ package com.cleanroommc.groovyscript.api; import com.cleanroommc.groovyscript.helper.ingredient.OrIngredient; +import com.google.common.collect.AbstractIterator; +import groovy.lang.IntRange; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.Ingredient; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.fluids.FluidStack; import org.jetbrains.annotations.Nullable; +import java.util.Iterator; import java.util.function.Predicate; /** @@ -53,6 +56,8 @@ default boolean isCase(ItemStack ingredient) { // [i] operator default ItemStack getAt(int index) { + ItemStack[] stacks = getMatchingStacks(); + while (index < 0) index += stacks.length; return getMatchingStacks()[index]; } @@ -60,6 +65,22 @@ default ItemStack getFirst() { return getAt(0); } + // allows using a range in [] operator like [5..12] + default Iterable getAt(IntRange range) { + return () -> new AbstractIterator<>() { + + private final Iterator it = range.iterator(); + + @Override + protected ItemStack computeNext() { + if (it.hasNext()) { + return getAt(it.next()); + } + return endOfData(); + } + }; + } + @Override default IIngredient withAmount(int amount) { IIngredient iIngredientStack = exactCopy(); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java new file mode 100644 index 000000000..136b444ab --- /dev/null +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java @@ -0,0 +1,60 @@ +package com.cleanroommc.groovyscript.compat.mods; + +import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.Collections; +import java.util.Set; + +public final class MinecraftModContainer extends GroovyContainer { + + private final String modId = "minecraft"; + private final String containerName = "Minecraft"; + private final Supplier modProperty; + private final Collection aliases; + + MinecraftModContainer() { + this.modProperty = Suppliers.memoize(() -> { + VanillaModule t = VanillaModule.INSTANCE; + t.addPropertyFieldsOf(t, false); + return t; + }); + Set aliasSet = new ObjectOpenHashSet<>(); + aliasSet.add("mc"); + aliasSet.add(modId); + this.aliases = Collections.unmodifiableSet(aliasSet); + ModSupport.INSTANCE.registerContainer(this); + } + + @Override + public boolean isLoaded() { + return true; + } + + @Override + public @NotNull Collection getAliases() { + return aliases; + } + + @Override + public VanillaModule get() { + return modProperty.get(); + } + + @Override + public @NotNull String getModId() { + return modId; + } + + @Override + public @NotNull String getContainerName() { + return containerName; + } + + @Override + public void onCompatLoaded(GroovyContainer container) {} +} diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index 58f828c4d..817d1a038 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -88,7 +88,7 @@ public class ModSupport { public static final ModSupport INSTANCE = new ModSupport(); // Just for Binding purposes - public static final GroovyContainer MINECRAFT = new InternalModContainer<>("minecraft", "Minecraft", VanillaModule::new, "mc"); + public static final MinecraftModContainer MINECRAFT = new MinecraftModContainer(); public static final GroovyContainer ACTUALLY_ADDITIONS = new InternalModContainer<>("actuallyadditions", "Actually Additions", ActuallyAdditions::new, "aa"); public static final GroovyContainer ADDITIONAL_ENCHANTED_MINER = new InternalModContainer<>("quarryplus", "Additional Enchanted Miner", AdditionalEnchantedMiner::new); diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java index f64b116c3..a4e80ae9f 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java @@ -12,16 +12,20 @@ public class VanillaModule extends GroovyPropertyContainer { - public final Crafting crafting = new Crafting(); - public final Furnace furnace = new Furnace(); - public final Loot loot = new Loot(); - public final OreDict oreDict = new OreDict(); - public final Player player = new Player(); - public final Content content = new Content(); - public final Rarity rarity = new Rarity(); - public final InWorldCrafting inWorldCrafting = new InWorldCrafting(); - public final Command command = new Command(); - public final GameRule gameRule = new GameRule(); + public static final VanillaModule INSTANCE = new VanillaModule(); + + public static final Crafting crafting = new Crafting(); + public static final Furnace furnace = new Furnace(); + public static final Loot loot = new Loot(); + public static final OreDict oreDict = new OreDict(); + public static final Player player = new Player(); + public static final Content content = new Content(); + public static final Rarity rarity = new Rarity(); + public static final InWorldCrafting inWorldCrafting = new InWorldCrafting(); + public static final Command command = new Command(); + public static final GameRule gameRule = new GameRule(); + + private VanillaModule() {} @Override public void initialize(GroovyContainer owner) { From 4947231d13d91c13a470a476970644870ecb53bf Mon Sep 17 00:00:00 2001 From: brachy84 Date: Sat, 15 Mar 2025 09:30:46 +0100 Subject: [PATCH 7/8] spotless --- .../groovyscript/compat/mods/ForgeModWrapper.java | 2 +- .../groovyscript/compat/mods/ModSupport.java | 14 +++++++------- .../groovyscript/helper/GroovyHelper.java | 3 --- .../registry/ReloadableRegistryManager.java | 1 - 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ForgeModWrapper.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ForgeModWrapper.java index 93ed5b010..21cd6cf42 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ForgeModWrapper.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ForgeModWrapper.java @@ -42,7 +42,7 @@ public ItemsIngredient getAllItems() { } } this.items = new ItemsIngredient(items); - } + } return this.items; } diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java index ff9d922be..6f82287ec 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/ModSupport.java @@ -66,7 +66,6 @@ import com.cleanroommc.groovyscript.compat.mods.thermalexpansion.ThermalExpansion; import com.cleanroommc.groovyscript.compat.mods.tinkersconstruct.TinkersConstruct; import com.cleanroommc.groovyscript.compat.mods.woot.Woot; -import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.sandbox.expand.ExpansionHelper; import com.google.common.base.Suppliers; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -242,12 +241,13 @@ public static void init() { } for (ModContainer container : Loader.instance().getModList()) { if (!INSTANCE.hasCompatFor(container.getModId())) { - ExpansionHelper.mixinProperty(ModSupport.class, - container.getModId(), - ForgeModWrapper.class, - Suppliers.memoize(() -> new ForgeModWrapper(container)), - null, - false); + ExpansionHelper.mixinProperty( + ModSupport.class, + container.getModId(), + ForgeModWrapper.class, + Suppliers.memoize(() -> new ForgeModWrapper(container)), + null, + false); } } } diff --git a/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java b/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java index 14210b66f..2c7533c76 100644 --- a/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java +++ b/src/main/java/com/cleanroommc/groovyscript/helper/GroovyHelper.java @@ -2,16 +2,13 @@ import com.cleanroommc.groovyscript.GroovyScript; import com.cleanroommc.groovyscript.api.GroovyBlacklist; -import com.cleanroommc.groovyscript.helper.ingredient.ItemsIngredient; import com.cleanroommc.groovyscript.packmode.Packmode; import com.cleanroommc.groovyscript.registry.ReloadableRegistryManager; import com.cleanroommc.groovyscript.sandbox.LoadStage; -import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.Loader; import java.io.File; -import java.util.Collection; public class GroovyHelper { diff --git a/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java b/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java index 99bce5f9f..2d7e68c63 100644 --- a/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java +++ b/src/main/java/com/cleanroommc/groovyscript/registry/ReloadableRegistryManager.java @@ -8,7 +8,6 @@ import com.cleanroommc.groovyscript.compat.mods.GroovyContainer; import com.cleanroommc.groovyscript.compat.mods.GroovyPropertyContainer; import com.cleanroommc.groovyscript.compat.mods.ModSupport; -import com.cleanroommc.groovyscript.compat.vanilla.VanillaModule; import com.cleanroommc.groovyscript.core.mixin.jei.JeiProxyAccessor; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import mezz.jei.Internal; From 27a0f5e8bbbdc61a950340343ea3df3fb61d2123 Mon Sep 17 00:00:00 2001 From: brachy84 Date: Mon, 17 Mar 2025 10:27:12 +0100 Subject: [PATCH 8/8] more --- .../groovyscript/compat/mods/MinecraftModContainer.java | 4 ++-- .../groovyscript/compat/vanilla/VanillaModule.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java b/src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java index 136b444ab..2ed232b79 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/mods/MinecraftModContainer.java @@ -12,8 +12,8 @@ public final class MinecraftModContainer extends GroovyContainer { - private final String modId = "minecraft"; - private final String containerName = "Minecraft"; + private static final String modId = "minecraft"; + private static final String containerName = "Minecraft"; private final Supplier modProperty; private final Collection aliases; diff --git a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java index a4e80ae9f..6a2024fc6 100644 --- a/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java +++ b/src/main/java/com/cleanroommc/groovyscript/compat/vanilla/VanillaModule.java @@ -30,6 +30,7 @@ private VanillaModule() {} @Override public void initialize(GroovyContainer owner) { GroovyScript.getSandbox().registerBinding("Minecraft", this); + GroovyScript.getSandbox().registerBinding("Vanilla", this); // maybe remove some of these as globals? GroovyScript.getSandbox().registerBinding(crafting); GroovyScript.getSandbox().registerBinding(furnace);