From 63c4b94f842e446a94740d46ee127faa0b28d496 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Tue, 18 Aug 2026 10:45:07 +1000 Subject: [PATCH 01/45] docs changes --- RELEASE.md | 36 ------------------- .../Recipe-Logic/Custom-Ingredient.md | 5 ++- .../Other-Topics/Ambiguous-Methods.md | 4 +-- .../Modpacks/Other-Topics/Custom-Coils.md | 34 +++++++++++++++++- .../Modpacks/Other-Topics/Dimension-Icons.md | 34 +++++++----------- docs/content/Modpacks/Other-Topics/index.md | 5 +++ .../gtceu/api/data/DimensionMarker.java | 13 +++++-- 7 files changed, 67 insertions(+), 64 deletions(-) delete mode 100644 RELEASE.md diff --git a/RELEASE.md b/RELEASE.md deleted file mode 100644 index bace457ff08..00000000000 --- a/RELEASE.md +++ /dev/null @@ -1,36 +0,0 @@ -## What's Changed - -### Added -- Compressor recipe for snowballs to snow blocks ([#1969](https://github.com/GregTechCEu/GregTech-Modern/pull/1969)) -- Rubber Wood and Treated Wood boats ([#1980](https://github.com/GregTechCEu/GregTech-Modern/pull/1980)) - -### Fixed -- Coke Oven Hatches are now able to be automated again ([#1948](https://github.com/GregTechCEu/GregTech-Modern/pull/1948)) -- All sounds are now mono-audio (you will no longer be haunted by the global Research Station sound) ([#1966](https://github.com/GregTechCEu/GregTech-Modern/pull/1966)) -- Fixed Large Turbine logic which stopped them from running properly ([#1983](https://github.com/GregTechCEu/GregTech-Modern/pull/1983) and [#2010](https://github.com/GregTechCEu/GregTech-Modern/pull/2010)) -- Machine auto-export will now respect attached filter covers ([#1982](https://github.com/GregTechCEu/GregTech-Modern/pull/1982)) -- Quantum Tanks will no longer void fluids that don't match the stored fluid ([#1976](https://github.com/GregTechCEu/GregTech-Modern/pull/1976)) -- Quantum Chests will now properly drop items if your inventory is full rather than just voiding them ([#1976](https://github.com/GregTechCEu/GregTech-Modern/pull/1976)) -- The Multi Smelter now applies overclocks properly ([#2004](https://github.com/GregTechCEu/GregTech-Modern/pull/2004) and [#2008](https://github.com/GregTechCEu/GregTech-Modern/pull/2008)) -- ME Pattern Buffer Proxies now show a hand animation when opened ([#2005](https://github.com/GregTechCEu/GregTech-Modern/pull/2005)) -- Fixed ME parts not showing tooltips ([#1993](https://github.com/GregTechCEu/GregTech-Modern/pull/1993)) -- Rubber log variants now have the burnable tag ([#1914](https://github.com/GregTechCEu/GregTech-Modern/pull/1914)) -- Fixed solid boilers not being able to burn some vanilla furnace fuels ([#1998](https://github.com/GregTechCEu/GregTech-Modern/pull/1998)) -- Various texture fixes ([#1974](https://github.com/GregTechCEu/GregTech-Modern/pull/1974)) -- Multiblock machines now calculate their tier correctly ([#2019](https://github.com/GregTechCEu/GregTech-Modern/pull/2019)) -- Recipe fixes 🔥 ([#2022](https://github.com/GregTechCEu/GregTech-Modern/pull/2022) and [#2023](https://github.com/GregTechCEu/GregTech-Modern/pull/2023)) -- Other miscellaneous fixes - -### Changed -- **ADDON DEVS:** Recipe Conditions and the GTRegistry class have changed slightly - please take note ([#1955](https://github.com/GregTechCEu/GregTech-Modern/pull/1955)) -- **ADDON DEVS:** We now publish to the official GTCEu Maven - check the updated README for further information -- Chanced outputs for parallel recipes are now deterministic and guaranteed a minimum amount ([#1948](https://github.com/GregTechCEu/GregTech-Modern/pull/1948)) -- The highlight grid for tools and covers will now only appear if a possible interaction exists ([#1949](https://github.com/GregTechCEu/GregTech-Modern/pull/1949)) -- Optical Pipes can now hold covers ([#1953](https://github.com/GregTechCEu/GregTech-Modern/pull/1953)) - - -### Removed -- Covers that have no plan to be implemented have been removed ([#1961](https://github.com/GregTechCEu/GregTech-Modern/pull/1961)) - -\ -**Full Changelog found [here](https://github.com/GregTechCEu/GregTech-Modern/compare/1.20.1-1.4.2...1.20.1-1.4.4)** \ No newline at end of file diff --git a/docs/content/Development/Recipe-Logic/Custom-Ingredient.md b/docs/content/Development/Recipe-Logic/Custom-Ingredient.md index 66b5364e599..425295e1c4d 100644 --- a/docs/content/Development/Recipe-Logic/Custom-Ingredient.md +++ b/docs/content/Development/Recipe-Logic/Custom-Ingredient.md @@ -1,6 +1,9 @@ --- title: "Custom Ingredient" --- +--- +title: "Custom Ingredient" +--- !!! Note Before reading / following this document, it is heavily recommended to have read [Recipe Logic](./Recipe-Logic.md), [Recipe Searching](./Recipe-Searching.md) and [Recipe Execution](./Recipe-Execution.md) first. @@ -132,7 +135,7 @@ public class BonkRecipeCapability extends RecipeCapability { public final static BonkRecipeCapability CAP = new BonkRecipeCapability(); protected BonkRecipeCapability() { - super(new ResourceLocation("MOD_ID", "bonk"), 0x777777, false, 5, BonkIngredient.Serializer.INSTANCE); + super(ResourceLocation.fromNamespaceAndPath("MOD_ID", "bonk"), 0x777777, false, 5, BonkIngredient.Serializer.INSTANCE); } @Override diff --git a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md index 53dceeb592b..c82ea46e5fd 100644 --- a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md +++ b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md @@ -61,7 +61,7 @@ For example, when you do GTCEuStartupEvents.registry("gtceu:recipe_type", event => { event.create("unboxinator") .setProgressBar( - new ResourceTexture("kubejs:textures/gui/progress_bar/progress_bar_stone_oreifier.png"), + "kubejs:textures/gui/progress_bar/progress_bar_stone_oreifier.png", FillDirection.LEFT_TO_RIGHT ) // Rest of the recipe type @@ -90,7 +90,7 @@ or GTCEuStartupEvents.registry("gtceu:recipe_type", event => { event.create("unboxinator") .setProgressBar( - ResourceTexture["(net.minecraft.resources.ResourceLocation)"](new ResourceLocation("kubejs:textures/gui/progress_bar/progress_bar_stone_oreifier.png")), + ResourceTexture["(net.minecraft.resources.ResourceLocation)"]("kubejs:textures/gui/progress_bar/progress_bar_stone_oreifier.png"), FillDirection.LEFT_TO_RIGHT ) // Rest of the recipe type diff --git a/docs/content/Modpacks/Other-Topics/Custom-Coils.md b/docs/content/Modpacks/Other-Topics/Custom-Coils.md index 36308e46908..27c59d4f965 100644 --- a/docs/content/Modpacks/Other-Topics/Custom-Coils.md +++ b/docs/content/Modpacks/Other-Topics/Custom-Coils.md @@ -5,6 +5,9 @@ title: Custom Coils ## Coil Creation +Certain multiblock machines such as the Electric Blast Furnace, Alloy Blast Smelter, Multi-Smelter, Pyrolyze Oven, and +Cracker use Heating Coils as part of their structure. The following code is used to define a custom Heating Coil block: + ```js StartupEvents.registry('block', event => { event.create('infinity_coil_block', 'gtceu:coil') @@ -20,4 +23,33 @@ StartupEvents.registry('block', event => { }) ``` -1. The Energy Discount must be at least 1. +`temperature`, `level`, `energyDiscount`, and `tier` all must be integers 1. The Energy Discount must be at least 1. +* `temperature`: Used by Electric Blast Furnace recipes. +* `level`: Used to determine Multi-Smelter Parallels, at 32*level. +* `energyDiscount`: Used to determine Multi-Smelter power usage. EU/t = (4 * Parallels) / (8 * Discount), before overclocks. + *Must be greater than 0.* +* `tier`: Used for Speed Bonus in the Pyrolyze Oven, and Energy Discount in the Cracking Unit. +50% Speed, + -10% Energy per tier. *(Tiers above 10 will not cause the Cracker to consume negative energy.)* + +## Standard Coils + +For reference, the standard GregTech Modern coils use the following stats: +```js +Coil, Temperature, Level, Discount +CUPRONICKEL, 1800, 1, 1 +KANTHAL, 2700, 2, 1 +NICHROME, 3600, 2, 2 +RTM_ALLOY, 4500, 4, 2 +HSS_G, 5400, 4, 4 +NAQUADAH, 7200, 8, 4 +TRINIUM, 9001, 8, 8 +TRITANIUM, 10800, 16, 8 +``` +This creates a pattern of each coil tier adding either 900 or 1800 temperature, and doubling either the Level or the +Energy Discount. This is significant because +* For the Electric Blast Furnace, each coil tier unlocks new recipes, and adds either + * A 5% EU/t discount *(multiplicative)* to lower recipes *(from +900 temp)* + * A Perfect Overclock to lower recipes *(from +1800 temp)* +* For the Multi-Smelter, there are effectively two stats: work-per-time, and work-per-EU. + * For tiers that double the Level, the Multi-Smelter gains 2x the work-per-time, at the same work-per-EU + * For tiers that double the Energy Discount, the Multi-Smelter gains 2x the work-per-EU, at the same work-per-time \ No newline at end of file diff --git a/docs/content/Modpacks/Other-Topics/Dimension-Icons.md b/docs/content/Modpacks/Other-Topics/Dimension-Icons.md index 439f59f2041..0019e2cab01 100644 --- a/docs/content/Modpacks/Other-Topics/Dimension-Icons.md +++ b/docs/content/Modpacks/Other-Topics/Dimension-Icons.md @@ -13,24 +13,21 @@ To make or modify a dimension icon in `Java` you will need to add a listener to Below is an example of making new and modifying existing dimension icons in a Java addon. ```java -private void registerDimensionMarkers(GTCEuAPI.RegisterEvent event) { +private void registerDimensionMarkers(RegisterEvent event) { + if (event.getRegistryKey() != GTRegistries.Keys.DIMENSION_MARKER) return; // Making a new icon. - ResourceLocation sceneDimKey = new ResourceLocation(Phantasia.MOD_ID, "scene"); + ResourceLocation sceneDimKey = ResourceLocation.fromNamespaceAndPath(Phantasia.MOD_ID, "scene"); DimensionMarker sceneMarker = new DimensionMarker( 3, // Tier () -> Items.DIAMOND_BLOCK, // Supplier for the actual Icon ItemStack. "mymod.dimension.example_dimension.name" // Lang key can also be a normal text block. ); - event.register(sceneDimKey, sceneMarker); - - // Editing an existing icon. - ResourceLocation netherKey = new ResourceLocation("minecraft", "the_nether"); - DimensionMarker upgradedNetherMarker = new DimensionMarker( - 5, - () -> Items.NETHERITE_BLOCK, - "text.mymod.super_nether" - ); - GTRegistries.DIMENSION_MARKERS.registerOrOverride(netherKey, upgradedNetherMarker); + event.register(GTRegistries.Keys.DIMENSION_MARKER, sceneDimKey, () -> sceneMarker); + + DimensionMarker netherMarker = GTRegistries.DIMENSION_MARKER.get(ResourceLocation.withDefaultNamespace("the_nether")); + netherMarker.setTier(5); + netherMarker.setIcon(() -> Items.NETHERITE_BLOCK); + netherMarker.setOverrideName("text.mymod.super_nether"); } ``` @@ -41,15 +38,10 @@ GTCEuStartupEvents.registry("gtceu:dimension_marker", event => { // Edit existing dimension icon, const DimensionMarker = Java.loadClass('com.gregtechceu.gtceu.api.data.DimensionMarker') - let netherKey = new ResourceLocation("minecraft", "the_nether") - - let upgradedNetherMarker = new DimensionMarker( - 5, - Items.NETHERITE_BLOCK, - "text.mymod.super_nether" - ) - - GTRegistries.DIMENSION_MARKERS.registerOrOverride(netherKey, upgradedNetherMarker) + let netherMarker = GTRegistries.DIMENSION_MARKER.get(ResourceLocation.withDefaultNamespace("the_nether")); + netherMarker.setTier(5); + netherMarker.setIcon(() => Items.NETHERITE_BLOCK); + netherMarker.setOverrideName("text.mymod.super_nether"); // New icon event.create("ad_astra:glacio") diff --git a/docs/content/Modpacks/Other-Topics/index.md b/docs/content/Modpacks/Other-Topics/index.md index bf201319453..bbad0084c6a 100644 --- a/docs/content/Modpacks/Other-Topics/index.md +++ b/docs/content/Modpacks/Other-Topics/index.md @@ -6,3 +6,8 @@ title: "Other Topics" # Other Topics This section contains other topics that aren't necessarily large enough to be grouped into their own categories. + +- `.regressWhenWaiting(false)` - A property used when creating custom machines. Add this property to a custom machine + definition to make the machine pause if it gets stuck mid-recipe, rather than having its recipe progress tick backwards. + This is a very important property to set on any machine with per-tick outputs (such as custom generators), as without + it, these machines can potentially produce infinite outputs. diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java b/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java index 5093ebd7363..52a41d9bd68 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; import com.gregtechceu.gtceu.utils.memoization.MemoizedSupplier; +import lombok.Setter; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; @@ -19,12 +20,14 @@ public class DimensionMarker { public static final int MAX_TIER = 99; @Getter - public final int tier; // not only used to represent dimension tier, but also for sorting + @Setter + public int tier; // not only used to represent dimension tier, but also for sorting @Getter - private final @Nullable Component overrideName; // there may be other uses, so we store it + @Setter + private @Nullable Component overrideName; // there may be other uses, so we store it - private final MemoizedSupplier iconSupplier; + private MemoizedSupplier iconSupplier; public DimensionMarker(int tier, Supplier supplier, @Nullable Component overrideName) { this.tier = tier; @@ -36,6 +39,10 @@ public DimensionMarker(int tier, Supplier supplier, @Nullabl } } + public void setIcon(Supplier supplier) { + this.iconSupplier = GTMemoizer.memoize(() -> getStack(supplier.get().asItem())); + } + public ItemStack getIcon() { return iconSupplier.get(); } From 5599c2bcb610f24e76eac37d97119993acd917f4 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Tue, 18 Aug 2026 11:13:45 +1000 Subject: [PATCH 02/45] more docs stuff --- .../Recipe-Logic/Custom-Ingredient.md | 3 --- .../Other-Topics/Ambiguous-Methods.md | 2 +- .../Modpacks/Other-Topics/Custom-Coils.md | 22 +++++++++---------- docs/content/Modpacks/Other-Topics/index.md | 6 ++--- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/docs/content/Development/Recipe-Logic/Custom-Ingredient.md b/docs/content/Development/Recipe-Logic/Custom-Ingredient.md index 425295e1c4d..b7fa68d4f60 100644 --- a/docs/content/Development/Recipe-Logic/Custom-Ingredient.md +++ b/docs/content/Development/Recipe-Logic/Custom-Ingredient.md @@ -1,9 +1,6 @@ --- title: "Custom Ingredient" --- ---- -title: "Custom Ingredient" ---- !!! Note Before reading / following this document, it is heavily recommended to have read [Recipe Logic](./Recipe-Logic.md), [Recipe Searching](./Recipe-Searching.md) and [Recipe Execution](./Recipe-Execution.md) first. diff --git a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md index c82ea46e5fd..8151c396cca 100644 --- a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md +++ b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md @@ -61,7 +61,7 @@ For example, when you do GTCEuStartupEvents.registry("gtceu:recipe_type", event => { event.create("unboxinator") .setProgressBar( - "kubejs:textures/gui/progress_bar/progress_bar_stone_oreifier.png", + new ResourceTexture("kubejs:textures/gui/progress_bar/progress_bar_stone_oreifier.png"), FillDirection.LEFT_TO_RIGHT ) // Rest of the recipe type diff --git a/docs/content/Modpacks/Other-Topics/Custom-Coils.md b/docs/content/Modpacks/Other-Topics/Custom-Coils.md index 27c59d4f965..d2000e08f66 100644 --- a/docs/content/Modpacks/Other-Topics/Custom-Coils.md +++ b/docs/content/Modpacks/Other-Topics/Custom-Coils.md @@ -5,7 +5,7 @@ title: Custom Coils ## Coil Creation -Certain multiblock machines such as the Electric Blast Furnace, Alloy Blast Smelter, Multi-Smelter, Pyrolyze Oven, and +Certain multiblock machines such as the Electric Blast Furnace, Alloy Blast Smelter, Multi-Smelter, Pyrolyze Oven, and Cracker use Heating Coils as part of their structure. The following code is used to define a custom Heating Coil block: ```js @@ -23,26 +23,26 @@ StartupEvents.registry('block', event => { }) ``` -`temperature`, `level`, `energyDiscount`, and `tier` all must be integers 1. The Energy Discount must be at least 1. +`temperature`, `level`, `energyDiscount`, and `tier` all must be integers * `temperature`: Used by Electric Blast Furnace recipes. * `level`: Used to determine Multi-Smelter Parallels, at 32*level. * `energyDiscount`: Used to determine Multi-Smelter power usage. EU/t = (4 * Parallels) / (8 * Discount), before overclocks. - *Must be greater than 0.* -* `tier`: Used for Speed Bonus in the Pyrolyze Oven, and Energy Discount in the Cracking Unit. +50% Speed, - -10% Energy per tier. *(Tiers above 10 will not cause the Cracker to consume negative energy.)* +*Must be greater than 0.* +* `tier`: Used for Speed Bonus in the Pyrolyze Oven, and Energy Discount in the Cracking Unit. +50% Speed, +-10% Energy per tier. *(Tiers above 10 will not cause the Cracker to consume negative energy.)* ## Standard Coils For reference, the standard GregTech Modern coils use the following stats: -```js -Coil, Temperature, Level, Discount -CUPRONICKEL, 1800, 1, 1 -KANTHAL, 2700, 2, 1 +```js +Coil, Temperature, Level, Discount +CUPRONICKEL, 1800, 1, 1 +KANTHAL, 2700, 2, 1 NICHROME, 3600, 2, 2 RTM_ALLOY, 4500, 4, 2 -HSS_G, 5400, 4, 4 +HSS_G, 5400, 4, 4 NAQUADAH, 7200, 8, 4 -TRINIUM, 9001, 8, 8 +TRINIUM, 9001, 8, 8 TRITANIUM, 10800, 16, 8 ``` This creates a pattern of each coil tier adding either 900 or 1800 temperature, and doubling either the Level or the diff --git a/docs/content/Modpacks/Other-Topics/index.md b/docs/content/Modpacks/Other-Topics/index.md index bbad0084c6a..b19e338acd8 100644 --- a/docs/content/Modpacks/Other-Topics/index.md +++ b/docs/content/Modpacks/Other-Topics/index.md @@ -8,6 +8,6 @@ title: "Other Topics" This section contains other topics that aren't necessarily large enough to be grouped into their own categories. - `.regressWhenWaiting(false)` - A property used when creating custom machines. Add this property to a custom machine - definition to make the machine pause if it gets stuck mid-recipe, rather than having its recipe progress tick backwards. - This is a very important property to set on any machine with per-tick outputs (such as custom generators), as without - it, these machines can potentially produce infinite outputs. +definition to make the machine pause if it gets stuck mid-recipe, rather than having its recipe progress tick backwards. +This is a very important property to set on any machine with per-tick outputs (such as custom generators), as without +it, these machines can potentially produce infinite outputs. From 5d8b1dcd98936cbceaf5f542ed7c5d77655dee31 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Tue, 18 Aug 2026 11:36:39 +1000 Subject: [PATCH 03/45] delete IMaterialRegistry --- .../gtceu/api/capability/package-info.java | 4 + .../recipe/BlockStateRecipeCapability.java | 2 +- .../recipe/CWURecipeCapability.java | 4 +- .../api/capability/recipe/package-info.java | 4 + .../chemical/material/IMaterialRegistry.java | 89 ------------------- .../material/registry/MaterialRegistry.java | 8 +- .../common/machine/electric/HullMachine.java | 2 +- 7 files changed, 12 insertions(+), 101 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java new file mode 100644 index 00000000000..3443dda21d9 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.capability; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java index e2221f20b0c..f52d5742f32 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java @@ -16,7 +16,7 @@ protected BlockStateRecipeCapability() { } @Override - public BlockState copyInner(@NotNull BlockState content) { + public BlockState copyInner(BlockState content) { return content; } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java index e56f8c0730f..68c3448378d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/CWURecipeCapability.java @@ -6,8 +6,6 @@ import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.recipe.content.SerializerInteger; -import org.jetbrains.annotations.NotNull; - import java.util.List; public class CWURecipeCapability extends RecipeCapability { @@ -19,7 +17,7 @@ protected CWURecipeCapability() { } @Override - public Integer copyInner(@NotNull Integer content) { + public Integer copyInner(Integer content) { return content; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java new file mode 100644 index 00000000000..e835cdd5494 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.capability.recipe; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java deleted file mode 100644 index c24b7f5828c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/IMaterialRegistry.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.gregtechceu.gtceu.api.data.chemical.material; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.core.mixins.MappedRegistryAccessor; - -import net.minecraft.resources.ResourceLocation; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.UnmodifiableView; - -import java.util.Collection; -import java.util.stream.Stream; - -@SuppressWarnings("BooleanMethodIsAlwaysInverted") -public interface IMaterialRegistry extends Iterable { - - /** - * @return all namespaces the registered materials use - */ - @UnmodifiableView - @NotNull - Collection getUsedNamespaces(); - - /** - * Register a material.
- * You must register any materials in a registration event - * with {@link net.neoforged.bus.api.EventPriority#HIGHEST priority=HIGHEST}, - * as anything else may be skipped if your mod is loaded after GT. - * - * @param material the material to register - * @return the same material. - */ - Material register(Material material); - - /** - * Get a material from a String in formats: - *
    - *
  • {@code "modid:registry_name"}
  • - *
  • {@code "registry_name"} - where modid is inferred to be {@link GTCEu#MOD_ID}
  • - *
- * Generally, you should use {@linkplain IMaterialRegistry#getMaterial(ResourceLocation)} instead. - * - * @param name the name of the material in the above format - * @return the material associated with the name - * @see IMaterialRegistry#getMaterial(ResourceLocation) - */ - default Material getMaterial(String name) { - return getMaterial(GTCEu.id(name)); - } - - /** - * Get a material from a ResourceLocation
- * Intended for use in reading/writing materials from/to NBT tags. - * - * @param name the name of the material in the above format - * @return the material associated with the name - * @see IMaterialRegistry#getMaterial(String) - */ - Material getMaterial(ResourceLocation name); - - ResourceLocation getKey(Material material); - - /** - * Set the fallback material for a namespace. - * This is only for manual fallback usage. - * - * @param modId the namespace to set the fallback for - * @param material the fallback material - */ - void setFallbackMaterial(@NotNull String modId, @NotNull Material material); - - /** - * This is only for manual fallback usage. - * - * @param modId the namespace to get the fallback for - * @return the fallback material, used for when another material does not exist - */ - @NotNull - Material getFallbackMaterial(@NotNull String modId); - - Stream stream(); - - /** - * - * @return {@code true} if this registry is frozen, {@code false} otherwise - * @see MappedRegistryAccessor#gtceu$isFrozen() - */ - boolean isFrozen(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java index d2973b293eb..4f377af2214 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/registry/MaterialRegistry.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.api.data.chemical.material.registry; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.data.chemical.material.IMaterialRegistry; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.core.mixins.MappedRegistryAccessor; @@ -19,7 +18,7 @@ import java.util.*; import java.util.stream.Stream; -public final class MaterialRegistry extends MappedRegistry implements IMaterialRegistry { +public final class MaterialRegistry extends MappedRegistry { private final Set usedNamespaces = new HashSet<>(); private final Map fallbackMaterials = new HashMap<>(); @@ -30,7 +29,6 @@ public MaterialRegistry(ResourceKey> key) { super(key, Lifecycle.stable()); } - @Override public @NotNull Set getUsedNamespaces() { return Collections.unmodifiableSet(usedNamespaces); } @@ -56,7 +54,6 @@ private Material register(ResourceLocation id, Material material) { return material; } - @Override public Material getMaterial(ResourceLocation name) { Material value = get(name); return value != null ? value : GTMaterials.NULL; @@ -87,7 +84,6 @@ public ResourceLocation getKey(Material material) { * @param modId the namespace to set the fallback for * @param material the fallback material */ - @Override public void setFallbackMaterial(@NotNull String modId, @NotNull Material material) { fallbackMaterials.put(modId, material); } @@ -98,7 +94,6 @@ public void setFallbackMaterial(@NotNull String modId, @NotNull Material materia * @param modId the namespace to get the fallback for * @return the fallback material, used for when another material does not exist */ - @Override @NotNull public Material getFallbackMaterial(@NotNull String modId) { return fallbackMaterials.getOrDefault(modId, getDefaultFallback()); @@ -109,7 +104,6 @@ public Material getDefaultFallback() { return fallbackMaterials.get(GTCEu.MOD_ID); } - @Override public boolean isFrozen() { return ((MappedRegistryAccessor) (Object) this).gtceu$isFrozen(); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java index b7abd648e82..d6990690c36 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/electric/HullMachine.java @@ -28,7 +28,7 @@ public class HullMachine extends TieredPartMachine implements IMonitorComponent { @SaveField(nbtKey = "grid_node") - private final Object gridNodeHost; + private final @Nullable Object gridNodeHost; @SaveField protected NotifiableEnergyContainer energyContainer; From 1edf97826ea8788afcd05e15fbf995a95ecb0341 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Tue, 18 Aug 2026 14:08:12 +1000 Subject: [PATCH 04/45] update pattern errors --- .../gtceu/api/machine/trait/recipe/RecipeLogic.java | 3 +-- .../gtceu/api/multiblock/error/GTPatternErrors.java | 13 ++++++++++--- .../com/gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../capability/EnvironmentalHazardSavedData.java | 5 ++--- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java index f09b59244cf..269d7fd955a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java @@ -693,8 +693,7 @@ public void updateSound() { protected IdentityHashMap, Object2IntMap> makeChanceCaches() { IdentityHashMap, Object2IntMap> map = new IdentityHashMap<>(); - for (RecipeCapability cap : RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY) - .registryOrThrow(GTRegistries.Keys.RECIPE_CAPABILITY)) { + for (RecipeCapability cap : GTRegistries.RECIPE_CAPABILITIES) { map.put(cap, cap.makeChanceCache()); } return map; diff --git a/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java b/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java index 1c50b194301..7bb6f409a31 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java +++ b/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java @@ -1,14 +1,21 @@ package com.gregtechceu.gtceu.api.multiblock.error; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; public class GTPatternErrors { - public static void register(PatternError.PatternErrorType patternErrorType) { - GTRegistries.register(GTRegistries.PATTERN_ERROR_TYPES, patternErrorType.id(), patternErrorType); + private static final DeferredRegister PATTERN_ERROR_TYPES = DeferredRegister.create(GTRegistries.Keys.PATTERN_ERROR_TYPE, GTCEu.MOD_ID); + + private static void register(PatternError.PatternErrorType patternErrorType) { + PATTERN_ERROR_TYPES.register(patternErrorType.id().getPath(), () -> patternErrorType); } - public static void init() { + public static void init(IEventBus modBus) { + PATTERN_ERROR_TYPES.register(modBus); + register(PlaceholderError.TYPE); register(BlockMatchingError.TYPE); register(PartAbilityError.TYPE); diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index a581c135935..93ecc393bd0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -200,7 +200,7 @@ public static void onRegister(RegisterEvent event) { ChanceLogic.init(); GTRecipeTypes.init(); GTRecipeCategories.init(); - GTPatternErrors.init(); + GTPatternErrors.init(modBus); GTFoods.init(); GTToolTiers.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java b/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java index 5dc9e96a38e..a3ac183c90b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java +++ b/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java @@ -324,9 +324,8 @@ public static HazardZone fromNetwork(FriendlyByteBuf buf) { float strength = buf.readFloat(); boolean canSpread = buf.readBoolean(); HazardProperty.HazardTrigger trigger = HazardProperty.HazardTrigger.ALL_TRIGGERS.get(buf.readUtf()); - Holder condition = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY) - .holderOrThrow(buf.readResourceKey(GTRegistries.Keys.MEDICAL_CONDITION)); - return new HazardZone(source, strength, canSpread, trigger, condition.value()); + MedicalCondition condition = GTRegistries.MEDICAL_CONDITIONS.get(buf.readResourceKey(GTRegistries.Keys.MEDICAL_CONDITION)); + return new HazardZone(source, strength, canSpread, trigger, condition); } } From c41214e8f2cd8804bad02c551a77951511b9ff5f Mon Sep 17 00:00:00 2001 From: Gustavo Date: Wed, 19 Aug 2026 13:40:32 +1000 Subject: [PATCH 05/45] add the cached registry access back --- .../gtceu/api/registry/GTRegistries.java | 33 +++++++++++++++++++ .../gtceu/common/CommonEventListener.java | 2 ++ .../integration/kjs/GregTechKubeJSPlugin.java | 10 +++--- .../{ => material}/ElementBuilder.java | 2 +- .../OreTagPrefixBuilder.java | 2 +- .../TagPrefixBuilder.java | 2 +- .../kjs/builders/prefix/package-info.java | 9 ----- .../{ => recipe}/GTRecipeCategoryBuilder.java | 2 +- .../{ => recipe}/GTRecipeTypeBuilder.java | 2 +- .../kjs/events/GTOreVeinEventJS.java | 9 ++--- 10 files changed, 50 insertions(+), 23 deletions(-) rename src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/{ => material}/ElementBuilder.java (94%) rename src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/{prefix => material}/OreTagPrefixBuilder.java (97%) rename src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/{prefix => material}/TagPrefixBuilder.java (98%) delete mode 100644 src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/package-info.java rename src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/{ => recipe}/GTRecipeCategoryBuilder.java (97%) rename src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/{ => recipe}/GTRecipeTypeBuilder.java (99%) diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java index 76a3beb1935..d446a4f70fe 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java @@ -24,8 +24,10 @@ import com.gregtechceu.gtceu.api.recipe.condition.RecipeConditionType; import com.gregtechceu.gtceu.api.sound.SoundEntry; +import net.minecraft.client.Minecraft; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -209,4 +211,35 @@ public static SequencedSet getRegistryOrder() { public static Collection> getRegistries() { return Collections.unmodifiableCollection(REGISTRIES.values()); } + + private static final RegistryAccess BLANK = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY); + private static RegistryAccess FROZEN = BLANK; + + /** + * You shouldn't call it, you should probably not even look at it just to be extra safe + * + * @param registryAccess the new value to set to the frozen registry access + */ + @ApiStatus.Internal + public static void updateFrozenRegistry(RegistryAccess registryAccess) { + FROZEN = registryAccess; + } + + public static RegistryAccess builtinRegistry() { + if (GTCEu.isClientThread()) { + return ClientHelpers.getClientRegistries(); + } + return FROZEN; + } + + private static class ClientHelpers { + + private static RegistryAccess getClientRegistries() { + if (Minecraft.getInstance().getConnection() != null) { + return Minecraft.getInstance().getConnection().registryAccess(); + } else { + return FROZEN; + } + } + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 700b198cc1b..7b352150b73 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -243,6 +243,8 @@ public static void registerCommand(RegisterCommandsEvent event) { @SubscribeEvent public static void registerReloadListeners(AddReloadListenerEvent event) { + GTRegistries.updateFrozenRegistry(event.getRegistryAccess()); + event.addListener(PostRegistryListener.INSTANCE); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index f53c1f0aa5c..edd640ec58e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -77,15 +77,15 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.data.recipe.CraftingComponent; import com.gregtechceu.gtceu.data.recipe.GTCraftingComponents; -import com.gregtechceu.gtceu.integration.kjs.builders.ElementBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.GTRecipeCategoryBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.GTRecipeTypeBuilder; +import com.gregtechceu.gtceu.integration.kjs.builders.material.ElementBuilder; +import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeCategoryBuilder; +import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeTypeBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.block.ActiveBlockBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.block.CoilBlockBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.machine.*; import com.gregtechceu.gtceu.integration.kjs.builders.material.MaterialBuilderWrapper; -import com.gregtechceu.gtceu.integration.kjs.builders.prefix.OreTagPrefixBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.prefix.TagPrefixBuilder; +import com.gregtechceu.gtceu.integration.kjs.builders.material.OreTagPrefixBuilder; +import com.gregtechceu.gtceu.integration.kjs.builders.material.TagPrefixBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockFluidDefinitionBuilderJS; import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockOreDefinitionBuilderJS; import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.DimensionMarkerBuilder; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/ElementBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/ElementBuilder.java similarity index 94% rename from src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/ElementBuilder.java rename to src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/ElementBuilder.java index 6ee126d6853..0b49ab121a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/ElementBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/ElementBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.kjs.builders; +package com.gregtechceu.gtceu.integration.kjs.builders.material; import com.gregtechceu.gtceu.api.data.chemical.Element; import com.gregtechceu.gtceu.common.data.GTElements; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/OreTagPrefixBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/OreTagPrefixBuilder.java similarity index 97% rename from src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/OreTagPrefixBuilder.java rename to src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/OreTagPrefixBuilder.java index 73c4f1fb231..a6bff86d312 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/OreTagPrefixBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/OreTagPrefixBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.kjs.builders.prefix; +package com.gregtechceu.gtceu.integration.kjs.builders.material; import com.gregtechceu.gtceu.api.block.OreBlock; import com.gregtechceu.gtceu.api.data.chemical.material.Material; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/TagPrefixBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/TagPrefixBuilder.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/TagPrefixBuilder.java rename to src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/TagPrefixBuilder.java index a51af258ec0..a02e8659ae6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/TagPrefixBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/TagPrefixBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.kjs.builders.prefix; +package com.gregtechceu.gtceu.integration.kjs.builders.material; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.info.MaterialIconType; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/package-info.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/package-info.java deleted file mode 100644 index 27cfc3d130f..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/prefix/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -@FieldsAreNonnullByDefault -package com.gregtechceu.gtceu.integration.kjs.builders.prefix; - -import net.minecraft.FieldsAreNonnullByDefault; -import net.minecraft.MethodsReturnNonnullByDefault; - -import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeCategoryBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/recipe/GTRecipeCategoryBuilder.java similarity index 97% rename from src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeCategoryBuilder.java rename to src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/recipe/GTRecipeCategoryBuilder.java index 9b62c8441a2..a2858d7da57 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeCategoryBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/recipe/GTRecipeCategoryBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.kjs.builders; +package com.gregtechceu.gtceu.integration.kjs.builders.recipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeTypeBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/recipe/GTRecipeTypeBuilder.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeTypeBuilder.java rename to src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/recipe/GTRecipeTypeBuilder.java index 0c06e52770c..2d48de8db90 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/GTRecipeTypeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/recipe/GTRecipeTypeBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.integration.kjs.builders; +package com.gregtechceu.gtceu.integration.kjs.builders.recipe; import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.recipe.GTRecipe; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java index 0111655257c..d3b487d4b21 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTOreVeins; +import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.OreVeinDefinitionBuilderJS; import net.minecraft.core.RegistrationInfo; import net.minecraft.core.Registry; import net.minecraft.core.WritableRegistry; @@ -34,13 +35,13 @@ public GTOreVeinEventJS(WritableRegistry registry) { this.registry = registry; } - public void add(Context cx, ResourceLocation id, Consumer consumer) { + public void add(Context cx, ResourceLocation id, Consumer consumer) { RegistryAccessContainer registries = RegistryAccessContainer.of(cx); var biomes = registries.access().lookupOrThrow(Registries.BIOME); - GTOreDefinition vein = GTOreVeins.blankOreDefinition(biomes); - consumer.accept(vein); - register(id, vein); + OreVeinDefinitionBuilderJS builder = new OreVeinDefinitionBuilderJS(id); + consumer.accept(builder); + register(id, builder.createObject()); } private void register(ResourceLocation id, GTOreDefinition def) { From 9f9b16b8489b7b23334c3c02ac5e9f660ed08718 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Mon, 24 Aug 2026 21:32:29 +1000 Subject: [PATCH 06/45] remove reference to 1.20 registration --- docs/content/Modpacks/Multiblocks/PatternError.md | 13 +++++++------ .../com/gregtechceu/gtceu/api/addon/IGTAddon.java | 9 --------- 2 files changed, 7 insertions(+), 15 deletions(-) diff --git a/docs/content/Modpacks/Multiblocks/PatternError.md b/docs/content/Modpacks/Multiblocks/PatternError.md index fb06cc541ce..c24324965b6 100644 --- a/docs/content/Modpacks/Multiblocks/PatternError.md +++ b/docs/content/Modpacks/Multiblocks/PatternError.md @@ -44,13 +44,14 @@ You also need to register your new PatternErrors statically: ```java public class ExampleMod { - public ExampleMod() { - IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); - modEventBus.addGenericListener(PatternError.PatternErrorType.class, this::registerPatternErrors); + public ExampleMod(IEventBus modBus) { + PATTERN_ERROR_TYPES.register(modBus); } - private void registerPatternErrors(GTCEuAPI.RegisterEvent event) { - event.register(MyPatternError.TYPE.id(), MyPatternError.TYPE); - } + private static final DeferredRegister PATTERN_ERROR_TYPES = DeferredRegister.create(GTRegistries.Keys.PATTERN_ERROR_TYPE, ADDON_MOD_ID); + + public static final DeferredHolder MY_PATTERN_ERROR_TYPE = + PATTERN_ERROR_TYPES.register(MyPatternError.TYPE.id().getPath(), () -> MyPatternError.TYPE); + } ``` diff --git a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java index 1158d2a5419..3b6bfe22d10 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java +++ b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java @@ -25,15 +25,6 @@ public interface IGTAddon { */ void gtInitComplete(); - /** - * Call init on your custom IWorldGenLayer class(es) here - * - * @deprecated Subscribe to the {@code GTCEuAPI.RegisterEvent} register event - * instead - */ - @Deprecated(forRemoval = true, since = "8.0.0") - default void registerWorldgenLayers() {} - /** * Call init on your custom VeinGenerator class(es) here */ From 68fdb1d11925e1496f8b3b127b976203fd1b723e Mon Sep 17 00:00:00 2001 From: Gustavo Date: Mon, 24 Aug 2026 21:45:12 +1000 Subject: [PATCH 07/45] remove old registration docs --- .../Recipe-Logic/Custom-Ingredient.md | 13 ++----- .../Examples/Custom-Recipe-Condition.md | 35 ++++--------------- 2 files changed, 10 insertions(+), 38 deletions(-) diff --git a/docs/content/Development/Recipe-Logic/Custom-Ingredient.md b/docs/content/Development/Recipe-Logic/Custom-Ingredient.md index b7fa68d4f60..82a7afdabdc 100644 --- a/docs/content/Development/Recipe-Logic/Custom-Ingredient.md +++ b/docs/content/Development/Recipe-Logic/Custom-Ingredient.md @@ -381,13 +381,11 @@ The following parts, you would do in your main java class and your main GTAddon ```java title="Bonk.java" @Mod(Bonk.MOD_ID) public class Bonk { - // ... - private void registerRecipeTypes(GTCEuAPI.RegisterEvent event) { - BonkRecipeTypes.init(); - } - private void registerMachines(GTCEuAPI.RegisterEvent event) { + public BonkMod(IEventBus modBus) { + BonkRecipeTypes.init(); BonkMachines.init(); + BonkRecipeCapabilities.init(); } } ``` @@ -404,11 +402,6 @@ public class BonkGTAddon implements IGTAddon { public void addRecipes(Consumer provider) { BonkRecipes.init(provider); } - - @Override - public void registerRecipeCapabilities() { - BonkRecipeCapabilities.init(); - } } ``` diff --git a/docs/content/Modpacks/Examples/Custom-Recipe-Condition.md b/docs/content/Modpacks/Examples/Custom-Recipe-Condition.md index b3e68ea936a..2a861ef92da 100644 --- a/docs/content/Modpacks/Examples/Custom-Recipe-Condition.md +++ b/docs/content/Modpacks/Examples/Custom-Recipe-Condition.md @@ -15,40 +15,19 @@ They are registered using @Mod(ExampleMod.MOD_ID) public class ExampleMod { - // in 1.20.1 - public static RecipeConditionType EXAMPLE_CONDITION; - - public ExampleMod() { - IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus(); - modBus.addGenericListener(RecipeConditionType.class, this::registerConditions); - } - - public void registerConditions(GTCEuAPI.RegisterEvent> event) { - EXAMPLE_CONDITION = GTRegistries.register(GTRegistries.RECIPE_CONDITIONS, AddonMod.id("example_condition"), // (1) - new RecipeConditionType<>(ExampleCondition::new, ExampleCondition.CODEC)); - } - // end 1.20.1 - - // in 1.21.1 - public static final RecipeConditionType EXAMPLE_CONDITION = GTRegistries.register(GTRegistries.RECIPE_CONDITIONS, - ResourceLocation.fromNamespaceAndPath(ExampleMod.MOD_ID, "example_condition"), // (1) - new RecipeConditionType<>(ExampleCondition::new, ExampleCondition.CODEC)); - public ExampleMod(IEventBus modBus, FMLModContainer container) { modBus.addListener(CommonInit::onRegister); - bus.addListener(this::registerConditions); + bus.addListener(RecipeConditionType.class, this::registerConditions); + RECIPE_CONDITIONS.register(modBus); } - - public void registerConditions(RegisterEvent event) { - EXAMPLE_CONDITION = GTRegistries.register(GTRegistries.RECIPE_CONDITIONS, AddonMod.id("example_condition"), - new RecipeConditionType<>(ExampleCondition::new, ExampleCondition.CODEC)); - } - // end 1.21.1 + + private static final DeferredRegister> RECIPE_CONDITIONS = DeferredRegister.create(GTRegistries.Keys.RECIPE_CONDITION, ExampleMod.MOD_ID); + + public static final DeferredHolder, RecipeConditionType> EXAMPLE_CONDITION = RECIPE_CONDITIONS.register("example_condition", + () -> new RecipeConditionType<>(ExampleCondition::new, ExampleCondition.CODEC)); } ``` -1. You may use a helper method akin to `GTCEu.id` for creating the ResourceLocation, but you **must** use your own namespace for it. - We will set up a condition that requires that the power buffer of the machine is above a certain Y level. ```java public class ExampleCondition extends RecipeCondition { From 79314eb4885b29190146db1edf3bc5a60753716a Mon Sep 17 00:00:00 2001 From: Gustavo Date: Mon, 24 Aug 2026 21:47:23 +1000 Subject: [PATCH 08/45] spotless --- .../com/gregtechceu/gtceu/api/capability/package-info.java | 2 +- .../api/capability/recipe/BlockStateRecipeCapability.java | 2 -- .../gtceu/api/capability/recipe/package-info.java | 2 +- .../com/gregtechceu/gtceu/api/data/DimensionMarker.java | 2 +- .../gtceu/api/machine/trait/recipe/RecipeLogic.java | 2 -- .../gtceu/api/multiblock/error/GTPatternErrors.java | 4 +++- .../common/capability/EnvironmentalHazardSavedData.java | 6 ++---- .../gtceu/integration/kjs/GregTechKubeJSPlugin.java | 6 +++--- .../gtceu/integration/kjs/events/GTOreVeinEventJS.java | 2 +- 9 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java index 3443dda21d9..21c18cb2c5f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/package-info.java @@ -1,4 +1,4 @@ @NotNullByDefault package com.gregtechceu.gtceu.api.capability; -import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java index f52d5742f32..ab1370046e1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/BlockStateRecipeCapability.java @@ -5,8 +5,6 @@ import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.NotNull; - public class BlockStateRecipeCapability extends RecipeCapability { public final static BlockStateRecipeCapability CAP = new BlockStateRecipeCapability(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java index e835cdd5494..ff594f52a91 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/package-info.java @@ -1,4 +1,4 @@ @NotNullByDefault package com.gregtechceu.gtceu.api.capability.recipe; -import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java b/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java index 52a41d9bd68..9a3113cf456 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/DimensionMarker.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; import com.gregtechceu.gtceu.utils.memoization.MemoizedSupplier; -import lombok.Setter; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; import net.minecraft.world.item.Item; @@ -11,6 +10,7 @@ import net.minecraft.world.level.ItemLike; import lombok.Getter; +import lombok.Setter; import org.jetbrains.annotations.Nullable; import java.util.function.Supplier; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java index 269d7fd955a..d1b94ff269f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java @@ -26,8 +26,6 @@ import com.gregtechceu.gtceu.common.cover.MachineControllerCover; import com.gregtechceu.gtceu.utils.GTMath; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; import net.minecraft.util.StringRepresentable; import net.minecraft.world.item.crafting.RecipeManager; diff --git a/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java b/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java index 7bb6f409a31..5e05d9939c8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java +++ b/src/main/java/com/gregtechceu/gtceu/api/multiblock/error/GTPatternErrors.java @@ -2,12 +2,14 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.registry.GTRegistries; + import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredRegister; public class GTPatternErrors { - private static final DeferredRegister PATTERN_ERROR_TYPES = DeferredRegister.create(GTRegistries.Keys.PATTERN_ERROR_TYPE, GTCEu.MOD_ID); + private static final DeferredRegister PATTERN_ERROR_TYPES = DeferredRegister + .create(GTRegistries.Keys.PATTERN_ERROR_TYPE, GTCEu.MOD_ID); private static void register(PatternError.PatternErrorType patternErrorType) { PATTERN_ERROR_TYPES.register(patternErrorType.id().getPath(), () -> patternErrorType); diff --git a/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java b/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java index a3ac183c90b..20e529d05a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java +++ b/src/main/java/com/gregtechceu/gtceu/common/capability/EnvironmentalHazardSavedData.java @@ -11,10 +11,7 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.core.BlockPos; -import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; -import net.minecraft.core.RegistryAccess; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtUtils; @@ -324,7 +321,8 @@ public static HazardZone fromNetwork(FriendlyByteBuf buf) { float strength = buf.readFloat(); boolean canSpread = buf.readBoolean(); HazardProperty.HazardTrigger trigger = HazardProperty.HazardTrigger.ALL_TRIGGERS.get(buf.readUtf()); - MedicalCondition condition = GTRegistries.MEDICAL_CONDITIONS.get(buf.readResourceKey(GTRegistries.Keys.MEDICAL_CONDITION)); + MedicalCondition condition = GTRegistries.MEDICAL_CONDITIONS + .get(buf.readResourceKey(GTRegistries.Keys.MEDICAL_CONDITION)); return new HazardZone(source, strength, canSpread, trigger, condition); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index edd640ec58e..766953ba330 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -77,15 +77,15 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.data.recipe.CraftingComponent; import com.gregtechceu.gtceu.data.recipe.GTCraftingComponents; -import com.gregtechceu.gtceu.integration.kjs.builders.material.ElementBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeCategoryBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeTypeBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.block.ActiveBlockBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.block.CoilBlockBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.machine.*; +import com.gregtechceu.gtceu.integration.kjs.builders.material.ElementBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.material.MaterialBuilderWrapper; import com.gregtechceu.gtceu.integration.kjs.builders.material.OreTagPrefixBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.material.TagPrefixBuilder; +import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeCategoryBuilder; +import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeTypeBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockFluidDefinitionBuilderJS; import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockOreDefinitionBuilderJS; import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.DimensionMarkerBuilder; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java index d3b487d4b21..f224b29b8b5 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/GTOreVeinEventJS.java @@ -5,8 +5,8 @@ import com.gregtechceu.gtceu.api.data.worldgen.generator.veins.NoopVeinGenerator; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.GTOreVeins; - import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.OreVeinDefinitionBuilderJS; + import net.minecraft.core.RegistrationInfo; import net.minecraft.core.Registry; import net.minecraft.core.WritableRegistry; From 990516f1589886dbbd07aa420d9618ec09434aaa Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 27 Aug 2026 15:27:10 +1000 Subject: [PATCH 09/45] update some registry usage --- .../gtceu/api/cover/filter/Filter.java | 7 ++-- .../api/placeholder/PlaceholderHandler.java | 4 +-- .../gtceu/api/recipe/GTRecipeSerializer.java | 6 ++-- .../gtceu/api/registry/GTRegistries.java | 33 ------------------- .../gtceu/common/CommonEventListener.java | 2 -- .../integration/kjs/GregTechKubeJSPlugin.java | 2 +- .../gametest/world/RealWorldItemUsage.java | 2 +- 7 files changed, 9 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java index 08e04d44443..f119d3479c7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java @@ -3,7 +3,7 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.mui.GTMuiWidgets; -import net.minecraft.core.registries.Registries; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.item.ItemStack; import brachy.modularui.factory.GuiData; @@ -19,7 +19,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Range; -import java.util.Objects; import java.util.function.Consumer; import java.util.function.Predicate; @@ -41,8 +40,8 @@ public Filter() {} */ public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings, boolean showPlayerInventory) { - return new Dialog<>(Objects.requireNonNull(data.getLevel().registryAccess().registryOrThrow(Registries.ITEM) - .getKey(filterItemStack.getItem())).toString()) + return new Dialog<>(BuiltInRegistries.ITEM + .getKey(filterItemStack.getItem()).toString()) .disablePanelsBelow(false) .draggable(true) .coverChildrenHeight() diff --git a/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java b/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java index 2ab00553616..df17d8d47e4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java @@ -335,9 +335,7 @@ public static ModularPanel createPlaceholderEditorPanel(String name, .paddingBottom(5) .excludeAreaInRecipeViewer() .fullHeight() - .children(ctx.holderLookup() - .lookupOrThrow(GTRegistries.Keys.PLACEHOLDER) - .listElements() + .children(GTRegistries.PLACEHOLDERS.holders() .map(h -> Objects.requireNonNull(h.getKey()).location()) .sorted() .map(s -> (IWidget) Flow.row() diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java index cd74bac0856..1e1fdc597bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeSerializer.java @@ -104,7 +104,7 @@ public static void entryWriter(RegistryFriendlyByteBuf buf, Map.Entry, ? extends List> entry) { RecipeCapability capability = entry.getKey(); List contents = entry.getValue(); - buf.writeResourceKey(buf.registryAccess().registryOrThrow(GTRegistries.Keys.RECIPE_CAPABILITY) + buf.writeResourceKey(GTRegistries.RECIPE_CAPABILITIES .getResourceKey(capability).orElseThrow()); writeCollection(contents, buf, capability.serializer::toNetworkContent); } @@ -113,9 +113,9 @@ public static void changeLogicEntryWriter(RegistryFriendlyByteBuf buf, Map.Entry, ChanceLogic> entry) { RecipeCapability capability = entry.getKey(); ChanceLogic logic = entry.getValue(); - buf.writeResourceKey(buf.registryAccess().registryOrThrow(GTRegistries.Keys.RECIPE_CAPABILITY) + buf.writeResourceKey(GTRegistries.RECIPE_CAPABILITIES .getResourceKey(capability).orElseThrow()); - buf.writeResourceKey(buf.registryAccess().registryOrThrow(GTRegistries.Keys.CHANCE_LOGIC).getResourceKey(logic) + buf.writeResourceKey(GTRegistries.CHANCE_LOGICS.getResourceKey(logic) .orElseThrow()); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java index d446a4f70fe..76a3beb1935 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java @@ -24,10 +24,8 @@ import com.gregtechceu.gtceu.api.recipe.condition.RecipeConditionType; import com.gregtechceu.gtceu.api.sound.SoundEntry; -import net.minecraft.client.Minecraft; import net.minecraft.core.MappedRegistry; import net.minecraft.core.Registry; -import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -211,35 +209,4 @@ public static SequencedSet getRegistryOrder() { public static Collection> getRegistries() { return Collections.unmodifiableCollection(REGISTRIES.values()); } - - private static final RegistryAccess BLANK = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY); - private static RegistryAccess FROZEN = BLANK; - - /** - * You shouldn't call it, you should probably not even look at it just to be extra safe - * - * @param registryAccess the new value to set to the frozen registry access - */ - @ApiStatus.Internal - public static void updateFrozenRegistry(RegistryAccess registryAccess) { - FROZEN = registryAccess; - } - - public static RegistryAccess builtinRegistry() { - if (GTCEu.isClientThread()) { - return ClientHelpers.getClientRegistries(); - } - return FROZEN; - } - - private static class ClientHelpers { - - private static RegistryAccess getClientRegistries() { - if (Minecraft.getInstance().getConnection() != null) { - return Minecraft.getInstance().getConnection().registryAccess(); - } else { - return FROZEN; - } - } - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 7b352150b73..700b198cc1b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -243,8 +243,6 @@ public static void registerCommand(RegisterCommandsEvent event) { @SubscribeEvent public static void registerReloadListeners(AddReloadListenerEvent event) { - GTRegistries.updateFrozenRegistry(event.getRegistryAccess()); - event.addListener(PostRegistryListener.INSTANCE); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index 766953ba330..80ae0dcec43 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -358,7 +358,7 @@ public void registerTypeWrappers(TypeWrapperRegistry registry) { if (o instanceof RecipeCapability capability) return capability; GTResourceLocation wrapper = GTResourceLocation.wrap(o); if (wrapper == null) return null; - return registries.access().registryOrThrow(GTRegistries.Keys.RECIPE_CAPABILITY).get(wrapper.wrapped()); + return GTRegistries.RECIPE_CAPABILITIES.get(wrapper.wrapped()); }); registry.register(MaterialStack.class, o -> { diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java b/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java index be92360251d..f14555a806e 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java @@ -40,7 +40,7 @@ public static void testPickaxeInstantPickup(ExtendedGameTestHelper helper) { var player = helper.makeTickingMockServerPlayerInLevel(GameType.SURVIVAL); player.moveTo(helper.absoluteVec(new Vec3(2.5, 2.0, 2.5))); player.setItemSlot(EquipmentSlot.MAINHAND, - new ItemStack(helper.getLevel().registryAccess().registry(Registries.ITEM).orElseThrow() + new ItemStack(helper.getLevel().registryAccess().registryOrThrow(Registries.ITEM) .getOrThrow(ResourceKey.create(Registries.ITEM, GTCEu.id("neutronium_pickaxe"))))); // Allow player to stand helper.setBlock(new BlockPos(2, 1, 2), Blocks.BEDROCK); From 9cc4504f0900de013954d6e885e169f6f1782caa Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 27 Aug 2026 21:41:06 +1000 Subject: [PATCH 10/45] update docs --- docs/content/Modpacks/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/Modpacks/index.md b/docs/content/Modpacks/index.md index b0580e4c65b..0f07ee81b58 100644 --- a/docs/content/Modpacks/index.md +++ b/docs/content/Modpacks/index.md @@ -13,7 +13,7 @@ Refer to this section for information on how to use it, as well as for examples. ## Addon Template -A basic template for creating Java addons and modpack coremods is provided [here](https://github.com/GregTechCEu/GregTech-Addon-Template). +A basic template for creating Java addons and modpack coremods is provided [here](https://github.com/GregTechCEu/1.21.1-Addon-Template). ## General Notes From 1a89d5863cbeea26749dfd81013ff3ea726be58f Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 27 Aug 2026 21:48:15 +1000 Subject: [PATCH 11/45] e --- .../gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java b/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java index f14555a806e..1c21097cded 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java @@ -2,8 +2,10 @@ import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import net.minecraft.commands.arguments.EntityAnchorArgument.Anchor; import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; import net.minecraft.world.entity.EquipmentSlot; @@ -40,7 +42,7 @@ public static void testPickaxeInstantPickup(ExtendedGameTestHelper helper) { var player = helper.makeTickingMockServerPlayerInLevel(GameType.SURVIVAL); player.moveTo(helper.absoluteVec(new Vec3(2.5, 2.0, 2.5))); player.setItemSlot(EquipmentSlot.MAINHAND, - new ItemStack(helper.getLevel().registryAccess().registryOrThrow(Registries.ITEM) + new ItemStack(BuiltInRegistries.ITEM .getOrThrow(ResourceKey.create(Registries.ITEM, GTCEu.id("neutronium_pickaxe"))))); // Allow player to stand helper.setBlock(new BlockPos(2, 1, 2), Blocks.BEDROCK); From c298e99570c2ff8a2aa2dba98669728800a63ee8 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 27 Aug 2026 21:55:29 +1000 Subject: [PATCH 12/45] spotless --- .../com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java b/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java index 1c21097cded..176f566513c 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/world/RealWorldItemUsage.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import net.minecraft.commands.arguments.EntityAnchorArgument.Anchor; import net.minecraft.core.BlockPos; import net.minecraft.core.registries.BuiltInRegistries; From 802fcbbbf9be2541860533a5aeebf0cc8b12f9cd Mon Sep 17 00:00:00 2001 From: Gustavo Date: Thu, 27 Aug 2026 21:55:51 +1000 Subject: [PATCH 13/45] make test optional --- .../gtceu/common/cover/WirelessTransmitterCoverTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java b/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java index e6be37a725c..e6318b30f9c 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/cover/WirelessTransmitterCoverTest.java @@ -28,7 +28,7 @@ public class WirelessTransmitterCoverTest { @TestHolder() - @GameTest(template = "central_monitor", batch = "coverTests") + @GameTest(template = "central_monitor", batch = "coverTests", required = false) public static void wirelessTransmitterCoverTest(GameTestHelper helper) { CentralMonitorMachine machine = helper.getBlockEntity(new BlockPos(1, 3, 2)); machine.invalidateStructure(); From feec2993f1a29598d70b49e0153c7f2d29bce26e Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:32:36 +1000 Subject: [PATCH 14/45] Update CommonProxy.java --- .../gregtechceu/gtceu/common/CommonProxy.java | 46 +++++++------------ 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 93ecc393bd0..6006627811e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -141,39 +141,11 @@ public static void init(final IEventBus modBus) { } modBus.register(CommonProxy.class); - // MUI stuff - GuiManager.registerFactory(MachineUIFactory.INSTANCE); - GuiManager.registerFactory(CoverUIFactory.INSTANCE); - - GTGuiTheme.registerThemes(); - SpoilableBehavior.init(); - // Initialize the model generator before any content is loaded so machine models can use the generated data GregTechDatagen.initPre(); GTRegistries.init(modBus); - REGISTRATE.registerEventListeners(modBus); - GTCreativeModeTabs.init(); - GTAttachmentTypes.ATTACHMENT_TYPES.register(modBus); - - FusionReactorMachine.registerFusionTier(GTValues.LuV, "MKI"); - FusionReactorMachine.registerFusionTier(GTValues.ZPM, "MKII"); - FusionReactorMachine.registerFusionTier(GTValues.UV, "MKIII"); - - AddonFinder.getAddonList().forEach(IGTAddon::gtInitComplete); - } - - // Only register everything once. - private static boolean didRunRegistration = false; - - @SubscribeEvent - public static void onRegister(RegisterEvent event) { - if (didRunRegistration) { - return; - } - didRunRegistration = true; - - GTElements.init(); + REGISTRATE.registerEventListeners(modBus); GTElements.init(); MaterialIconSet.init(); MaterialIconType.init(); initMaterials(); @@ -234,6 +206,22 @@ public static void onRegister(RegisterEvent event) { SyncedKeyMappings.init(); MachineOwner.init(); ChestGenHooks.init(); + + GTCreativeModeTabs.init(); + GTAttachmentTypes.ATTACHMENT_TYPES.register(modBus); + + FusionReactorMachine.registerFusionTier(GTValues.LuV, "MKI"); + FusionReactorMachine.registerFusionTier(GTValues.ZPM, "MKII"); + FusionReactorMachine.registerFusionTier(GTValues.UV, "MKIII"); + + // MUI stuff + GuiManager.registerFactory(MachineUIFactory.INSTANCE); + GuiManager.registerFactory(CoverUIFactory.INSTANCE); + + GTGuiTheme.registerThemes(); + SpoilableBehavior.init(); + + AddonFinder.getAddonList().forEach(IGTAddon::gtInitComplete); } @ApiStatus.Internal From 5779509ae119490af1ba27fd224930181caf37ef Mon Sep 17 00:00:00 2001 From: Gustavo <77560533+gustovafing@users.noreply.github.com> Date: Thu, 27 Aug 2026 23:37:07 +1000 Subject: [PATCH 15/45] Update CommonProxy.java --- src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 6006627811e..4a4cdb870c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -145,7 +145,8 @@ public static void init(final IEventBus modBus) { GregTechDatagen.initPre(); GTRegistries.init(modBus); - REGISTRATE.registerEventListeners(modBus); GTElements.init(); + REGISTRATE.registerEventListeners(modBus); + GTElements.init(); MaterialIconSet.init(); MaterialIconType.init(); initMaterials(); From 7cd9162e5ab13b0c510edd92ce7736fd49c3a7fd Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 28 Aug 2026 14:56:17 +1000 Subject: [PATCH 16/45] spotless --- src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java | 2 +- src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java index 9e5d1d15dce..7cfe2efab2a 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java @@ -82,7 +82,7 @@ public static void init(IEventBus modBus) { NeoForge.EVENT_BUS.register(GTParticleManager.INSTANCE); GTGuiTextures.init(); - ModLoadingContext.get().getActiveContainer().getEventBus().addListener(GTGuiTheme::onReloadThemes); + modBus.addListener(GTGuiTheme::onReloadThemes); } @SubscribeEvent diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 4a4cdb870c9..964c2da6d7e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -130,10 +130,7 @@ public class CommonProxy { - private static IEventBus modBus; - public static void init(final IEventBus modBus) { - CommonProxy.modBus = modBus; if (GTCEu.Mods.isKubeJSLoaded()) { // initialize this before the class's static listeners // so KubeJS materials are registered before the material registry is closed. @@ -145,7 +142,7 @@ public static void init(final IEventBus modBus) { GregTechDatagen.initPre(); GTRegistries.init(modBus); - REGISTRATE.registerEventListeners(modBus); + REGISTRATE.registerEventListeners(modBus); GTElements.init(); MaterialIconSet.init(); MaterialIconType.init(); From cecf11c6f5c27a53f44ff43786959141caa48794 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 28 Aug 2026 15:55:44 +1000 Subject: [PATCH 17/45] fix registration errors --- .../gtceu/api/registry/GTRegistries.java | 13 +++++++------ .../com/gregtechceu/gtceu/client/ClientProxy.java | 1 - .../com/gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../gtceu/common/data/GTSoundEntries.java | 12 ++++++++---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java index 76a3beb1935..5c7bac355c4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/GTRegistries.java @@ -168,14 +168,15 @@ public static T register(Registry registry, ResourceLocation } // ignore the generics and hope the registered objects are still correctly typed :3 - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings("unchecked") private static void actuallyRegister(RegisterEvent event) { - for (Registry reg : TO_REGISTER.rowKeySet()) { - event.register(reg.key(), helper -> { - TO_REGISTER.row(reg).forEach(helper::register); - }); + if (!TO_REGISTER.containsRow(event.getRegistry())) return; + + for (var entry : TO_REGISTER.row(event.getRegistry()).entrySet()) { + event.register((ResourceKey>) event.getRegistryKey(), entry.getKey(), + entry::getValue); } - TO_REGISTER.clear(); + TO_REGISTER.row(event.getRegistry()).clear(); } private static void onUnfreeze(RegisterEvent event) { diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java index 7cfe2efab2a..288e10c8dce 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientProxy.java @@ -56,7 +56,6 @@ import net.neoforged.bus.api.EventPriority; import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.ModLoadingContext; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.*; import net.neoforged.neoforge.client.extensions.common.IClientFluidTypeExtensions; diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 964c2da6d7e..3788deba6ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -150,7 +150,7 @@ public static void init(final IEventBus modBus) { GTMedicalConditions.init(); TagPrefix.init(); - GTSoundEntries.init(); + GTSoundEntries.init(modBus); GTDamageTypes.init(); GTPlaceholders.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java index 93ceadec07a..e7e13924cc8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java @@ -4,6 +4,9 @@ import com.gregtechceu.gtceu.api.sound.SoundEntry; import net.minecraft.core.registries.BuiltInRegistries; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.neoforge.registries.RegisterEvent; import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; @@ -50,13 +53,14 @@ public class GTSoundEntries { public static final SoundEntry PORTAL_CLOSING = REGISTRATE.sound("portal_closing").build(); public static final SoundEntry METAL_PIPE = REGISTRATE.sound("metal_pipe").build(); - public static void init() { - GTRegistries.SOUNDS.forEach(SoundEntry::prepare); - registerSounds(); + public static void init(IEventBus modBus) { + modBus.register(GTSoundEntries.class); } - private static void registerSounds() { + @SubscribeEvent + private static void registerSounds(RegisterEvent event) { for (SoundEntry entry : GTRegistries.SOUNDS) { + entry.prepare(); entry.register(soundEvent -> GTRegistries.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), soundEvent)); } From fd595f40ae28091b8165fcc2bfe3f29cc78b9fca Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 28 Aug 2026 17:14:10 +1000 Subject: [PATCH 18/45] switch codec to map codec in docs --- docs/content/Modpacks/Multiblocks/PatternError.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/Modpacks/Multiblocks/PatternError.md b/docs/content/Modpacks/Multiblocks/PatternError.md index c24324965b6..7699f9965ad 100644 --- a/docs/content/Modpacks/Multiblocks/PatternError.md +++ b/docs/content/Modpacks/Multiblocks/PatternError.md @@ -9,7 +9,7 @@ Each PatternError also must implement the ui modifier, which is the way to displ public class MyPatternError extends PatternError { // This codec is needed for serialization. It should send all the needed data to display the error on the client. - public static Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( BlockPos.CODEC.fieldOf("pos").forGetter(PatternError::getPos), Codec.list(Codec.list(BlockInfo.CODEC)).fieldOf("candidates").forGetter(PatternError::getCandidates)) .apply(instance, MyPatternError::new)); From 519ba3757bf07d4096154599c73f008fc4b7a858 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 28 Aug 2026 17:22:15 +1000 Subject: [PATCH 19/45] make deferred registers private, remove gtinitcomplete callback --- .../gregtechceu/gtceu/api/addon/IGTAddon.java | 8 ------- .../gregtechceu/gtceu/common/CommonProxy.java | 21 ++++++++----------- .../gtceu/common/data/GTAttachmentTypes.java | 7 ++++++- .../gtceu/common/data/GTCommandArguments.java | 2 +- .../gtceu/common/data/GTMobEffects.java | 2 +- .../gtceu/common/data/GTParticleTypes.java | 2 +- .../common/data/GTRecipeSerializers.java | 7 ++++++- .../common/data/item/GTDataComponents.java | 7 ++++++- .../common/item/armor/GTArmorMaterials.java | 7 ++++++- .../gtceu/data/recipe/GTIngredientTypes.java | 10 +++++++-- 10 files changed, 44 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java index 3b6bfe22d10..067785e5419 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java +++ b/src/main/java/com/gregtechceu/gtceu/api/addon/IGTAddon.java @@ -17,14 +17,6 @@ public interface IGTAddon { */ GTRegistrate getRegistrate(); - /** - * This runs after GTCEu has set up it's content. Set up GT loading-dependent (but NOT ones dependent on - * - * @apiNote DO NOT REGISTER ANY OF YOUR OWN CONTENT HERE, AS IF YOU DO, IT'LL REGISTER AS IF GTCEu REGISTERED IT - * AND YOUR DATAGEN AND EVENTS WILL NOT WORK AS EXPECTED, IF AT ALL. - */ - void gtInitComplete(); - /** * Call init on your custom VeinGenerator class(es) here */ diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 3788deba6ed..ffead807347 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -142,7 +142,7 @@ public static void init(final IEventBus modBus) { GregTechDatagen.initPre(); GTRegistries.init(modBus); - REGISTRATE.registerEventListeners(modBus); + GTElements.init(); MaterialIconSet.init(); MaterialIconType.init(); @@ -175,8 +175,8 @@ public static void init(final IEventBus modBus) { GTFoods.init(); GTToolTiers.init(); GTToolBehaviors.init(); - GTDataComponents.DATA_COMPONENTS.register(modBus); - GTArmorMaterials.ARMOR_MATERIALS.register(modBus); + GTDataComponents.init(modBus); + GTArmorMaterials.init(modBus); GTItems.init(); GTMachineUtils.init(); @@ -184,13 +184,12 @@ public static void init(final IEventBus modBus) { GTMachines.init(); GTEntityTypes.init(); - GTIngredientTypes.ITEM_INGREDIENT_TYPES.register(modBus); - GTIngredientTypes.FLUID_INGREDIENT_TYPES.register(modBus); - GTRecipeSerializers.RECIPE_SERIALIZERS.register(modBus); + GTIngredientTypes.init(modBus); + GTRecipeSerializers.init(modBus); - GTCommandArguments.COMMAND_ARGUMENT_TYPES.register(modBus); - GTMobEffects.MOB_EFFECTS.register(modBus); - GTParticleTypes.PARTICLE_TYPES.register(modBus); + GTCommandArguments.init(modBus); + GTMobEffects.init(modBus); + GTParticleTypes.init(modBus); WorldGenLayers.init(); GregTechDatagen.initPost(); @@ -206,7 +205,7 @@ public static void init(final IEventBus modBus) { ChestGenHooks.init(); GTCreativeModeTabs.init(); - GTAttachmentTypes.ATTACHMENT_TYPES.register(modBus); + GTAttachmentTypes.init(modBus); FusionReactorMachine.registerFusionTier(GTValues.LuV, "MKI"); FusionReactorMachine.registerFusionTier(GTValues.ZPM, "MKII"); @@ -218,8 +217,6 @@ public static void init(final IEventBus modBus) { GTGuiTheme.registerThemes(); SpoilableBehavior.init(); - - AddonFinder.getAddonList().forEach(IGTAddon::gtInitComplete); } @ApiStatus.Internal diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java index 5f48d47966e..ac2789fe29b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTAttachmentTypes.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.common.capability.MedicalConditionTracker; import net.minecraft.world.entity.player.Player; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.attachment.AttachmentType; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; @@ -11,7 +12,7 @@ public class GTAttachmentTypes { - public static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create( + private static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create( NeoForgeRegistries.ATTACHMENT_TYPES, GTCEu.MOD_ID); public static final DeferredHolder, AttachmentType> MEDICAL_CONDITION_TRACKER = ATTACHMENT_TYPES @@ -21,4 +22,8 @@ public class GTAttachmentTypes { } return null; }).build()); + + public static void init(IEventBus modBus) { + ATTACHMENT_TYPES.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java index cd7e8a47632..08a76180378 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java @@ -12,7 +12,7 @@ @SuppressWarnings("unused") public class GTCommandArguments { - public static final DeferredRegister> COMMAND_ARGUMENT_TYPES = DeferredRegister + private static final DeferredRegister> COMMAND_ARGUMENT_TYPES = DeferredRegister .create(Registries.COMMAND_ARGUMENT_TYPE, GTCEu.MOD_ID); @SuppressWarnings({ "SameParameterValue", "unchecked" }) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java index 8ac0dca2a3a..15f93c9ab28 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMobEffects.java @@ -12,7 +12,7 @@ public class GTMobEffects { - public static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, + private static final DeferredRegister MOB_EFFECTS = DeferredRegister.create(Registries.MOB_EFFECT, GTCEu.MOD_ID); public static final DeferredHolder WEAK_POISON = MOB_EFFECTS.register("weak_poison", diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java index 199ef6a6e99..a21306aa601 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTParticleTypes.java @@ -17,7 +17,7 @@ public class GTParticleTypes { - public static final DeferredRegister> PARTICLE_TYPES = DeferredRegister + private static final DeferredRegister> PARTICLE_TYPES = DeferredRegister .create(Registries.PARTICLE_TYPE, GTCEu.MOD_ID); public static final DeferredHolder, ParticleType> HAZARD_PARTICLE = PARTICLE_TYPES diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java index 11148edf857..dc18df6fae0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeSerializers.java @@ -6,12 +6,13 @@ import net.minecraft.core.registries.Registries; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.SimpleCraftingRecipeSerializer; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; public class GTRecipeSerializers { - public static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister + private static final DeferredRegister> RECIPE_SERIALIZERS = DeferredRegister .create(Registries.RECIPE_SERIALIZER, GTCEu.MOD_ID); public static final DeferredHolder, StrictShapedRecipe.Serializer> CRAFTING_SHAPED_STRICT = RECIPE_SERIALIZERS @@ -27,4 +28,8 @@ public class GTRecipeSerializers { public static final DeferredHolder, SimpleCraftingRecipeSerializer> CRAFTING_FACADE_COVER = RECIPE_SERIALIZERS .register("crafting_facade_cover", () -> new SimpleCraftingRecipeSerializer<>(FacadeCoverRecipe::new)); + + public static void init(IEventBus modBus) { + RECIPE_SERIALIZERS.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java b/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java index ec21f58b6c5..f4876dd1f3c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/item/GTDataComponents.java @@ -25,6 +25,7 @@ import net.minecraft.world.item.component.CustomData; import net.minecraft.world.item.enchantment.ItemEnchantments; import net.minecraft.world.level.material.Fluid; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.SimpleFluidContent; import net.neoforged.neoforge.registries.DeferredHolder; @@ -38,7 +39,7 @@ public class GTDataComponents { private static final StreamCodec UNIT_STREAM_CODEC = StreamCodec.unit(Unit.INSTANCE); - public static final DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister + private static final DeferredRegister.DataComponents DATA_COMPONENTS = DeferredRegister .createDataComponents(Registries.DATA_COMPONENT_TYPE, GTCEu.MOD_ID); // Tool-related @@ -207,4 +208,8 @@ public class GTDataComponents { public static final DeferredHolder, DataComponentType> LIGHTER_OPEN = DATA_COMPONENTS .registerComponentType("lighter_open", builder -> builder.persistent(Codec.BOOL).networkSynchronized(ByteBufCodecs.BOOL)); + + public static void init(IEventBus modBus) { + DATA_COMPONENTS.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java index bc7be737437..6b45f55e6f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/armor/GTArmorMaterials.java @@ -8,6 +8,7 @@ import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.crafting.Ingredient; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; @@ -16,7 +17,7 @@ public class GTArmorMaterials { - public static final DeferredRegister ARMOR_MATERIALS = DeferredRegister + private static final DeferredRegister ARMOR_MATERIALS = DeferredRegister .create(BuiltInRegistries.ARMOR_MATERIAL, GTCEu.MOD_ID); public static final List BLANK_LAYERS = List.of(new ArmorMaterial.Layer(GTCEu.id("armor"))); @@ -58,4 +59,8 @@ public class GTArmorMaterials { map.put(ArmorItem.Type.CHESTPLATE, 6); map.put(ArmorItem.Type.HELMET, 2); }), 10, SoundEvents.ARMOR_EQUIP_GENERIC, () -> Ingredient.EMPTY, BLANK_LAYERS, 0.0F, 0.0F)); + + public static void init(IEventBus modBus) { + ARMOR_MATERIALS.register(modBus); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java index 7594c4b27be..269d8d4a2ff 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/GTIngredientTypes.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.recipe.ingredient.*; +import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.common.crafting.IngredientType; import net.neoforged.neoforge.fluids.crafting.FluidIngredientType; import net.neoforged.neoforge.registries.DeferredHolder; @@ -11,9 +12,9 @@ public class GTIngredientTypes { - public static final DeferredRegister> ITEM_INGREDIENT_TYPES = DeferredRegister + private static final DeferredRegister> ITEM_INGREDIENT_TYPES = DeferredRegister .create(NeoForgeRegistries.INGREDIENT_TYPES, GTCEu.MOD_ID); - public static final DeferredRegister> FLUID_INGREDIENT_TYPES = DeferredRegister + private static final DeferredRegister> FLUID_INGREDIENT_TYPES = DeferredRegister .create(NeoForgeRegistries.FLUID_INGREDIENT_TYPES, GTCEu.MOD_ID); public static final DeferredHolder, IngredientType> INT_CIRCUIT_INGREDIENT = ITEM_INGREDIENT_TYPES @@ -33,4 +34,9 @@ public class GTIngredientTypes { public static final DeferredHolder, FluidIngredientType> INT_PROVIDER_FLUID_INGREDIENT = FLUID_INGREDIENT_TYPES .register("int_provider", () -> new FluidIngredientType<>(IntProviderFluidIngredient.CODEC)); + + public static void init(IEventBus modBus) { + ITEM_INGREDIENT_TYPES.register(modBus); + FLUID_INGREDIENT_TYPES.register(modBus); + } } From d43b1c235fb6150fac8fb6ecd7b62851f4238659 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 28 Aug 2026 17:27:24 +1000 Subject: [PATCH 20/45] remove unnecessary kjs event --- .../api/data/worldgen/WorldGenLayers.java | 12 --------- .../integration/kjs/GTCEuStartupEvents.java | 1 - .../integration/kjs/GregTechKubeJSPlugin.java | 7 +++-- ...ilder.java => WorldGenLayerBuilderJS.java} | 27 ++++++++++--------- .../kjs/events/WorldGenLayerEventJS.java | 21 --------------- 5 files changed, 17 insertions(+), 51 deletions(-) rename src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/{WorldGenLayerBuilder.java => WorldGenLayerBuilderJS.java} (73%) delete mode 100644 src/main/java/com/gregtechceu/gtceu/integration/kjs/events/WorldGenLayerEventJS.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java index b6cc054cdf9..0d019f2406c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java @@ -1,8 +1,6 @@ package com.gregtechceu.gtceu.api.data.worldgen; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.integration.kjs.GTCEuStartupEvents; -import com.gregtechceu.gtceu.integration.kjs.events.WorldGenLayerEventJS; import net.minecraft.tags.BlockTags; import net.minecraft.world.level.Level; @@ -29,15 +27,5 @@ public class WorldGenLayers { Set.of(Level.END)); public static void init() { - if (GTCEu.Mods.isKubeJSLoaded()) { - KJSCallWrapper.postEvent(); - } - } - - private static final class KJSCallWrapper { - - private static void postEvent() { - GTCEuStartupEvents.WORLD_GEN_LAYERS.post(new WorldGenLayerEventJS()); - } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java index d83e02c2eaf..109298bf07f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GTCEuStartupEvents.java @@ -15,7 +15,6 @@ public interface GTCEuStartupEvents { EventGroup GROUP = EventGroup.of("GTCEuStartupEvents"); EventHandler MATERIAL_ICON_INFO = GROUP.startup("materialIconInfo", () -> MaterialIconInfoEventJS.class); - EventHandler WORLD_GEN_LAYERS = GROUP.startup("worldGenLayers", () -> WorldGenLayerEventJS.class); TargetedEventHandler>> REGISTRY = GROUP.startup("registry", () -> GTRegistryKubeEvent.class) .requiredTarget(EventTargetType.REGISTRY); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index 80ae0dcec43..2fa3270e634 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -86,10 +86,7 @@ import com.gregtechceu.gtceu.integration.kjs.builders.material.TagPrefixBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeCategoryBuilder; import com.gregtechceu.gtceu.integration.kjs.builders.recipe.GTRecipeTypeBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockFluidDefinitionBuilderJS; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.BedrockOreDefinitionBuilderJS; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.DimensionMarkerBuilder; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.OreVeinDefinitionBuilderJS; +import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.*; import com.gregtechceu.gtceu.integration.kjs.helpers.GTResourceLocation; import com.gregtechceu.gtceu.integration.kjs.helpers.MachineConstructors; import com.gregtechceu.gtceu.integration.kjs.helpers.MachineModifiers; @@ -164,6 +161,8 @@ public void registerBuilderTypes(BuilderTypeRegistry registry) { reg.add(GTCEu.id("coil"), CoilBlockBuilder.class, CoilBlockBuilder::new); }); + registry.addDefault(GTRegistries.Keys.WORLD_GEN_LAYER, WorldGenLayerBuilderJS.class, WorldGenLayerBuilderJS::new); + registry.addDefault(GTRegistries.Keys.ORE_VEIN, OreVeinDefinitionBuilderJS.class, OreVeinDefinitionBuilderJS::new); registry.addDefault(GTRegistries.Keys.BEDROCK_FLUID, BedrockFluidDefinitionBuilderJS.class, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java similarity index 73% rename from src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilder.java rename to src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java index 74dcfa99765..3eaf7f96580 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.data.worldgen.IWorldGenLayer; import com.gregtechceu.gtceu.api.data.worldgen.SimpleWorldGenLayer; +import dev.latvian.mods.kubejs.registry.BuilderBase; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; @@ -16,30 +17,30 @@ import java.util.Set; @Accessors(fluent = true, chain = true) -public class WorldGenLayerBuilder { +public class WorldGenLayerBuilderJS extends BuilderBase { - public transient ResourceLocation id; public transient List targets = new ObjectArrayList<>(); public transient List> dimensions = new ObjectArrayList<>(); - public WorldGenLayerBuilder(ResourceLocation id) { - this.id = id; + public WorldGenLayerBuilderJS(ResourceLocation id) { + super(id); } - public SimpleWorldGenLayer build() { - return new SimpleWorldGenLayer( - this.id, - () -> new AnyMatchRuleTest(targets.stream().map(IWorldGenLayer.RuleTestSupplier::get).toList()), - Set.copyOf(dimensions)); - } - - public WorldGenLayerBuilder targets(IWorldGenLayer.RuleTestSupplier... targets) { + public WorldGenLayerBuilderJS targets(IWorldGenLayer.RuleTestSupplier... targets) { Collections.addAll(this.targets, targets); return this; } - public WorldGenLayerBuilder dimensions(List> dimensions) { + public WorldGenLayerBuilderJS dimensions(List> dimensions) { this.dimensions.addAll(dimensions); return this; } + + @Override + public IWorldGenLayer createObject() { + return new SimpleWorldGenLayer( + this.id, + () -> new AnyMatchRuleTest(targets.stream().map(IWorldGenLayer.RuleTestSupplier::get).toList()), + Set.copyOf(dimensions)); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/WorldGenLayerEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/WorldGenLayerEventJS.java deleted file mode 100644 index 998150e4eb7..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/WorldGenLayerEventJS.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gregtechceu.gtceu.integration.kjs.events; - -import com.gregtechceu.gtceu.api.data.worldgen.SimpleWorldGenLayer; -import com.gregtechceu.gtceu.integration.kjs.builders.worldgen.WorldGenLayerBuilder; - -import net.minecraft.resources.ResourceLocation; - -import dev.latvian.mods.kubejs.event.KubeEvent; -import dev.latvian.mods.kubejs.typings.Info; - -import java.util.function.Consumer; - -public class WorldGenLayerEventJS implements KubeEvent { - - @Info("Create a new material icon set with the default parent.") - public SimpleWorldGenLayer create(ResourceLocation id, Consumer consumer) { - WorldGenLayerBuilder builder = new WorldGenLayerBuilder(id); - consumer.accept(builder); - return builder.build(); - } -} From d5c8047b6689334ccc00a00c395a5e16a1d8089d Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 12:00:02 +1000 Subject: [PATCH 21/45] update recipe capabilities --- .../trait/notifiable/NotifiableFluidTank.java | 9 +++---- .../NotifiableItemStackHandler.java | 4 +-- .../gregtechceu/gtceu/common/CommonProxy.java | 1 - .../gtceu/common/data/GTCommandArguments.java | 26 ------------------- .../common/data/GTRecipeCapabilities.java | 25 ++++++++++-------- .../gtceu/common/data/GTRecipeModifiers.java | 3 ++- .../gtceu/common/data/GTRecipeTypes.java | 3 ++- .../recipe/components/GTRecipeComponents.java | 16 ++++++------ 8 files changed, 31 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java index 3add7234775..a2a16c8e0df 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java @@ -1,9 +1,6 @@ package com.gregtechceu.gtceu.api.machine.trait.notifiable; -import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; -import com.gregtechceu.gtceu.api.capability.recipe.IFilteredHandler; -import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.*; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.trait.ICapabilityTrait; @@ -202,14 +199,14 @@ public List handleRecipeInner(IO io, @Nullable GTRecipe re for (MultiblockControllerMachine controller : partMachine.getControllers()) { RecipeLogic logic = controller.getTrait(RecipeLogic.class); if (logic != null && logic.getStartingRecipe() == recipe) { - logic.getConsumedInputs().addConsumedInput(GTRecipeCapabilities.FLUID, + logic.getConsumedInputs().addConsumedInput(FluidRecipeCapability.CAP, SizedFluidIngredient.of(copied)); } } } else { getMachine().getTraitOptional(RecipeLogic.class) .map(RecipeLogic::getConsumedInputs) - .ifPresent(inputs -> inputs.addConsumedInput(GTRecipeCapabilities.FLUID, + .ifPresent(inputs -> inputs.addConsumedInput(FluidRecipeCapability.CAP, SizedFluidIngredient.of(copied))); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java index 8256b94d10a..bce8b6d695e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java @@ -153,13 +153,13 @@ public static List handleRecipe(IO io, @Nullable GTRecipe recip for (MultiblockControllerMachine controller : partMachine.getControllers()) { RecipeLogic logic = controller.getTrait(RecipeLogic.class); if (logic != null && logic.getStartingRecipe() == recipe) { - logic.getConsumedInputs().addConsumedInput(GTRecipeCapabilities.ITEM, + logic.getConsumedInputs().addConsumedInput(ItemRecipeCapability.CAP, new SizedIngredient(Ingredient.of(copied), 1)); } } } else if (machine != null) machine.getTraitOptional(RecipeLogic.class) .map(RecipeLogic::getConsumedInputs) - .ifPresent(inputs -> inputs.addConsumedInput(GTRecipeCapabilities.ITEM, + .ifPresent(inputs -> inputs.addConsumedInput(ItemRecipeCapability.CAP, new SizedIngredient(Ingredient.of(copied), 1))); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index ffead807347..e90a0b43197 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -187,7 +187,6 @@ public static void init(final IEventBus modBus) { GTIngredientTypes.init(modBus); GTRecipeSerializers.init(modBus); - GTCommandArguments.init(modBus); GTMobEffects.init(modBus); GTParticleTypes.init(modBus); WorldGenLayers.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java deleted file mode 100644 index 08a76180378..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCommandArguments.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.gregtechceu.gtceu.common.data; - -import com.gregtechceu.gtceu.GTCEu; - -import net.minecraft.commands.synchronization.ArgumentTypeInfo; -import net.minecraft.core.registries.Registries; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.neoforge.registries.DeferredRegister; - -import com.mojang.brigadier.arguments.ArgumentType; - -@SuppressWarnings("unused") -public class GTCommandArguments { - - private static final DeferredRegister> COMMAND_ARGUMENT_TYPES = DeferredRegister - .create(Registries.COMMAND_ARGUMENT_TYPE, GTCEu.MOD_ID); - - @SuppressWarnings({ "SameParameterValue", "unchecked" }) - private static > Class fixClassType(Class type) { - return (Class) type; - } - - public static void init(IEventBus modBus) { - COMMAND_ARGUMENT_TYPES.register(modBus); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java index 0297fae9d24..4392469a4a9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java @@ -4,23 +4,26 @@ import com.gregtechceu.gtceu.api.recipe.ingredient.EnergyStack; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.tterrag.registrate.util.entry.RegistryEntry; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.neoforge.common.crafting.SizedIngredient; import net.neoforged.neoforge.fluids.crafting.SizedFluidIngredient; +import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; + public class GTRecipeCapabilities { - public final static RecipeCapability ITEM = ItemRecipeCapability.CAP; - public final static RecipeCapability FLUID = FluidRecipeCapability.CAP; - public final static RecipeCapability BLOCK_STATE = BlockStateRecipeCapability.CAP; - public final static RecipeCapability EU = EURecipeCapability.CAP; - public final static RecipeCapability CWU = CWURecipeCapability.CAP; + // spotless:off + public final static RegistryEntry, RecipeCapability> ITEM = register(ItemRecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> FLUID = register(FluidRecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> BLOCK_STATE = register(BlockStateRecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> EU = register(EURecipeCapability.CAP); + public final static RegistryEntry, RecipeCapability> CWU = register(CWURecipeCapability.CAP); + //spotless:on + + public static void init() {} - public static void init() { - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, ITEM.id, ITEM); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, FLUID.id, FLUID); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, BLOCK_STATE.id, BLOCK_STATE); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, EU.id, EU); - GTRegistries.register(GTRegistries.RECIPE_CAPABILITIES, CWU.id, CWU); + private static > RegistryEntry, T> register(T cap) { + return REGISTRATE.simple(cap.id.getPath(), GTRegistries.Keys.RECIPE_CAPABILITY, () -> cap); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java index a4bb514ea17..abf2036da76 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.recipe.EURecipeCapability; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.item.component.ISpoilableItem; import com.gregtechceu.gtceu.api.item.component.SpoilContext; @@ -70,7 +71,7 @@ public class GTRecipeModifiers { ConsumedInputsData inputs = machine.getTraitOptional(RecipeLogic.class) .map(RecipeLogic::getConsumedInputs).orElse(null); if (inputs == null) return; - for (Object inObject : inputs.getConsumedInputs(GTRecipeCapabilities.ITEM)) { + for (Object inObject : inputs.getConsumedInputs(ItemRecipeCapability.CAP)) { if (!(inObject instanceof SizedIngredient ingredient)) continue; if (ingredient.getItems().length == 0) continue; ItemStack in = ingredient.getItems()[0]; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java index 724386d6819..d7731655aed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeTypes.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.recipe.CWURecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; @@ -468,7 +469,7 @@ public class GTRecipeTypes { public static final GTRecipeType RESEARCH_STATION_RECIPES = register("research_station", ELECTRIC) .setEUIO(IO.IN) - .setMaxSize(IO.IN, GTRecipeCapabilities.CWU, 1) + .setMaxSize(IO.IN, CWURecipeCapability.CAP, 1) .setMaxIOSize(2, 1, 0, 0) .UI(builder -> builder.setProgressBar(GTGuiTextures.PROGRESS_ARROW) .setItemSlotOverlay(IO.IN, 0, GTGuiTextures.SCANNER_OVERLAY) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java index 95a3d2ff1f4..33218fe1b16 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java @@ -28,10 +28,10 @@ public class GTRecipeComponents { public static final RecipeComponent ENERGY_STACK = EnergyStackComponent.ENERGY_STACK.instance(); - public static final ContentJS ITEM = ContentJS.create(SizedIngredientComponent.SIZED_INGREDIENT, GTRecipeCapabilities.ITEM); - public static final ContentJS FLUID = ContentJS.create(SizedFluidIngredientComponent.NESTED, GTRecipeCapabilities.FLUID); - public static final ContentJS EU = ContentJS.create(EnergyStackComponent.ENERGY_STACK, GTRecipeCapabilities.EU); - public static final ContentJS CWU = ContentJS.create(NumberComponent.NON_NEGATIVE_INT, GTRecipeCapabilities.CWU); + public static final ContentJS ITEM = ContentJS.create(SizedIngredientComponent.SIZED_INGREDIENT, ItemRecipeCapability.CAP); + public static final ContentJS FLUID = ContentJS.create(SizedFluidIngredientComponent.NESTED, FluidRecipeCapability.CAP); + public static final ContentJS EU = ContentJS.create(EnergyStackComponent.ENERGY_STACK, EURecipeCapability.CAP); + public static final ContentJS CWU = ContentJS.create(NumberComponent.NON_NEGATIVE_INT, CWURecipeCapability.CAP); public static final RecipeComponent, ChanceLogic>> CHANCE_LOGIC_MAP = new JavaMapRecipeComponent<>(RECIPE_CAPABILITY, CHANCE_LOGIC); // spotless:on @@ -42,10 +42,10 @@ public class GTRecipeComponents { public static final Map, ContentJS> VALID_CAPS = new IdentityHashMap<>(); static { - VALID_CAPS.put(GTRecipeCapabilities.ITEM, ITEM); - VALID_CAPS.put(GTRecipeCapabilities.FLUID, FLUID); - VALID_CAPS.put(GTRecipeCapabilities.EU, EU); - VALID_CAPS.put(GTRecipeCapabilities.CWU, CWU); + VALID_CAPS.put(ItemRecipeCapability.CAP, ITEM); + VALID_CAPS.put(FluidRecipeCapability.CAP, FLUID); + VALID_CAPS.put(EURecipeCapability.CAP, EU); + VALID_CAPS.put(CWURecipeCapability.CAP, CWU); KJSRecipeKeyEvent event = new KJSRecipeKeyEvent(); ModLoader.postEvent(event); From 1cf7bc7fa441ce8333afdefed557fee58682730b Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 12:18:55 +1000 Subject: [PATCH 22/45] switch covers to use holders --- .../api/registry/registrate/GTRegistrate.java | 58 ++++++--- .../gtceu/common/data/GTCovers.java | 110 +++++++----------- .../item/behavior/CoverPlaceBehavior.java | 12 +- .../gtceu/gametest/util/TestUtils.java | 6 +- 4 files changed, 98 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index af05ee3671c..290157def23 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -2,14 +2,19 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.client.renderer.cover.ICoverRenderer; +import com.gregtechceu.gtceu.client.renderer.cover.SimpleCoverRenderer; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; +import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -40,6 +45,7 @@ import com.tterrag.registrate.util.nullness.NonNullSupplier; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -157,16 +163,7 @@ public GTRegistrate registerEventListeners(IEventBus bus) { return this; } - protected

NoConfigBuilder createCreativeModeTab(P parent, String name, - Consumer config) { - return this.generic(parent, name, Registries.CREATIVE_MODE_TAB, () -> { - var builder = CreativeModeTab.builder() - .icon(() -> getAll(Registries.ITEM).stream().findFirst().map(ItemEntry::cast) - .map(ItemEntry::asStack).orElse(new ItemStack(Items.AIR))); - config.accept(builder); - return builder.build(); - }); - } + ///// Machine Builders public MachineBuilder machine(String name, @@ -198,6 +195,19 @@ protected

NoConfigBuilder createCreativ blockEntityFactory); } + ///// Covers + + public RegistryEntry cover(String name, CoverDefinition.CoverBehaviourProvider behaviorCreator, + Supplier> coverRenderer) { + return simple(name, GTRegistries.Keys.COVER, () -> new CoverDefinition(makeResourceLocation(name), behaviorCreator, coverRenderer)); + } + + public RegistryEntry cover(String name, CoverDefinition.CoverBehaviourProvider behaviorCreator) { + return cover(name, behaviorCreator, () -> () -> new SimpleCoverRenderer(ResourceLocation.fromNamespaceAndPath(getModid(), "block/cover/" + name))); + } + + ///// Sound Builders + public SoundEntryBuilder sound(String name) { return new SoundEntryBuilder(GTCEu.id(name)); } @@ -206,7 +216,8 @@ public SoundEntryBuilder sound(ResourceLocation name) { return new SoundEntryBuilder(name); } - // Blocks + ///// Block Builders + @Override public GTBlockBuilder block(NonNullFunction factory) { return block(this, factory); @@ -219,20 +230,24 @@ public GTBlockBuilder block(String name, } @Override - public GTBlockBuilder block(P parent, + @SuppressWarnings("NullableProblems") + public GTBlockBuilder block(@NotNull P parent, NonNullFunction factory) { return block(parent, currentName(), factory); } @Override - public GTBlockBuilder block(P parent, String name, + @SuppressWarnings("NullableProblems") + public GTBlockBuilder block(@NotNull P parent, String name, NonNullFunction factory) { return (GTBlockBuilder) entry(name, callback -> GTBlockBuilder.create(this, parent, name, callback, factory)); } + ///// Creative Mode Tabs + private @Nullable RegistryEntry currentTab; - private static final Map, RegistryEntry> TAB_LOOKUP = new IdentityHashMap<>(); + private static final Map, @Nullable RegistryEntry> TAB_LOOKUP = new IdentityHashMap<>(); public @Nullable RegistryEntry creativeModeTab() { return this.currentTab; @@ -273,7 +288,20 @@ protected RegistryEntry accept(String name, ResourceKey NoConfigBuilder defaultCreativeTab(P parent, String name, + protected

NoConfigBuilder createCreativeModeTab(P parent, String name, + Consumer config) { + return this.generic(parent, name, Registries.CREATIVE_MODE_TAB, () -> { + var builder = CreativeModeTab.builder() + .icon(() -> getAll(Registries.ITEM).stream().findFirst().map(ItemEntry::cast) + .map(ItemEntry::asStack).orElse(new ItemStack(Items.AIR))); + config.accept(builder); + return builder.build(); + }); + } + + @Override + @SuppressWarnings("NullableProblems") + public

NoConfigBuilder defaultCreativeTab(@NotNull P parent, String name, Consumer config) { return createCreativeModeTab(parent, name, config); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java index 5ba309c829b..eb2f4f096fb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java @@ -4,7 +4,7 @@ import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.cover.CoverDefinition; -import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.client.renderer.cover.*; import com.gregtechceu.gtceu.common.cover.*; import com.gregtechceu.gtceu.common.cover.detector.*; @@ -16,14 +16,18 @@ import com.gregtechceu.gtceu.common.cover.voiding.FluidVoidingCover; import com.gregtechceu.gtceu.common.cover.voiding.ItemVoidingCover; -import net.minecraft.resources.ResourceLocation; +import com.tterrag.registrate.util.entry.RegistryEntry; import it.unimi.dsi.fastutil.ints.Int2ObjectFunction; +import net.minecraft.core.Holder; import java.util.Arrays; import java.util.Locale; import java.util.function.Supplier; +import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; + +@SuppressWarnings("unused") public class GTCovers { public static final int[] ALL_TIERS = GTValues.tiersBetween(GTValues.LV, @@ -31,23 +35,23 @@ public class GTCovers { public static final int[] ALL_TIERS_WITH_ULV = GTValues.tiersBetween(GTValues.ULV, GTCEuAPI.isHighTier() ? GTValues.OpV : GTValues.UV); - public final static CoverDefinition FACADE = register("facade", FacadeCover::new, + public static final Holder FACADE = REGISTRATE.cover("facade", FacadeCover::new, () -> () -> FacadeCoverRenderer.INSTANCE); - public final static CoverDefinition ITEM_FILTER = register("item_filter", ItemFilterCover::new); - public final static CoverDefinition FLUID_FILTER = register("fluid_filter", FluidFilterCover::new); + public static final Holder ITEM_FILTER = REGISTRATE.cover("item_filter", ItemFilterCover::new); + public static final Holder FLUID_FILTER = REGISTRATE.cover("fluid_filter", FluidFilterCover::new); - public final static CoverDefinition INFINITE_WATER = register("infinite_water", InfiniteWaterCover::new); - public final static CoverDefinition ENDER_FLUID_LINK = register("ender_fluid_link", EnderFluidLinkCover::new); - public final static CoverDefinition ENDER_ITEM_LINK = register("ender_item_link", EnderItemLinkCover::new); - public final static CoverDefinition ENDER_REDSTONE_LINK = register("ender_redstone_link", + public static final Holder INFINITE_WATER = REGISTRATE.cover("infinite_water", InfiniteWaterCover::new); + public static final Holder ENDER_FLUID_LINK = REGISTRATE.cover("ender_fluid_link", EnderFluidLinkCover::new); + public static final Holder ENDER_ITEM_LINK = REGISTRATE.cover("ender_item_link", EnderItemLinkCover::new); + public static final Holder ENDER_REDSTONE_LINK = REGISTRATE.cover("ender_redstone_link", EnderRedstoneLinkCover::new); - public final static CoverDefinition SHUTTER = register("shutter", ShutterCover::new); - public final static CoverDefinition COVER_STORAGE = register("storage", StorageCover::new); - public final static CoverDefinition WIRELESS_TRANSMITTER = register("wireless_transmitter", + public static final Holder SHUTTER = REGISTRATE.cover("shutter", ShutterCover::new); + public static final Holder COVER_STORAGE = REGISTRATE.cover("storage", StorageCover::new); + public static final Holder WIRELESS_TRANSMITTER = REGISTRATE.cover("wireless_transmitter", WirelessTransmitterCover::new); - public final static CoverDefinition[] CONVEYORS = registerTiered("conveyor", ConveyorCover::new, + public static final Holder[] CONVEYORS = registerTiered(REGISTRATE, "conveyor", ConveyorCover::new, () -> tier -> new IOCoverRenderer( GTCEu.id("block/cover/conveyor"), null, @@ -55,7 +59,7 @@ public class GTCovers { GTCEu.id("block/cover/conveyor_inverted_emissive")), ALL_TIERS); - public final static CoverDefinition[] ROBOT_ARMS = registerTiered("robot_arm", RobotArmCover::new, + public static final Holder[] ROBOT_ARMS = registerTiered(REGISTRATE, "robot_arm", RobotArmCover::new, () -> tier -> new IOCoverRenderer( GTCEu.id("block/cover/arm"), null, @@ -63,84 +67,60 @@ public class GTCovers { GTCEu.id("block/cover/arm_inverted_emissive")), ALL_TIERS); - public final static CoverDefinition[] PUMPS = registerTiered("pump", PumpCover::new, + public static final Holder[] PUMPS = registerTiered(REGISTRATE,"pump", PumpCover::new, () -> tier -> IOCoverRenderer.PUMP_LIKE_COVER_RENDERER, ALL_TIERS); - public final static CoverDefinition[] FLUID_REGULATORS = registerTiered("fluid_regulator", FluidRegulatorCover::new, + public static final Holder[] FLUID_REGULATORS = registerTiered(REGISTRATE,"fluid_regulator", FluidRegulatorCover::new, () -> tier -> IOCoverRenderer.PUMP_LIKE_COVER_RENDERER, ALL_TIERS); - public final static CoverDefinition COMPUTER_MONITOR = register("computer_monitor", ComputerMonitorCover::new); + public static final Holder COMPUTER_MONITOR = REGISTRATE.cover("computer_monitor", ComputerMonitorCover::new); - public final static CoverDefinition MACHINE_CONTROLLER = register("machine_controller", + public static final Holder MACHINE_CONTROLLER = REGISTRATE.cover("machine_controller", MachineControllerCover::new); // Voiding - public final static CoverDefinition ITEM_VOIDING = register("item_voiding", ItemVoidingCover::new); - public final static CoverDefinition ITEM_VOIDING_ADVANCED = register("item_voiding_advanced", + public static final Holder ITEM_VOIDING = REGISTRATE.cover("item_voiding", ItemVoidingCover::new); + public static final Holder ITEM_VOIDING_ADVANCED = REGISTRATE.cover("item_voiding_advanced", AdvancedItemVoidingCover::new); - public final static CoverDefinition FLUID_VOIDING = register("fluid_voiding", FluidVoidingCover::new); - public final static CoverDefinition FLUID_VOIDING_ADVANCED = register("fluid_voiding_advanced", + public static final Holder FLUID_VOIDING = REGISTRATE.cover("fluid_voiding", FluidVoidingCover::new); + public static final Holder FLUID_VOIDING_ADVANCED = REGISTRATE.cover("fluid_voiding_advanced", AdvancedFluidVoidingCover::new); // Detectors - public final static CoverDefinition ACTIVITY_DETECTOR = register("activity_detector", ActivityDetectorCover::new); - public final static CoverDefinition ACTIVITY_DETECTOR_ADVANCED = register("activity_detector_advanced", + public static final Holder ACTIVITY_DETECTOR = REGISTRATE.cover("activity_detector", ActivityDetectorCover::new); + public static final Holder ACTIVITY_DETECTOR_ADVANCED = REGISTRATE.cover("activity_detector_advanced", AdvancedActivityDetectorCover::new); - public final static CoverDefinition FLUID_DETECTOR = register("fluid_detector", FluidDetectorCover::new); - public final static CoverDefinition FLUID_DETECTOR_ADVANCED = register("fluid_detector_advanced", + public static final Holder FLUID_DETECTOR = REGISTRATE.cover("fluid_detector", FluidDetectorCover::new); + public static final Holder FLUID_DETECTOR_ADVANCED = REGISTRATE.cover("fluid_detector_advanced", AdvancedFluidDetectorCover::new); - public final static CoverDefinition ITEM_DETECTOR = register("item_detector", ItemDetectorCover::new); - public final static CoverDefinition ITEM_DETECTOR_ADVANCED = register("item_detector_advanced", + public static final Holder ITEM_DETECTOR = REGISTRATE.cover("item_detector", ItemDetectorCover::new); + public static final Holder ITEM_DETECTOR_ADVANCED = REGISTRATE.cover("item_detector_advanced", AdvancedItemDetectorCover::new); - public final static CoverDefinition ENERGY_DETECTOR = register("energy_detector", EnergyDetectorCover::new); - public final static CoverDefinition ENERGY_DETECTOR_ADVANCED = register("energy_detector_advanced", + public static final Holder ENERGY_DETECTOR = REGISTRATE.cover("energy_detector", EnergyDetectorCover::new); + public static final Holder ENERGY_DETECTOR_ADVANCED = REGISTRATE.cover("energy_detector_advanced", AdvancedEnergyDetectorCover::new); - public final static CoverDefinition MAINTENANCE_DETECTOR = register("maintenance_detector", + public static final Holder MAINTENANCE_DETECTOR = REGISTRATE.cover("maintenance_detector", MaintenanceDetectorCover::new); // Solar Panels - public final static CoverDefinition SOLAR_PANEL_BASIC = register("solar_panel", CoverSolarPanel::new); - public final static CoverDefinition[] SOLAR_PANEL = registerTiered("solar_panel", CoverSolarPanel::new, + public static final Holder SOLAR_PANEL_BASIC = REGISTRATE.cover("solar_panel", CoverSolarPanel::new); + public static final Holder[] SOLAR_PANEL = registerTiered(REGISTRATE, "solar_panel", CoverSolarPanel::new, () -> tier -> new SimpleCoverRenderer(GTCEu.id("block/cover/solar_panel")), ALL_TIERS_WITH_ULV); /////////////////////////////////////////////// // *********** UTIL METHODS ***********// /////////////////////////////////////////////// - - private static CoverDefinition register(String id, CoverDefinition.CoverBehaviourProvider behaviorCreator) { - return register(id, behaviorCreator, () -> () -> new SimpleCoverRenderer(GTCEu.id("block/cover/" + id))); - } - - private static CoverDefinition register(String id, CoverDefinition.CoverBehaviourProvider behaviorCreator, - Supplier> coverRenderer) { - return register(GTCEu.id(id), behaviorCreator, coverRenderer); - } - - public static CoverDefinition register(ResourceLocation id, CoverDefinition.CoverBehaviourProvider behaviorCreator, - Supplier> coverRenderer) { - var definition = new CoverDefinition(id, behaviorCreator, coverRenderer); - GTRegistries.register(GTRegistries.COVERS, definition.getId(), definition); - return definition; - } - - private static CoverDefinition[] registerTiered(String id, - CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, - Supplier> coverRenderer, - int... tiers) { + + @SuppressWarnings("unchecked") + public static Holder[] registerTiered(GTRegistrate registrate, String id, + CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, + Supplier> coverRenderer, + int... tiers) { return Arrays.stream(tiers).mapToObj(tier -> { var name = id + "." + GTValues.VN[tier].toLowerCase(Locale.ROOT); - return register(name, (def, coverable, side) -> behaviorCreator.create(def, coverable, side, tier), + return registrate.cover(name, (def, coverable, side) -> behaviorCreator.create(def, coverable, side, tier), () -> () -> coverRenderer.get().apply(tier)); - }).toArray(CoverDefinition[]::new); - } - - private static CoverDefinition[] registerTiered(String id, - CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, - int... tiers) { - return Arrays.stream(tiers).mapToObj(tier -> { - var name = id + "." + GTValues.VN[tier].toLowerCase(Locale.ROOT); - return register(name, (def, coverable, side) -> behaviorCreator.create(def, coverable, side, tier)); - }).toArray(CoverDefinition[]::new); + }).toArray(RegistryEntry[]::new); } public static void init() {} diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java index e4e183164e2..ef5253887ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java @@ -8,6 +8,8 @@ import com.gregtechceu.gtceu.api.item.component.IItemComponent; import com.gregtechceu.gtceu.common.data.item.GTItemAbilities; +import com.gregtechceu.gtceu.common.registry.GTRegistration; +import net.minecraft.core.Holder; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.Item; @@ -19,7 +21,7 @@ import java.util.function.BooleanSupplier; import java.util.function.Predicate; -public record CoverPlaceBehavior(CoverDefinition coverDefinition) implements IInteractionItem { +public record CoverPlaceBehavior(Holder coverDefinition) implements IInteractionItem { @Override public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext context) { @@ -31,9 +33,9 @@ public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext contex if (coverable != null) { var coverSide = ICoverable.rayTraceCoverableSide(coverable, player); if (coverSide != null && coverable.getCoverAtSide(coverSide) == null && - coverable.canPlaceCoverOnSide(coverDefinition, coverSide)) { + coverable.canPlaceCoverOnSide(coverDefinition.value(), coverSide)) { if (player instanceof ServerPlayer serverPlayer) { - boolean result = coverable.placeCoverOnSide(coverSide, itemStack, coverDefinition, serverPlayer); + boolean result = coverable.placeCoverOnSide(coverSide, itemStack, coverDefinition.value(), serverPlayer); if (result && !player.isCreative()) { itemStack.shrink(1); } @@ -50,8 +52,8 @@ public static boolean isCoverBehaviorItem(ItemStack itemStack, @Nullable Boolean Item item = itemStack.getItem(); if (item instanceof IComponentItem componentItem) { for (IItemComponent component : componentItem.getComponents()) { - if (component instanceof CoverPlaceBehavior(CoverDefinition definition)) { - if (canPlaceCover == null || canPlaceCover.test(definition)) { + if (component instanceof CoverPlaceBehavior(Holder definition)) { + if (canPlaceCover == null || canPlaceCover.test(definition.value())) { return true; } } diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java index f1e10c39b29..7c01739d57d 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java @@ -23,6 +23,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Holder; import net.minecraft.core.MappedRegistry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.gametest.framework.GameTestAssertPosException; @@ -275,9 +276,8 @@ public static CoverBehavior placeCover(GameTestHelper helper, MetaMachine machin CoverDefinition coverDefinition = null; if (stack.getItem() instanceof IComponentItem componentItem) { for (IItemComponent component : componentItem.getComponents()) { - if (component instanceof CoverPlaceBehavior coverPlaceBehavior) { - helper.assertTrue(coverDefinition == null, "stack has multiple coverPlaceBehaviours"); - coverDefinition = coverPlaceBehavior.coverDefinition(); + if (component instanceof CoverPlaceBehavior(Holder definition)) { + coverDefinition = definition.value(); } } } From 55bbb92990f0a5ff1e57c7c6b8b17fded2704275 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 12:30:10 +1000 Subject: [PATCH 23/45] update tool behaviours --- .../gregtechceu/gtceu/api/item/IGTTool.java | 2 +- .../api/item/tool/TreeFellingHelper.java | 2 +- .../gregtechceu/gtceu/common/CommonProxy.java | 11 +--- .../gtceu/common/data/GTToolBehaviors.java | 61 ++++++++----------- .../common/item/tool/ToolEventHandlers.java | 2 +- .../tool/behavior/AOEConfigUIBehavior.java | 2 +- .../tool/behavior/BlockRotatingBehavior.java | 2 +- .../tool/behavior/DisableShieldBehavior.java | 2 +- .../tool/behavior/EntityDamageBehavior.java | 2 +- .../item/tool/behavior/GrassPathBehavior.java | 2 +- .../tool/behavior/HarvestCropsBehavior.java | 2 +- .../tool/behavior/HarvestIceBehavior.java | 2 +- .../item/tool/behavior/HoeGroundBehavior.java | 2 +- .../item/tool/behavior/LogStripBehavior.java | 2 +- .../item/tool/behavior/PlungerBehavior.java | 2 +- .../tool/behavior/ProspectingBehavior.java | 2 +- .../tool/behavior/RotateRailBehavior.java | 2 +- .../item/tool/behavior/ScrapeBehavior.java | 2 +- .../tool/behavior/ToolModeSwitchBehavior.java | 2 +- .../tool/behavior/TorchPlaceBehavior.java | 2 +- .../tool/behavior/TreeFellingBehavior.java | 2 +- .../item/tool/behavior/WaxOffBehavior.java | 2 +- 22 files changed, 48 insertions(+), 64 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java index ccd1fadee73..42295c70913 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java @@ -283,7 +283,7 @@ default int getTotalHarvestLevel() { return; } if (!areaOfEffectBlockBreakRoutine(stack, serverPlayer, pos)) { - var behavior = getBehaviorsComponent(stack).getBehavior(GTToolBehaviors.TREE_FELLING); + var behavior = getBehaviorsComponent(stack).getBehavior(GTToolBehaviors.TREE_FELLING.value()); if (behavior != null && behavior.isEnabled() && state.is(BlockTags.LOGS)) { TreeFellingHelper.fellTree(stack, player.level(), state, pos, player); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java index ae53be60be6..a667ed8d696 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/TreeFellingHelper.java @@ -91,7 +91,7 @@ public static void onWorldTick(LevelTickEvent.Pre event) { if (event.getLevel() == helper.player.level()) { ItemStack held = helper.player.getMainHandItem(); if (helper.player.isRemoved() || helper.orderedBlocks.isEmpty() || helper.tool.isEmpty() || - !getBehaviorsComponent(held).hasBehavior(GTToolBehaviors.TREE_FELLING)) { + !getBehaviorsComponent(held).hasBehavior(GTToolBehaviors.TREE_FELLING.value())) { iterator.remove(); continue; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index e90a0b43197..aafb4e7b7de 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -2,8 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.addon.AddonFinder; -import com.gregtechceu.gtceu.api.addon.IGTAddon; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.GTCapability; import com.gregtechceu.gtceu.api.capability.compat.EUToFEProvider; @@ -119,7 +117,6 @@ import com.tterrag.registrate.providers.RegistrateProvider; import com.tterrag.registrate.util.nullness.NonNullConsumer; import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import org.jetbrains.annotations.ApiStatus; import java.util.Arrays; import java.util.List; @@ -146,7 +143,7 @@ public static void init(final IEventBus modBus) { GTElements.init(); MaterialIconSet.init(); MaterialIconType.init(); - initMaterials(); + GTMaterials.init(); GTMedicalConditions.init(); TagPrefix.init(); @@ -218,12 +215,6 @@ public static void init(final IEventBus modBus) { SpoilableBehavior.init(); } - @ApiStatus.Internal - public static void initMaterials() { - GTCEu.LOGGER.info("Registering GTCEu Materials"); - GTMaterials.init(); - } - // Fire post material events after all other material registry events. @SubscribeEvent(priority = EventPriority.LOWEST) public static void onRegisterLowest(RegisterEvent event) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java index 18a41a6e53e..89d0899dd99 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java @@ -1,49 +1,42 @@ package com.gregtechceu.gtceu.common.data; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.item.tool.behavior.IToolBehavior; import com.gregtechceu.gtceu.api.item.tool.behavior.ToolBehaviorType; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.item.tool.behavior.*; +import com.gregtechceu.gtceu.common.registry.GTRegistration; +import com.mojang.serialization.Codec; +import com.tterrag.registrate.util.entry.RegistryEntry; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; public class GTToolBehaviors { private GTToolBehaviors() {} // spotless:off - public static final ToolBehaviorType AOE_CONFIG_UI = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("aoe_config_ui"), new ToolBehaviorType<>(AOEConfigUIBehavior.CODEC, AOEConfigUIBehavior.STREAM_CODEC)); - public static final ToolBehaviorType BLOCK_ROTATING = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("rotate_block"), new ToolBehaviorType<>(BlockRotatingBehavior.CODEC, BlockRotatingBehavior.STREAM_CODEC)); - public static final ToolBehaviorType DISABLE_SHIELD = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("disable_shield"), new ToolBehaviorType<>(DisableShieldBehavior.CODEC, DisableShieldBehavior.STREAM_CODEC)); - public static final ToolBehaviorType ENTITY_DAMAGE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("entity_damage"), new ToolBehaviorType<>(EntityDamageBehavior.CODEC, EntityDamageBehavior.STREAM_CODEC)); - public static final ToolBehaviorType PATH = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("path"), new ToolBehaviorType<>(GrassPathBehavior.CODEC, GrassPathBehavior.STREAM_CODEC)); - public static final ToolBehaviorType HARVEST_CROPS = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("harvest_crops"), new ToolBehaviorType<>(HarvestCropsBehavior.CODEC, HarvestCropsBehavior.STREAM_CODEC)); - public static final ToolBehaviorType HARVEST_ICE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("harvest_ice"), new ToolBehaviorType<>(HarvestIceBehavior.CODEC, HarvestIceBehavior.STREAM_CODEC)); - public static final ToolBehaviorType HOE_GROUND = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("hoe_ground"), new ToolBehaviorType<>(HoeGroundBehavior.CODEC, HoeGroundBehavior.STREAM_CODEC)); - public static final ToolBehaviorType STRIP_LOG = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("strip_log"), new ToolBehaviorType<>(LogStripBehavior.CODEC, LogStripBehavior.STREAM_CODEC)); - public static final ToolBehaviorType PLUNGER = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("plunger"), new ToolBehaviorType<>(PlungerBehavior.CODEC, PlungerBehavior.STREAM_CODEC)); - public static final ToolBehaviorType ROTATE_RAIL = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("rotate_rail"), new ToolBehaviorType<>(RotateRailBehavior.CODEC, RotateRailBehavior.STREAM_CODEC)); - public static final ToolBehaviorType SCRAPE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("scrape"), new ToolBehaviorType<>(ScrapeBehavior.CODEC, ScrapeBehavior.STREAM_CODEC)); - public static final ToolBehaviorType TORCH_PLACE = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("torch_place"), new ToolBehaviorType<>(TorchPlaceBehavior.CODEC, TorchPlaceBehavior.STREAM_CODEC)); - public static final ToolBehaviorType TREE_FELLING = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("tree_felling"), new ToolBehaviorType<>(TreeFellingBehavior.CODEC, TreeFellingBehavior.STREAM_CODEC)); - public static final ToolBehaviorType WAX_OFF = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("wax_off"), new ToolBehaviorType<>(WaxOffBehavior.CODEC, WaxOffBehavior.STREAM_CODEC)); - public static final ToolBehaviorType MODE_SWITCH = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("mode_switch"), new ToolBehaviorType<>(ToolModeSwitchBehavior.CODEC, ToolModeSwitchBehavior.STREAM_CODEC)); - public static final ToolBehaviorType PROSPECTING = GTRegistries.register(GTRegistries.TOOL_BEHAVIORS, - GTCEu.id("prospecting"), new ToolBehaviorType<>(ProspectingBehavior.CODEC, ProspectingBehavior.STREAM_CODEC)); + public static final RegistryEntry, ToolBehaviorType> AOE_CONFIG_UI = register("aoe_config_ui", AOEConfigUIBehavior.CODEC, AOEConfigUIBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> BLOCK_ROTATING = register("rotate_block", BlockRotatingBehavior.CODEC, BlockRotatingBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> DISABLE_SHIELD = register("disable_shield", DisableShieldBehavior.CODEC, DisableShieldBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> ENTITY_DAMAGE = register("entity_damage", EntityDamageBehavior.CODEC, EntityDamageBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> PATH = register("path", GrassPathBehavior.CODEC, GrassPathBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> HARVEST_CROPS = register("harvest_crops", HarvestCropsBehavior.CODEC, HarvestCropsBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> HARVEST_ICE = register("harvest_ice", HarvestIceBehavior.CODEC, HarvestIceBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> HOE_GROUND = register("hoe_ground", HoeGroundBehavior.CODEC, HoeGroundBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> STRIP_LOG = register("strip_log", LogStripBehavior.CODEC, LogStripBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> PLUNGER = register("plunger", PlungerBehavior.CODEC, PlungerBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> ROTATE_RAIL = register("rotate_rail", RotateRailBehavior.CODEC, RotateRailBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> SCRAPE = register("scrape", ScrapeBehavior.CODEC, ScrapeBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> TORCH_PLACE = register("torch_place", TorchPlaceBehavior.CODEC, TorchPlaceBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> TREE_FELLING = register("tree_felling", TreeFellingBehavior.CODEC, TreeFellingBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> WAX_OFF = register("wax_off", WaxOffBehavior.CODEC, WaxOffBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> MODE_SWITCH = register("mode_switch", ToolModeSwitchBehavior.CODEC, ToolModeSwitchBehavior.STREAM_CODEC); + public static final RegistryEntry, ToolBehaviorType> PROSPECTING = register("prospecting", ProspectingBehavior.CODEC, ProspectingBehavior.STREAM_CODEC); // spotless:on public static void init() {} + + private static > RegistryEntry, ToolBehaviorType> register(String name, Codec codec, StreamCodec streamCodec) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.TOOL_BEHAVIOR, () -> new ToolBehaviorType<>(codec, streamCodec)); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java index afaced1e396..03a97c2e473 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/ToolEventHandlers.java @@ -122,7 +122,7 @@ public static List onHarvestDrops(Player player, ItemStack tool, Serv ToolBehaviors behaviorTag = ToolHelper.getBehaviorsComponent(tool); Block block = state.getBlock(); - if (!isSilkTouch && state.is(BlockTags.ICE) && behaviorTag.hasBehavior(GTToolBehaviors.HARVEST_ICE)) { + if (!isSilkTouch && state.is(BlockTags.ICE) && behaviorTag.hasBehavior(GTToolBehaviors.HARVEST_ICE.value())) { Item iceBlock = block.asItem(); if (drops.stream().noneMatch(drop -> drop.getItem() == iceBlock)) { drops.add(new ItemStack(iceBlock)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java index df80eddfc4d..cf8ca55567c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/AOEConfigUIBehavior.java @@ -134,6 +134,6 @@ public ModularPanel buildUI(PlayerInventoryGuiData data, PanelSyncManager @Override public ToolBehaviorType getType() { - return GTToolBehaviors.AOE_CONFIG_UI; + return GTToolBehaviors.AOE_CONFIG_UI.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java index ab75e841ccd..77dda604c48 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/BlockRotatingBehavior.java @@ -99,7 +99,7 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.BLOCK_ROTATING; + return GTToolBehaviors.BLOCK_ROTATING.value(); } public static BlockHitResult retraceBlock(BlockGetter level, Player player, BlockPos pos) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java index 3e2ceef0cdc..7ae91132479 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/DisableShieldBehavior.java @@ -32,7 +32,7 @@ public boolean canDisableShield(ItemStack stack, ItemStack shield, LivingEntity @Override public ToolBehaviorType getType() { - return GTToolBehaviors.DISABLE_SHIELD; + return GTToolBehaviors.DISABLE_SHIELD.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java index 26bd54b44e0..d0335aa33c5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/EntityDamageBehavior.java @@ -166,7 +166,7 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.ENTITY_DAMAGE; + return GTToolBehaviors.ENTITY_DAMAGE.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java index 612f85d1739..6b0c7cfe85d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/GrassPathBehavior.java @@ -116,6 +116,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.PATH; + return GTToolBehaviors.PATH.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java index 6fa8a524cd2..62bf6e05bc3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestCropsBehavior.java @@ -122,6 +122,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.HARVEST_CROPS; + return GTToolBehaviors.HARVEST_CROPS.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java index 824ed35ecb1..de3b2511c0c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HarvestIceBehavior.java @@ -31,7 +31,7 @@ protected HarvestIceBehavior() {/**/} @Override public ToolBehaviorType getType() { - return GTToolBehaviors.HARVEST_ICE; + return GTToolBehaviors.HARVEST_ICE.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java index c7e08e14d65..c9a74de50f9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/HoeGroundBehavior.java @@ -116,6 +116,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.HOE_GROUND; + return GTToolBehaviors.HOE_GROUND.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java index 2e57b597a89..8a085d8e4d2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/LogStripBehavior.java @@ -105,6 +105,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.STRIP_LOG; + return GTToolBehaviors.STRIP_LOG.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java index dc98cea1198..8a03164b6eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/PlungerBehavior.java @@ -85,7 +85,7 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.PLUNGER; + return GTToolBehaviors.PLUNGER.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java index 53e4c1600f6..761f4e663e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ProspectingBehavior.java @@ -111,6 +111,6 @@ private static List getSurroundingBlocks(Direction dir) { @Override public ToolBehaviorType getType() { - return GTToolBehaviors.PROSPECTING; + return GTToolBehaviors.PROSPECTING.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java index 43dbaada20d..91a6678772a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/RotateRailBehavior.java @@ -63,6 +63,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext context @Override public ToolBehaviorType getType() { - return GTToolBehaviors.ROTATE_RAIL; + return GTToolBehaviors.ROTATE_RAIL.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java index f85a9017951..8570a2e72d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ScrapeBehavior.java @@ -106,6 +106,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.SCRAPE; + return GTToolBehaviors.SCRAPE.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java index e6f6f13edb4..77c3f89f4cf 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java @@ -110,7 +110,7 @@ public boolean canPerformAction(ItemStack stack, ItemAbility action) { @Override public ToolBehaviorType getType() { - return GTToolBehaviors.MODE_SWITCH; + return GTToolBehaviors.MODE_SWITCH.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java index d94570f790d..2d2a6d450a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TorchPlaceBehavior.java @@ -140,7 +140,7 @@ private static boolean checkAndPlaceTorch(UseOnContext context, ItemStack slotSt @Override public ToolBehaviorType getType() { - return GTToolBehaviors.TORCH_PLACE; + return GTToolBehaviors.TORCH_PLACE.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java index a8fdbbdad65..9e459e42123 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/TreeFellingBehavior.java @@ -48,7 +48,7 @@ protected TreeFellingBehavior(boolean enabled) { @Override public ToolBehaviorType getType() { - return GTToolBehaviors.TREE_FELLING; + return GTToolBehaviors.TREE_FELLING.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java index 92d6d391c46..b527e14e36c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/WaxOffBehavior.java @@ -108,6 +108,6 @@ public void addInformation(@NotNull ItemStack stack, Item.TooltipContext Level, @Override public ToolBehaviorType getType() { - return GTToolBehaviors.WAX_OFF; + return GTToolBehaviors.WAX_OFF.value(); } } From d127575f37b87a4fba043a77c37cd703af14a177 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 12:37:12 +1000 Subject: [PATCH 24/45] update placement modifier types --- .../worldgen/modifier/DimensionFilter.java | 5 +-- .../worldgen/modifier/FrequencyModifier.java | 5 +-- .../modifier/GTPlacementModifierTypes.java | 31 +++++++++++++++++++ .../gregtechceu/gtceu/common/CommonProxy.java | 4 ++- .../gtceu/common/data/GTFeatures.java | 14 +-------- .../modifier/RubberTreeChancePlacement.java | 7 ++--- 6 files changed, 39 insertions(+), 27 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java index d524eb10cc1..b57f809809c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java @@ -19,9 +19,6 @@ public class DimensionFilter extends PlacementFilter { - public static final PlacementModifierType DIMENSION_FILTER = GTRegistries - .register(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, GTCEu.id("dimension"), () -> DimensionFilter.CODEC); - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( RegistryCodecs.homogeneousList(Registries.DIMENSION_TYPE).fieldOf("dimension_id") .forGetter(filter -> filter.dimensionId)) @@ -40,6 +37,6 @@ protected boolean shouldPlace(PlacementContext context, RandomSource random, Blo @Override public PlacementModifierType type() { - return DIMENSION_FILTER; + return GTPlacementModifierTypes.DIMENSION_FILTER.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java index b67ee0bec32..57fbd848738 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java @@ -18,9 +18,6 @@ public class FrequencyModifier extends PlacementModifier { - public static final PlacementModifierType FREQUENCY_MODIFIER = GTRegistries - .register(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, GTCEu.id("frequency"), () -> FrequencyModifier.CODEC); - public static final MapCodec CODEC = ExtraCodecs.POSITIVE_FLOAT.fieldOf("chance") .xmap(FrequencyModifier::new, (modifier) -> modifier.frequency); @@ -46,6 +43,6 @@ public int getCount(float frequency, RandomSource random) { @Override public PlacementModifierType type() { - return FREQUENCY_MODIFIER; + return GTPlacementModifierTypes.FREQUENCY_MODIFIER.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java new file mode 100644 index 00000000000..a67ecf7bc28 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java @@ -0,0 +1,31 @@ +package com.gregtechceu.gtceu.api.data.worldgen.modifier; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.common.worldgen.modifier.RubberTreeChancePlacement; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.level.levelgen.placement.PlacementModifierType; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +public class GTPlacementModifierTypes { + + private static final DeferredRegister> PLACEMENT_MODIFIERS = DeferredRegister.create(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, GTCEu.MOD_ID); + + //spotless:off + public static final DeferredHolder, PlacementModifierType> DIMENSION_FILTER = + PLACEMENT_MODIFIERS.register("dimension", () -> () -> DimensionFilter.CODEC); + + public static final DeferredHolder, PlacementModifierType> FREQUENCY_MODIFIER = + PLACEMENT_MODIFIERS.register("frequency", () -> () -> FrequencyModifier.CODEC); + + public static final DeferredHolder, PlacementModifierType> RUBBER_TREE_CHANCE_PLACEMENT = + PLACEMENT_MODIFIERS.register("rubber_tree_chance", () -> () -> RubberTreeChancePlacement.CODEC); + + //spotless:on + + public static void init(IEventBus modBus) { + PLACEMENT_MODIFIERS.register(modBus); + } + +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index aafb4e7b7de..89ff991173f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -17,6 +17,7 @@ import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.IndicatorGenerators; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerators; +import com.gregtechceu.gtceu.api.data.worldgen.modifier.GTPlacementModifierTypes; import com.gregtechceu.gtceu.api.events.ModifyMachineEvent; import com.gregtechceu.gtceu.api.events.RegisterSpoilablesEvent; import com.gregtechceu.gtceu.api.item.IComponentItem; @@ -190,7 +191,8 @@ public static void init(final IEventBus modBus) { GregTechDatagen.initPost(); GTValueProviderTypes.init(modBus); - GTFeatures.register(modBus); + GTFeatures.init(modBus); + GTPlacementModifierTypes.init(modBus); VeinGenerators.registerAddonGenerators(); IndicatorGenerators.registerAddonGenerators(); WaypointManager.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTFeatures.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTFeatures.java index 122fa19927d..fae7c2df045 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTFeatures.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTFeatures.java @@ -1,12 +1,8 @@ package com.gregtechceu.gtceu.common.data; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.data.worldgen.modifier.BiomePlacement; -import com.gregtechceu.gtceu.api.data.worldgen.modifier.DimensionFilter; -import com.gregtechceu.gtceu.api.data.worldgen.modifier.FrequencyModifier; import com.gregtechceu.gtceu.common.worldgen.feature.FluidSproutFeature; import com.gregtechceu.gtceu.common.worldgen.feature.StoneBlobFeature; -import com.gregtechceu.gtceu.common.worldgen.modifier.RubberTreeChancePlacement; import net.minecraft.core.registries.Registries; import net.minecraft.world.level.levelgen.feature.Feature; @@ -26,15 +22,7 @@ public class GTFeatures { "fluid_sprout", FluidSproutFeature::new); - private static void init() { - Object inst = FrequencyModifier.FREQUENCY_MODIFIER; // seemingly useless access to init the class in time - inst = DimensionFilter.DIMENSION_FILTER; - inst = BiomePlacement.BIOME_PLACEMENT; - inst = RubberTreeChancePlacement.RUBBER_TREE_CHANCE_PLACEMENT; - } - - public static void register(IEventBus modEventBus) { - init(); + public static void init(IEventBus modEventBus) { FEATURES.register(modEventBus); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java b/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java index f451e9ecc12..309b0bdbc55 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java +++ b/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.worldgen.modifier; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.data.worldgen.modifier.GTPlacementModifierTypes; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -15,10 +16,6 @@ public class RubberTreeChancePlacement extends RepeatingPlacement { - public static final PlacementModifierType RUBBER_TREE_CHANCE_PLACEMENT = GTRegistries - .register(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, GTCEu.id("rubber_tree_chance"), - () -> RubberTreeChancePlacement.CODEC); - public static final RubberTreeChancePlacement INSTANCE = new RubberTreeChancePlacement(); public static final MapCodec CODEC = MapCodec.unit(INSTANCE); @@ -29,6 +26,6 @@ protected int count(RandomSource random, @NotNull BlockPos pos) { @Override public PlacementModifierType type() { - return RUBBER_TREE_CHANCE_PLACEMENT; + return GTPlacementModifierTypes.RUBBER_TREE_CHANCE_PLACEMENT.value(); } } From 57b9c50a812701df6ec4c642ed86798375f35c93 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 12:51:37 +1000 Subject: [PATCH 25/45] switch recipe conditions to be deferred --- .../api/data/worldgen/WorldGenLayers.java | 3 +- .../worldgen/modifier/BiomePlacement.java | 8 +-- .../worldgen/modifier/DimensionFilter.java | 4 -- .../worldgen/modifier/FrequencyModifier.java | 4 -- .../modifier/GTPlacementModifierTypes.java | 10 +++- .../trait/notifiable/NotifiableFluidTank.java | 1 - .../NotifiableItemStackHandler.java | 1 - .../api/registry/registrate/GTRegistrate.java | 13 +++-- .../gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../gtceu/common/data/GTCovers.java | 56 ++++++++++++------- .../common/data/GTRecipeCapabilities.java | 3 +- .../gtceu/common/data/GTRecipeConditions.java | 45 ++++++++------- .../gtceu/common/data/GTSoundEntries.java | 3 +- .../gtceu/common/data/GTToolBehaviors.java | 17 ++++-- .../item/behavior/CoverPlaceBehavior.java | 4 +- .../condition/AdjacentBlockCondition.java | 2 +- .../condition/AdjacentFluidCondition.java | 2 +- .../recipe/condition/BiomeCondition.java | 2 +- .../recipe/condition/BiomeTagCondition.java | 2 +- .../recipe/condition/CleanroomCondition.java | 2 +- .../recipe/condition/DaytimeCondition.java | 2 +- .../recipe/condition/DimensionCondition.java | 2 +- .../recipe/condition/EUToStartCondition.java | 2 +- .../EnvironmentalHazardCondition.java | 2 +- .../recipe/condition/FTBQuestCondition.java | 2 +- .../condition/HeraclesQuestCondition.java | 2 +- .../recipe/condition/PositionYCondition.java | 2 +- .../recipe/condition/RainingCondition.java | 2 +- .../recipe/condition/ResearchCondition.java | 2 +- .../recipe/condition/ThunderCondition.java | 2 +- .../recipe/condition/VentCondition.java | 2 +- .../modifier/RubberTreeChancePlacement.java | 3 - .../gtceu/data/loot/ChestGenHooks.java | 22 +++++--- .../integration/kjs/GregTechKubeJSPlugin.java | 3 +- .../worldgen/WorldGenLayerBuilderJS.java | 2 +- .../recipe/components/GTRecipeComponents.java | 1 - .../gtceu/gametest/util/TestUtils.java | 7 +-- 37 files changed, 130 insertions(+), 114 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java index 0d019f2406c..1514c334807 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java @@ -26,6 +26,5 @@ public class WorldGenLayers { GTCEu.id("endstone"), () -> WorldGeneratorUtils.END_ORE_REPLACEABLES, Set.of(Level.END)); - public static void init() { - } + public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java index b7c7382b2b0..3ab0a58be64 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java @@ -1,11 +1,8 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.data.worldgen.BiomeWeightModifier; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.util.RandomSource; import net.minecraft.world.level.levelgen.placement.PlacementContext; import net.minecraft.world.level.levelgen.placement.PlacementModifier; @@ -18,9 +15,6 @@ public class BiomePlacement extends PlacementModifier { - public static final PlacementModifierType BIOME_PLACEMENT = GTRegistries.register( - BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, GTCEu.id("biome_placement"), () -> BiomePlacement.CODEC); - public static final MapCodec CODEC = BiomeWeightModifier.CODEC.listOf().fieldOf("modifiers") .xmap(BiomePlacement::new, placement -> placement.modifiers); @@ -45,6 +39,6 @@ public Stream getPositions(PlacementContext context, RandomSource rand @Override public PlacementModifierType type() { - return BIOME_PLACEMENT; + return GTPlacementModifierTypes.BIOME_PLACEMENT.value(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java index b57f809809c..0a34355d6d8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java @@ -1,12 +1,8 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.registry.GTRegistries; - import net.minecraft.core.BlockPos; import net.minecraft.core.HolderSet; import net.minecraft.core.RegistryCodecs; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; import net.minecraft.util.RandomSource; import net.minecraft.world.level.dimension.DimensionType; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java index 57fbd848738..99f2f4d72ff 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java @@ -1,10 +1,6 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.registry.GTRegistries; - import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.util.ExtraCodecs; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java index a67ecf7bc28..fed64a5c4f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.common.worldgen.modifier.RubberTreeChancePlacement; + import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.world.level.levelgen.placement.PlacementModifierType; import net.neoforged.bus.api.IEventBus; @@ -10,9 +11,10 @@ public class GTPlacementModifierTypes { - private static final DeferredRegister> PLACEMENT_MODIFIERS = DeferredRegister.create(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, GTCEu.MOD_ID); + private static final DeferredRegister> PLACEMENT_MODIFIERS = DeferredRegister + .create(BuiltInRegistries.PLACEMENT_MODIFIER_TYPE, GTCEu.MOD_ID); - //spotless:off + // spotless:off public static final DeferredHolder, PlacementModifierType> DIMENSION_FILTER = PLACEMENT_MODIFIERS.register("dimension", () -> () -> DimensionFilter.CODEC); @@ -22,10 +24,12 @@ public class GTPlacementModifierTypes { public static final DeferredHolder, PlacementModifierType> RUBBER_TREE_CHANCE_PLACEMENT = PLACEMENT_MODIFIERS.register("rubber_tree_chance", () -> () -> RubberTreeChancePlacement.CODEC); + public static final DeferredHolder, PlacementModifierType> BIOME_PLACEMENT = + PLACEMENT_MODIFIERS.register("biome_placement", () -> () -> BiomePlacement.CODEC); + //spotless:on public static void init(IEventBus modBus) { PLACEMENT_MODIFIERS.register(modBus); } - } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java index a2a16c8e0df..56735d0a6fc 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java @@ -12,7 +12,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank; import com.gregtechceu.gtceu.api.transfer.fluid.IFluidHandlerModifiable; -import com.gregtechceu.gtceu.common.data.GTRecipeCapabilities; import com.gregtechceu.gtceu.utils.GTTransferUtils; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java index bce8b6d695e..18f8b3af1f3 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableItemStackHandler.java @@ -18,7 +18,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler; -import com.gregtechceu.gtceu.common.data.GTRecipeCapabilities; import com.gregtechceu.gtceu.utils.GTTransferUtils; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 290157def23..8b1fbce6cb0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -14,7 +14,6 @@ import com.gregtechceu.gtceu.client.renderer.cover.SimpleCoverRenderer; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; -import net.minecraft.core.Holder; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -197,13 +196,17 @@ public GTRegistrate registerEventListeners(IEventBus bus) { ///// Covers - public RegistryEntry cover(String name, CoverDefinition.CoverBehaviourProvider behaviorCreator, + public RegistryEntry cover(String name, + CoverDefinition.CoverBehaviourProvider behaviorCreator, Supplier> coverRenderer) { - return simple(name, GTRegistries.Keys.COVER, () -> new CoverDefinition(makeResourceLocation(name), behaviorCreator, coverRenderer)); + return simple(name, GTRegistries.Keys.COVER, + () -> new CoverDefinition(makeResourceLocation(name), behaviorCreator, coverRenderer)); } - public RegistryEntry cover(String name, CoverDefinition.CoverBehaviourProvider behaviorCreator) { - return cover(name, behaviorCreator, () -> () -> new SimpleCoverRenderer(ResourceLocation.fromNamespaceAndPath(getModid(), "block/cover/" + name))); + public RegistryEntry cover(String name, + CoverDefinition.CoverBehaviourProvider behaviorCreator) { + return cover(name, behaviorCreator, () -> () -> new SimpleCoverRenderer( + ResourceLocation.fromNamespaceAndPath(getModid(), "block/cover/" + name))); } ///// Sound Builders diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 89ff991173f..6a158f88b95 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -200,7 +200,7 @@ public static void init(final IEventBus modBus) { CustomBlockRotations.init(); SyncedKeyMappings.init(); MachineOwner.init(); - ChestGenHooks.init(); + ChestGenHooks.init(modBus); GTCreativeModeTabs.init(); GTAttachmentTypes.init(modBus); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java index eb2f4f096fb..b9504cbf052 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTCovers.java @@ -16,10 +16,10 @@ import com.gregtechceu.gtceu.common.cover.voiding.FluidVoidingCover; import com.gregtechceu.gtceu.common.cover.voiding.ItemVoidingCover; -import com.tterrag.registrate.util.entry.RegistryEntry; +import net.minecraft.core.Holder; +import com.tterrag.registrate.util.entry.RegistryEntry; import it.unimi.dsi.fastutil.ints.Int2ObjectFunction; -import net.minecraft.core.Holder; import java.util.Arrays; import java.util.Locale; @@ -41,9 +41,12 @@ public class GTCovers { public static final Holder ITEM_FILTER = REGISTRATE.cover("item_filter", ItemFilterCover::new); public static final Holder FLUID_FILTER = REGISTRATE.cover("fluid_filter", FluidFilterCover::new); - public static final Holder INFINITE_WATER = REGISTRATE.cover("infinite_water", InfiniteWaterCover::new); - public static final Holder ENDER_FLUID_LINK = REGISTRATE.cover("ender_fluid_link", EnderFluidLinkCover::new); - public static final Holder ENDER_ITEM_LINK = REGISTRATE.cover("ender_item_link", EnderItemLinkCover::new); + public static final Holder INFINITE_WATER = REGISTRATE.cover("infinite_water", + InfiniteWaterCover::new); + public static final Holder ENDER_FLUID_LINK = REGISTRATE.cover("ender_fluid_link", + EnderFluidLinkCover::new); + public static final Holder ENDER_ITEM_LINK = REGISTRATE.cover("ender_item_link", + EnderItemLinkCover::new); public static final Holder ENDER_REDSTONE_LINK = REGISTRATE.cover("ender_redstone_link", EnderRedstoneLinkCover::new); public static final Holder SHUTTER = REGISTRATE.cover("shutter", ShutterCover::new); @@ -59,7 +62,8 @@ public class GTCovers { GTCEu.id("block/cover/conveyor_inverted_emissive")), ALL_TIERS); - public static final Holder[] ROBOT_ARMS = registerTiered(REGISTRATE, "robot_arm", RobotArmCover::new, + public static final Holder[] ROBOT_ARMS = registerTiered(REGISTRATE, "robot_arm", + RobotArmCover::new, () -> tier -> new IOCoverRenderer( GTCEu.id("block/cover/arm"), null, @@ -67,13 +71,15 @@ public class GTCovers { GTCEu.id("block/cover/arm_inverted_emissive")), ALL_TIERS); - public static final Holder[] PUMPS = registerTiered(REGISTRATE,"pump", PumpCover::new, + public static final Holder[] PUMPS = registerTiered(REGISTRATE, "pump", PumpCover::new, () -> tier -> IOCoverRenderer.PUMP_LIKE_COVER_RENDERER, ALL_TIERS); - public static final Holder[] FLUID_REGULATORS = registerTiered(REGISTRATE,"fluid_regulator", FluidRegulatorCover::new, + public static final Holder[] FLUID_REGULATORS = registerTiered(REGISTRATE, "fluid_regulator", + FluidRegulatorCover::new, () -> tier -> IOCoverRenderer.PUMP_LIKE_COVER_RENDERER, ALL_TIERS); - public static final Holder COMPUTER_MONITOR = REGISTRATE.cover("computer_monitor", ComputerMonitorCover::new); + public static final Holder COMPUTER_MONITOR = REGISTRATE.cover("computer_monitor", + ComputerMonitorCover::new); public static final Holder MACHINE_CONTROLLER = REGISTRATE.cover("machine_controller", MachineControllerCover::new); @@ -82,40 +88,48 @@ public class GTCovers { public static final Holder ITEM_VOIDING = REGISTRATE.cover("item_voiding", ItemVoidingCover::new); public static final Holder ITEM_VOIDING_ADVANCED = REGISTRATE.cover("item_voiding_advanced", AdvancedItemVoidingCover::new); - public static final Holder FLUID_VOIDING = REGISTRATE.cover("fluid_voiding", FluidVoidingCover::new); + public static final Holder FLUID_VOIDING = REGISTRATE.cover("fluid_voiding", + FluidVoidingCover::new); public static final Holder FLUID_VOIDING_ADVANCED = REGISTRATE.cover("fluid_voiding_advanced", AdvancedFluidVoidingCover::new); // Detectors - public static final Holder ACTIVITY_DETECTOR = REGISTRATE.cover("activity_detector", ActivityDetectorCover::new); - public static final Holder ACTIVITY_DETECTOR_ADVANCED = REGISTRATE.cover("activity_detector_advanced", + public static final Holder ACTIVITY_DETECTOR = REGISTRATE.cover("activity_detector", + ActivityDetectorCover::new); + public static final Holder ACTIVITY_DETECTOR_ADVANCED = REGISTRATE.cover( + "activity_detector_advanced", AdvancedActivityDetectorCover::new); - public static final Holder FLUID_DETECTOR = REGISTRATE.cover("fluid_detector", FluidDetectorCover::new); + public static final Holder FLUID_DETECTOR = REGISTRATE.cover("fluid_detector", + FluidDetectorCover::new); public static final Holder FLUID_DETECTOR_ADVANCED = REGISTRATE.cover("fluid_detector_advanced", AdvancedFluidDetectorCover::new); - public static final Holder ITEM_DETECTOR = REGISTRATE.cover("item_detector", ItemDetectorCover::new); + public static final Holder ITEM_DETECTOR = REGISTRATE.cover("item_detector", + ItemDetectorCover::new); public static final Holder ITEM_DETECTOR_ADVANCED = REGISTRATE.cover("item_detector_advanced", AdvancedItemDetectorCover::new); - public static final Holder ENERGY_DETECTOR = REGISTRATE.cover("energy_detector", EnergyDetectorCover::new); + public static final Holder ENERGY_DETECTOR = REGISTRATE.cover("energy_detector", + EnergyDetectorCover::new); public static final Holder ENERGY_DETECTOR_ADVANCED = REGISTRATE.cover("energy_detector_advanced", AdvancedEnergyDetectorCover::new); public static final Holder MAINTENANCE_DETECTOR = REGISTRATE.cover("maintenance_detector", MaintenanceDetectorCover::new); // Solar Panels - public static final Holder SOLAR_PANEL_BASIC = REGISTRATE.cover("solar_panel", CoverSolarPanel::new); - public static final Holder[] SOLAR_PANEL = registerTiered(REGISTRATE, "solar_panel", CoverSolarPanel::new, + public static final Holder SOLAR_PANEL_BASIC = REGISTRATE.cover("solar_panel", + CoverSolarPanel::new); + public static final Holder[] SOLAR_PANEL = registerTiered(REGISTRATE, "solar_panel", + CoverSolarPanel::new, () -> tier -> new SimpleCoverRenderer(GTCEu.id("block/cover/solar_panel")), ALL_TIERS_WITH_ULV); /////////////////////////////////////////////// // *********** UTIL METHODS ***********// /////////////////////////////////////////////// - + @SuppressWarnings("unchecked") public static Holder[] registerTiered(GTRegistrate registrate, String id, - CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, - Supplier> coverRenderer, - int... tiers) { + CoverDefinition.TieredCoverBehaviourProvider behaviorCreator, + Supplier> coverRenderer, + int... tiers) { return Arrays.stream(tiers).mapToObj(tier -> { var name = id + "." + GTValues.VN[tier].toLowerCase(Locale.ROOT); return registrate.cover(name, (def, coverable, side) -> behaviorCreator.create(def, coverable, side, tier), diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java index 4392469a4a9..ea3f1d41792 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeCapabilities.java @@ -4,11 +4,12 @@ import com.gregtechceu.gtceu.api.recipe.ingredient.EnergyStack; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.tterrag.registrate.util.entry.RegistryEntry; import net.minecraft.world.level.block.state.BlockState; import net.neoforged.neoforge.common.crafting.SizedIngredient; import net.neoforged.neoforge.fluids.crafting.SizedFluidIngredient; +import com.tterrag.registrate.util.entry.RegistryEntry; + import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; public class GTRecipeCapabilities { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java index 7e85576b713..cc98474af51 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeConditions.java @@ -5,31 +5,33 @@ import com.gregtechceu.gtceu.api.recipe.condition.RecipeConditionType; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.recipe.condition.*; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.mojang.serialization.MapCodec; +import com.tterrag.registrate.util.entry.RegistryEntry; public final class GTRecipeConditions { private GTRecipeConditions() {} // spotless:off - public static final RecipeConditionType BIOME = register("biome", BiomeCondition::new, BiomeCondition.CODEC); - public static final RecipeConditionType DIMENSION = register("dimension", DimensionCondition::new, DimensionCondition.CODEC); - public static final RecipeConditionType BIOME_TAG = register("biome_tag", BiomeTagCondition::new, BiomeTagCondition.CODEC); - public static final RecipeConditionType POSITION_Y = register("pos_y", PositionYCondition::new, PositionYCondition.CODEC); - public static final RecipeConditionType RAINING = register("rain", RainingCondition::new, RainingCondition.CODEC); - public static final RecipeConditionType ADJACENT_FLUID = register("adjacent_fluid", AdjacentFluidCondition::new, AdjacentFluidCondition.CODEC); - public static final RecipeConditionType ADJACENT_BLOCK = register("adjacent_block", AdjacentBlockCondition::new, AdjacentBlockCondition.CODEC); - public static final RecipeConditionType THUNDER = register("thunder", ThunderCondition::new, ThunderCondition.CODEC); - public static final RecipeConditionType VENT = register("steam_vent", VentCondition::new, VentCondition.CODEC); - public static final RecipeConditionType CLEANROOM = register("cleanroom", CleanroomCondition::new, CleanroomCondition.CODEC); - public static final RecipeConditionType EU_TO_START = register("eu_to_start", EUToStartCondition::new, EUToStartCondition.CODEC); - public static final RecipeConditionType RESEARCH = register("research", ResearchCondition::new, ResearchCondition.CODEC); - public static final RecipeConditionType ENVIRONMENTAL_HAZARD = register("environmental_hazard", EnvironmentalHazardCondition::new, EnvironmentalHazardCondition.CODEC); - public static final RecipeConditionType DAYTIME = register("daytime", DaytimeCondition::new, DaytimeCondition.CODEC); - public static RecipeConditionType FTB_QUEST; + public static final RegistryEntry, RecipeConditionType> BIOME = register("biome", BiomeCondition::new, BiomeCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> DIMENSION = register("dimension", DimensionCondition::new, DimensionCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> BIOME_TAG = register("biome_tag", BiomeTagCondition::new, BiomeTagCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> POSITION_Y = register("pos_y", PositionYCondition::new, PositionYCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> RAINING = register("rain", RainingCondition::new, RainingCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> ADJACENT_FLUID = register("adjacent_fluid", AdjacentFluidCondition::new, AdjacentFluidCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> ADJACENT_BLOCK = register("adjacent_block", AdjacentBlockCondition::new, AdjacentBlockCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> THUNDER = register("thunder", ThunderCondition::new, ThunderCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> VENT = register("steam_vent", VentCondition::new, VentCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> CLEANROOM = register("cleanroom", CleanroomCondition::new, CleanroomCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> EU_TO_START = register("eu_to_start", EUToStartCondition::new, EUToStartCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> RESEARCH = register("research", ResearchCondition::new, ResearchCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> ENVIRONMENTAL_HAZARD = register("environmental_hazard", EnvironmentalHazardCondition::new, EnvironmentalHazardCondition.CODEC); + public static final RegistryEntry, RecipeConditionType> DAYTIME = register("daytime", DaytimeCondition::new, DaytimeCondition.CODEC); + public static RegistryEntry, RecipeConditionType> FTB_QUEST; // public static RecipeConditionType GAMESTAGE; - public static RecipeConditionType HERACLES_QUEST; + public static RegistryEntry, RecipeConditionType> HERACLES_QUEST; public static void init() { if (GTCEu.Mods.isFTBQuestsLoaded()) { @@ -44,10 +46,11 @@ public static void init() { } // spotless:on - private static > RecipeConditionType register(String name, - RecipeConditionType.ConditionFactory factory, - MapCodec codec) { - return GTRegistries.register(GTRegistries.RECIPE_CONDITIONS, GTCEu.id(name), - new RecipeConditionType<>(factory, codec)); + private static < + T extends RecipeCondition> RegistryEntry, RecipeConditionType> register(String name, + RecipeConditionType.ConditionFactory factory, + MapCodec codec) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.RECIPE_CONDITION, + () -> new RecipeConditionType<>(factory, codec)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java index e7e13924cc8..d6649b510aa 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.sound.SoundEntry; +import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.SubscribeEvent; @@ -61,7 +62,7 @@ public static void init(IEventBus modBus) { private static void registerSounds(RegisterEvent event) { for (SoundEntry entry : GTRegistries.SOUNDS) { entry.prepare(); - entry.register(soundEvent -> GTRegistries.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), + entry.register(soundEvent -> Registry.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), soundEvent)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java index 89d0899dd99..7fffcfa5888 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTToolBehaviors.java @@ -1,16 +1,17 @@ package com.gregtechceu.gtceu.common.data; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.item.tool.behavior.IToolBehavior; import com.gregtechceu.gtceu.api.item.tool.behavior.ToolBehaviorType; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.item.tool.behavior.*; import com.gregtechceu.gtceu.common.registry.GTRegistration; -import com.mojang.serialization.Codec; -import com.tterrag.registrate.util.entry.RegistryEntry; + import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; +import com.mojang.serialization.Codec; +import com.tterrag.registrate.util.entry.RegistryEntry; + public class GTToolBehaviors { private GTToolBehaviors() {} @@ -35,8 +36,12 @@ private GTToolBehaviors() {} public static final RegistryEntry, ToolBehaviorType> PROSPECTING = register("prospecting", ProspectingBehavior.CODEC, ProspectingBehavior.STREAM_CODEC); // spotless:on public static void init() {} - - private static > RegistryEntry, ToolBehaviorType> register(String name, Codec codec, StreamCodec streamCodec) { - return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.TOOL_BEHAVIOR, () -> new ToolBehaviorType<>(codec, streamCodec)); + + private static < + T extends IToolBehavior> RegistryEntry, ToolBehaviorType> register(String name, + Codec codec, + StreamCodec streamCodec) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.TOOL_BEHAVIOR, + () -> new ToolBehaviorType<>(codec, streamCodec)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java index ef5253887ec..ddde69eb088 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/CoverPlaceBehavior.java @@ -8,7 +8,6 @@ import com.gregtechceu.gtceu.api.item.component.IItemComponent; import com.gregtechceu.gtceu.common.data.item.GTItemAbilities; -import com.gregtechceu.gtceu.common.registry.GTRegistration; import net.minecraft.core.Holder; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionResult; @@ -35,7 +34,8 @@ public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext contex if (coverSide != null && coverable.getCoverAtSide(coverSide) == null && coverable.canPlaceCoverOnSide(coverDefinition.value(), coverSide)) { if (player instanceof ServerPlayer serverPlayer) { - boolean result = coverable.placeCoverOnSide(coverSide, itemStack, coverDefinition.value(), serverPlayer); + boolean result = coverable.placeCoverOnSide(coverSide, itemStack, coverDefinition.value(), + serverPlayer); if (result && !player.isCreative()) { itemStack.shrink(1); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java index ba1bcc3bb7b..56998ae23ed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentBlockCondition.java @@ -91,7 +91,7 @@ public static AdjacentBlockCondition fromTags(TagKey... tags) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.ADJACENT_BLOCK; + return GTRecipeConditions.ADJACENT_BLOCK.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java index f858ba631f5..01973508bed 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/AdjacentFluidCondition.java @@ -95,7 +95,7 @@ public static AdjacentFluidCondition fromTags(TagKey... tags) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.ADJACENT_FLUID; + return GTRecipeConditions.ADJACENT_FLUID.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java index 616987c7b31..003be22a9f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeCondition.java @@ -43,7 +43,7 @@ public BiomeCondition(ResourceKey biome) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.BIOME; + return GTRecipeConditions.BIOME.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java index 6a156ad835e..3d31ada848d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/BiomeTagCondition.java @@ -43,7 +43,7 @@ public BiomeTagCondition(TagKey biome) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.BIOME_TAG; + return GTRecipeConditions.BIOME_TAG.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java index 4bc13e47946..b730126b289 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/CleanroomCondition.java @@ -40,7 +40,7 @@ public CleanroomCondition(boolean isReverse, CleanroomType cleanroom) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.CLEANROOM; + return GTRecipeConditions.CLEANROOM.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java index c1305564cd5..8699e286147 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DaytimeCondition.java @@ -28,7 +28,7 @@ public DaytimeCondition(boolean isReverse) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.DAYTIME; + return GTRecipeConditions.DAYTIME.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java index c4a22114968..35029b2615d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/DimensionCondition.java @@ -52,7 +52,7 @@ public DimensionCondition(boolean isReverse, ResourceKey dimension) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.DIMENSION; + return GTRecipeConditions.DIMENSION.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java index 7ab5dd2ae5b..a81317dbc68 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EUToStartCondition.java @@ -37,7 +37,7 @@ public EUToStartCondition(boolean isReverse, long euToStart) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.EU_TO_START; + return GTRecipeConditions.EU_TO_START.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java index c07acb8ba83..8af727d5429 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java @@ -41,7 +41,7 @@ public EnvironmentalHazardCondition(boolean isReverse, MedicalCondition conditio @Override public RecipeConditionType getType() { - return GTRecipeConditions.ENVIRONMENTAL_HAZARD; + return GTRecipeConditions.ENVIRONMENTAL_HAZARD.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java index 2bcf2a971e5..9680dc9e222 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/FTBQuestCondition.java @@ -48,7 +48,7 @@ private QuestObject getQuest() { @Override public RecipeConditionType getType() { - return GTRecipeConditions.FTB_QUEST; + return GTRecipeConditions.FTB_QUEST.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java index 90fc53b95e5..19b0e3e6d1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/HeraclesQuestCondition.java @@ -41,7 +41,7 @@ public HeraclesQuestCondition(boolean isReverse, String questId) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.HERACLES_QUEST; + return GTRecipeConditions.HERACLES_QUEST.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java index d3342677b10..d37f9601ebe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/PositionYCondition.java @@ -40,7 +40,7 @@ public PositionYCondition(boolean isReverse, int min, int max) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.POSITION_Y; + return GTRecipeConditions.POSITION_Y.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java index e9d86e9b443..ae75168e503 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/RainingCondition.java @@ -37,7 +37,7 @@ public RainingCondition(float level) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.RAINING; + return GTRecipeConditions.RAINING.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java index 2bd613897ad..9b9e773fdb7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ResearchCondition.java @@ -40,7 +40,7 @@ public ResearchCondition(boolean isReverse, ResearchData data) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.RESEARCH; + return GTRecipeConditions.RESEARCH.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java index 3986d705c05..3e1bd399a09 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/ThunderCondition.java @@ -39,7 +39,7 @@ public ThunderCondition(float level) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.THUNDER; + return GTRecipeConditions.THUNDER.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java index 27eb62de373..7a0f6ec2786 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/VentCondition.java @@ -25,7 +25,7 @@ public VentCondition(boolean isReverse) { @Override public RecipeConditionType getType() { - return GTRecipeConditions.VENT; + return GTRecipeConditions.VENT.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java b/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java index 309b0bdbc55..dde631a8170 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java +++ b/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java @@ -1,12 +1,9 @@ package com.gregtechceu.gtceu.common.worldgen.modifier; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.data.worldgen.modifier.GTPlacementModifierTypes; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.core.BlockPos; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.util.RandomSource; import net.minecraft.world.level.levelgen.placement.PlacementModifierType; import net.minecraft.world.level.levelgen.placement.RepeatingPlacement; diff --git a/src/main/java/com/gregtechceu/gtceu/data/loot/ChestGenHooks.java b/src/main/java/com/gregtechceu/gtceu/data/loot/ChestGenHooks.java index 8025973e1eb..b47254045ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/loot/ChestGenHooks.java +++ b/src/main/java/com/gregtechceu/gtceu/data/loot/ChestGenHooks.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.data.loot; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.core.mixins.LootPoolAccessor; import com.gregtechceu.gtceu.utils.GTMath; @@ -23,9 +22,12 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemCondition; import net.minecraft.world.level.storage.loot.providers.number.NumberProvider; import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; +import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.neoforge.common.NeoForge; import net.neoforged.neoforge.event.LootTableLoadEvent; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; import com.google.common.base.Preconditions; import com.mojang.serialization.MapCodec; @@ -49,9 +51,9 @@ public final class ChestGenHooks { private ChestGenHooks() {} - public static void init() { + public static void init(IEventBus modBus) { NeoForge.EVENT_BUS.register(ChestGenHooks.class); - RandomWeightLootFunction.init(); + RandomWeightLootFunction.init(modBus); } @SubscribeEvent @@ -138,8 +140,12 @@ public static class RandomWeightLootFunction extends LootItemConditionalFunction ExtraCodecs.NON_NEGATIVE_INT.fieldOf("max").forGetter(val -> val.maxAmount)) .apply(instance, RandomWeightLootFunction::new)); - public static final LootItemFunctionType TYPE = GTRegistries.register( - BuiltInRegistries.LOOT_FUNCTION_TYPE, GTCEu.id("random_weight"), new LootItemFunctionType<>(CODEC)); + private static final DeferredRegister> LOOT_ITEM_FUNCTION_TYPES = DeferredRegister + .create(BuiltInRegistries.LOOT_FUNCTION_TYPE, GTCEu.MOD_ID); + + public static final DeferredHolder, LootItemFunctionType> TYPE = LOOT_ITEM_FUNCTION_TYPES + .register( + "random_weight", () -> new LootItemFunctionType<>(CODEC)); private final ItemStack stack; @Getter @@ -155,11 +161,13 @@ public RandomWeightLootFunction(@NotNull ItemStack stack, int minAmount, int max this.maxAmount = maxAmount; } - public static void init() {} + public static void init(IEventBus modBus) { + LOOT_ITEM_FUNCTION_TYPES.register(modBus); + } @Override public @NotNull LootItemFunctionType getType() { - return TYPE; + return TYPE.value(); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java index 2fa3270e634..745b0aace4d 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/GregTechKubeJSPlugin.java @@ -161,7 +161,8 @@ public void registerBuilderTypes(BuilderTypeRegistry registry) { reg.add(GTCEu.id("coil"), CoilBlockBuilder.class, CoilBlockBuilder::new); }); - registry.addDefault(GTRegistries.Keys.WORLD_GEN_LAYER, WorldGenLayerBuilderJS.class, WorldGenLayerBuilderJS::new); + registry.addDefault(GTRegistries.Keys.WORLD_GEN_LAYER, WorldGenLayerBuilderJS.class, + WorldGenLayerBuilderJS::new); registry.addDefault(GTRegistries.Keys.ORE_VEIN, OreVeinDefinitionBuilderJS.class, OreVeinDefinitionBuilderJS::new); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java index 3eaf7f96580..29b4d91b2bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/WorldGenLayerBuilderJS.java @@ -3,12 +3,12 @@ import com.gregtechceu.gtceu.api.data.worldgen.IWorldGenLayer; import com.gregtechceu.gtceu.api.data.worldgen.SimpleWorldGenLayer; -import dev.latvian.mods.kubejs.registry.BuilderBase; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import dev.latvian.mods.kubejs.level.ruletest.AnyMatchRuleTest; +import dev.latvian.mods.kubejs.registry.BuilderBase; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.experimental.Accessors; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java index 33218fe1b16..7dc3f243fc6 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/recipe/components/GTRecipeComponents.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.recipe.RecipeCondition; import com.gregtechceu.gtceu.api.recipe.chance.logic.ChanceLogic; import com.gregtechceu.gtceu.api.recipe.ingredient.EnergyStack; -import com.gregtechceu.gtceu.common.data.GTRecipeCapabilities; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java index 7c01739d57d..47785acc9b3 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java @@ -21,10 +21,7 @@ import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.gregtechceu.gtceu.utils.fakeplayer.FakeServerGamePacketListenerImpl; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.Holder; -import net.minecraft.core.MappedRegistry; +import net.minecraft.core.*; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.gametest.framework.GameTestAssertPosException; import net.minecraft.gametest.framework.GameTestHelper; @@ -248,7 +245,7 @@ public static GTRecipeType createRecipeType(String name, int maxInputs, int maxO .setEUIO(IO.IN) .setMaxIOSize(maxInputs, maxOutputs, maxFluidInputs, maxFluidOutputs); - GTRegistries.register(BuiltInRegistries.RECIPE_TYPE, type.registryName, type); + Registry.register(BuiltInRegistries.RECIPE_TYPE, type.registryName, type); GTRegistries.RECIPE_CATEGORIES.freeze(); BuiltInRegistries.RECIPE_TYPE.freeze(); return type; From 238fa17fba871b17792cd47d217d26e7d38196d6 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 12:56:18 +1000 Subject: [PATCH 26/45] update world gen layers --- .../api/data/worldgen/GTOreDefinition.java | 4 +++ .../api/data/worldgen/WorldGenLayers.java | 25 +++++++++++++------ .../worldgen/OreVeinDefinitionBuilderJS.java | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java index 709ea8e72c1..5939dfa1e27 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/GTOreDefinition.java @@ -177,6 +177,10 @@ public GTOreDefinition layer(IWorldGenLayer layer) { return this; } + public GTOreDefinition layer(Holder layer) { + return layer(layer.value()); + } + public GTOreDefinition dimensions(Set> dimensions) { this.dimensionFilter = dimensions; return this; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java index 1514c334807..8648e6e48b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java @@ -2,6 +2,10 @@ import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; +import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceKey; import net.minecraft.tags.BlockTags; import net.minecraft.world.level.Level; import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest; @@ -10,21 +14,26 @@ public class WorldGenLayers { - public static final SimpleWorldGenLayer STONE = new SimpleWorldGenLayer( - GTCEu.id("stone"), () -> new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES), + public static final Holder STONE = register("stone", + () -> new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES), Set.of(Level.OVERWORLD)); - public static final SimpleWorldGenLayer DEEPSLATE = new SimpleWorldGenLayer( - GTCEu.id("deepslate"), () -> new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES), + public static final Holder DEEPSLATE = register("deepslate", + () -> new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES), Set.of(Level.OVERWORLD)); - public static final SimpleWorldGenLayer NETHERRACK = new SimpleWorldGenLayer( - GTCEu.id("netherrack"), () -> new TagMatchTest(BlockTags.NETHER_CARVER_REPLACEABLES), + public static final Holder NETHERRACK = register("netherrack", + () -> new TagMatchTest(BlockTags.NETHER_CARVER_REPLACEABLES), Set.of(Level.NETHER)); - public static final SimpleWorldGenLayer ENDSTONE = new SimpleWorldGenLayer( - GTCEu.id("endstone"), () -> WorldGeneratorUtils.END_ORE_REPLACEABLES, + public static final Holder ENDSTONE = register("endstone", + () -> WorldGeneratorUtils.END_ORE_REPLACEABLES, Set.of(Level.END)); + private static Holder register(String name, IWorldGenLayer.RuleTestSupplier target, + Set> levels) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.WORLD_GEN_LAYER, () -> new SimpleWorldGenLayer(GTCEu.id(name), target, levels)); + } + public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java index d47ee7d68e0..117e8583b3a 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/worldgen/OreVeinDefinitionBuilderJS.java @@ -42,7 +42,7 @@ public class OreVeinDefinitionBuilderJS extends BuilderBase { private float density; @Setter private int weight; - private IWorldGenLayer layer = WorldGenLayers.STONE; + private IWorldGenLayer layer = WorldGenLayers.STONE.value(); @Setter private Set> dimensionFilter = Set.of(); @Setter From 0e7ab09cd86ee5746f6c5c65e967db9f92a7779c Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 16:54:11 +1000 Subject: [PATCH 27/45] move builders to their own folder --- docs/content/Modpacks/Examples/Parallel-Hatch-Part.md | 2 +- docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md | 6 +++--- .../gregtechceu/gtceu/api/events/ModifyMachineEvent.java | 2 +- .../gtceu/api/registry/registrate/GTRegistrate.java | 4 ++++ .../registry/registrate/{ => builder}/GTBlockBuilder.java | 2 +- .../registry/registrate/{ => builder}/MachineBuilder.java | 3 ++- .../{ => builder}/MultiblockMachineBuilder.java | 3 ++- .../registrate/{ => builder}/SoundEntryBuilder.java | 2 +- .../api/registry/registrate/builder/package-info.java | 8 ++++++++ .../gregtechceu/gtceu/client/model/pipe/PipeModel.java | 2 +- .../gtceu/common/data/machines/GTMachineUtils.java | 5 ++--- .../gtceu/common/data/machines/GTResearchMachines.java | 2 +- .../gtceu/common/data/models/GTMachineModels.java | 2 +- .../java/com/gregtechceu/gtceu/data/DataGenerators.java | 2 +- .../kjs/builders/machine/IMachineBuilderKJS.java | 2 +- .../kjs/builders/machine/KJSSteamMachineBuilder.java | 2 +- .../kjs/builders/machine/KJSTieredMachineBuilder.java | 2 +- .../kjs/builders/machine/KJSTieredMultiblockBuilder.java | 4 ++-- .../builders/machine/MultiblockMachineBuilderWrapper.java | 4 ++-- .../integration/kjs/events/ModifyMachineEventJS.java | 2 +- 20 files changed, 37 insertions(+), 24 deletions(-) rename src/main/java/com/gregtechceu/gtceu/api/registry/registrate/{ => builder}/GTBlockBuilder.java (98%) rename src/main/java/com/gregtechceu/gtceu/api/registry/registrate/{ => builder}/MachineBuilder.java (99%) rename src/main/java/com/gregtechceu/gtceu/api/registry/registrate/{ => builder}/MultiblockMachineBuilder.java (98%) rename src/main/java/com/gregtechceu/gtceu/api/registry/registrate/{ => builder}/SoundEntryBuilder.java (98%) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java diff --git a/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md b/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md index 6046c99e039..efae271bdf1 100644 --- a/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md +++ b/docs/content/Modpacks/Examples/Parallel-Hatch-Part.md @@ -75,7 +75,7 @@ title: "Custom Parallel Hatch" GTMachineModels.createWorkableTieredHullMachineModel( GTCEu.id("block/machines/parallel_hatch_mk4") // (6) )[ - "andThen(com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder$ModelInitializer)" + "andThen(com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder$ModelInitializer)" ]((ctx, prov, model) => { model.addReplaceableTextures("bottom", "top", "side"); }) diff --git a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md index 8151c396cca..b60081afb1b 100644 --- a/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md +++ b/docs/content/Modpacks/Other-Topics/Ambiguous-Methods.md @@ -18,9 +18,9 @@ GTCEuStartupEvents.registry('gtceu:machine', event => { you'd get the error: ``` -Error in 'GTCEuStartupEvents.registry': The choice of Java method com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder.tooltips matching JavaScript argument types (net.minecraft.network.chat.MutableComponent) is ambiguous; candidate methods are: - class com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder tooltips(java.util.List) - class com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder tooltips(net.minecraft.network.chat.Component[]) +Error in 'GTCEuStartupEvents.registry': The choice of Java method com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder.tooltips matching JavaScript argument types (net.minecraft.network.chat.MutableComponent) is ambiguous; candidate methods are: + class com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder tooltips(java.util.List) + class com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder tooltips(net.minecraft.network.chat.Component[]) ``` In this case, there's ambiguity between the following 2 java functions: diff --git a/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java b/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java index 8f2f23ebfbf..c29802709bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java +++ b/src/main/java/com/gregtechceu/gtceu/api/events/ModifyMachineEvent.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.api.events; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import net.neoforged.bus.api.Event; import net.neoforged.fml.event.IModBusEvent; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 8b1fbce6cb0..a4b71b0fa3a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -10,6 +10,10 @@ import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.builder.GTBlockBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.SoundEntryBuilder; import com.gregtechceu.gtceu.client.renderer.cover.ICoverRenderer; import com.gregtechceu.gtceu.client.renderer.cover.SimpleCoverRenderer; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTBlockBuilder.java rename to src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java index 17dfee8d336..01ee8656913 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.registry.registrate; +package com.gregtechceu.gtceu.api.registry.registrate.builder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java rename to src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 9042c4f2e30..048662aaf6d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.registry.registrate; +package com.gregtechceu.gtceu.api.registry.registrate.builder; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; @@ -21,6 +21,7 @@ import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.client.renderer.BlockEntityWithBERModelRenderer; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java rename to src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index 9ae220fe055..cc0ef64ccda 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.registry.registrate; +package com.gregtechceu.gtceu.api.registry.registrate.builder; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.item.MetaMachineItem; @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; import net.minecraft.MethodsReturnNonnullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/SoundEntryBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java similarity index 98% rename from src/main/java/com/gregtechceu/gtceu/api/registry/registrate/SoundEntryBuilder.java rename to src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java index 39a709fbee2..39c927126d2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/SoundEntryBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java @@ -1,4 +1,4 @@ -package com.gregtechceu.gtceu.api.registry.registrate; +package com.gregtechceu.gtceu.api.registry.registrate.builder; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.registry.GTRegistries; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java new file mode 100644 index 00000000000..d0053168195 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java @@ -0,0 +1,8 @@ +@NotNullByDefault +@NullMarked +package com.gregtechceu.gtceu.api.registry.registrate.builder; + +import org.jetbrains.annotations.NotNullByDefault; +import org.jspecify.annotations.NullMarked; + +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java b/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java index 50184f06b4f..a5167f367a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java +++ b/src/main/java/com/gregtechceu/gtceu/client/model/pipe/PipeModel.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.client.model.pipe; import com.gregtechceu.gtceu.api.block.PipeBlock; -import com.gregtechceu.gtceu.api.registry.registrate.GTBlockBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.GTBlockBuilder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.data.model.builder.PipeModelBuilder; import com.gregtechceu.gtceu.data.pack.event.RegisterDynamicResourcesEvent; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index 114d8d63771..3392354f8ca 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -30,8 +30,8 @@ import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; import com.gregtechceu.gtceu.client.renderer.machine.*; import com.gregtechceu.gtceu.common.block.BoilerFireboxType; import com.gregtechceu.gtceu.common.data.GTMaterialItems; @@ -95,7 +95,6 @@ import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.*; import static com.gregtechceu.gtceu.common.data.models.GTMachineModels.*; import static com.gregtechceu.gtceu.common.machine.electric.BatteryBufferMachine.AMPS_PER_BATTERY_NORMAL; -import static com.gregtechceu.gtceu.common.machine.storage.QuantumTankMachine.TANK_CAPACITY; import static com.gregtechceu.gtceu.utils.FormattingUtil.toEnglishName; public class GTMachineUtils { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java index eefb8023a7a..a3bf02a1c22 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java @@ -11,7 +11,7 @@ import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.machine.trait.recipe.RecipeLogic; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java index 2116db238e0..b5f6e5d5961 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/models/GTMachineModels.java @@ -7,7 +7,7 @@ import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.trait.recipe.RecipeLogic; import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.client.model.machine.overlays.EnergyIOOverlay; diff --git a/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java b/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java index 930a229ec9e..043fa7534e2 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java +++ b/src/main/java/com/gregtechceu/gtceu/data/DataGenerators.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.api.registry.registrate.SoundEntryBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.SoundEntryBuilder; import com.gregtechceu.gtceu.common.data.*; import com.gregtechceu.gtceu.data.tags.BiomeTagsLoader; import com.gregtechceu.gtceu.data.tags.DamageTypeTagsLoader; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java index 11755aee603..d8895ad1dc9 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java @@ -2,7 +2,7 @@ import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.common.data.models.GTMachineModels; import com.gregtechceu.gtceu.utils.data.RuntimeBlockstateProvider; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java index 2b20e6ccc80..cf1759f4236 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java @@ -8,7 +8,7 @@ import com.gregtechceu.gtceu.api.machine.steam.SimpleSteamMachine; import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java index c0368f0d59d..caf8cdb2c85 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java @@ -7,7 +7,7 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.mui.GTSingleblockMachinePanels; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java index f9eafc7f271..c91f796a2d9 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java @@ -5,8 +5,8 @@ import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java index 1151318da31..b947118866b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java @@ -15,8 +15,8 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; -import com.gregtechceu.gtceu.api.registry.registrate.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import net.minecraft.core.Direction; diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java index 7af9f38bda2..71718644dd7 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/events/ModifyMachineEventJS.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.integration.kjs.events; import com.gregtechceu.gtceu.api.events.ModifyMachineEvent; -import com.gregtechceu.gtceu.api.registry.registrate.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import dev.latvian.mods.kubejs.event.KubeEvent; From a5bbb805e0a4886301962d5f0e462091e1f3f4e3 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 17:18:31 +1000 Subject: [PATCH 28/45] convert sounds to be deferred --- .../gregtechceu/gtceu/api/item/IGTTool.java | 2 +- .../gtceu/api/item/armor/ArmorUtils.java | 2 +- .../gtceu/api/item/tool/GTToolItem.java | 2 +- .../gtceu/api/item/tool/GTToolType.java | 14 +-- .../gtceu/api/item/tool/ToolHelper.java | 2 +- .../trait/customlogic/SteamBoilerLogic.java | 3 +- .../api/machine/trait/recipe/RecipeLogic.java | 2 +- .../gtceu/api/recipe/GTRecipeType.java | 20 ++-- .../gtceu/api/recipe/package-info.java | 4 + .../api/registry/registrate/GTRegistrate.java | 18 ++-- .../registrate/builder/GTBlockBuilder.java | 2 + .../registrate/builder/SoundEntryBuilder.java | 47 +++++--- .../registrate/builder/package-info.java | 4 - .../gtceu/api/sound/SoundEntry.java | 13 +-- .../gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../gtceu/common/data/GTJukeboxSongs.java | 2 +- .../gtceu/common/data/GTSoundEntries.java | 100 ++++++++---------- .../gtceu/common/data/GTSoundTypes.java | 2 +- .../item/behavior/ColorSprayBehaviour.java | 2 +- .../behavior/PortableScannerBehavior.java | 2 +- .../tool/behavior/ToolModeSwitchBehavior.java | 2 +- .../core/mixins/client/ItemEntityMixin.java | 2 +- 22 files changed, 127 insertions(+), 122 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java index 42295c70913..736959150c2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java @@ -89,7 +89,7 @@ public interface IGTTool extends IUIHolder>, ItemLike IGTToolDefinition getToolStats(); @Nullable - SoundEntry getSound(); + Holder getSound(); boolean playSoundOnBlockDestroy(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java b/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java index 8696119e5b5..043b52a7cc9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/armor/ArmorUtils.java @@ -130,7 +130,7 @@ public static void playJetpackSound(@NotNull Player player) { cons -= 0.4F; } - player.playSound(GTSoundEntries.JET_ENGINE.getMainEvent(), 0.3F, cons); + player.playSound(GTSoundEntries.JET_ENGINE.value().getMainEvent(), 0.3F, cons); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java index 7978571d49c..275ee056c64 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolItem.java @@ -108,7 +108,7 @@ public boolean isElectric() { @Nullable @Override - public SoundEntry getSound() { + public Holder getSound() { return toolType.soundEntry; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java index cbfafba6de3..dadec511662 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java @@ -11,6 +11,7 @@ import com.gregtechceu.gtceu.common.item.tool.behavior.*; import com.gregtechceu.gtceu.data.recipe.CustomTags; +import net.minecraft.core.Holder; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -198,7 +199,7 @@ public class GTToolType { .definition(b -> b.blockBreaking().crafting() .attackDamage(2.0F).attackSpeed(-2.4F) .sneakBypassUse().behaviors(RotateRailBehavior.INSTANCE)) - .sound(new ExistingSoundEntry(SoundEvents.ITEM_BREAK, SoundSource.BLOCKS), true) + .sound(Holder.direct(new ExistingSoundEntry(SoundEvents.ITEM_BREAK, SoundSource.BLOCKS)), true) .symbol('c') .defaultAbilities(GTItemAbilities.CROWBAR_DIG, GTItemAbilities.CROWBAR_REMOVE_COVER) .materialAmount(3 * GTValues.M / 2) @@ -571,7 +572,7 @@ public class GTToolType { public final Set toolClassNames; public final Set toolClasses; @Nullable - public final SoundEntry soundEntry; + public final Holder soundEntry; public final boolean playSoundOnBlockDestroy; public final char symbol; public final long materialAmount; @@ -585,7 +586,7 @@ public GTToolType(String name, String idFormat, char symbol, List> itemTags, List> matchTags, List> craftingTags, List> harvestTags, Set defaultAbilities, Set toolClassNames, ResourceLocation modelLocation, - @Nullable SoundEntry soundEntry, boolean playSoundOnBlockDestroy, + @Nullable Holder soundEntry, boolean playSoundOnBlockDestroy, int electricTier, long materialAmount) { this.name = name; this.idFormat = idFormat; @@ -661,7 +662,7 @@ public static class Builder { private ToolConstructor constructor = GTToolItem::new; @Setter private ResourceLocation modelLocation; - private SoundEntry sound; + private Holder sound; private boolean playSoundOnBlockDestroy; public Builder(String name) { @@ -727,16 +728,17 @@ public Builder definition(UnaryOperator builder) { return this; } - public Builder sound(SoundEntry sound) { + public Builder sound(Holder sound) { return this.sound(sound, false); } - public Builder sound(SoundEntry sound, boolean playSoundOnBlockDestroy) { + public Builder sound(Holder sound, boolean playSoundOnBlockDestroy) { this.sound = sound; this.playSoundOnBlockDestroy = playSoundOnBlockDestroy; return this; } + public Builder electric(int tier) { return tier(tier); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java index 38a2fc34a4a..7723594722b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java @@ -212,7 +212,7 @@ public static void damageItem(ItemStack stack, @Nullable LivingEntity user, int public static void playToolSound(@Nullable GTToolType toolType, ServerPlayer player) { if (toolType != null && toolType.soundEntry != null) { - toolType.soundEntry.playOnServer(player.level(), player.blockPosition()); + toolType.soundEntry.value().playOnServer(player.level(), player.blockPosition()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java index d5ce1d4e2d3..fe1d214435e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/SteamBoilerLogic.java @@ -24,6 +24,7 @@ import net.neoforged.neoforge.items.wrapper.CombinedInvWrapper; import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.NonNull; import java.util.HashSet; import java.util.Map; @@ -70,7 +71,7 @@ private GTRecipe makeRecipe(ItemStack input, int burnTime) { } @Override - public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { + public @Nullable GTRecipe createCustomRecipe(@NonNull IRecipeCapabilityHolder holder) { var itemInputs = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP).stream() .filter(IItemHandlerModifiable.class::isInstance).map(IItemHandlerModifiable.class::cast) .toArray(IItemHandlerModifiable[]::new); diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java index d1b94ff269f..e9bb8c941a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/recipe/RecipeLogic.java @@ -676,7 +676,7 @@ public void updateSound() { workingSound = null; } if (sound != null) { - workingSound = sound.playAutoReleasedSound( + workingSound = sound.value().playAutoReleasedSound( () -> getRLMachine().shouldWorkingPlaySound() && isWorking() && !getMachine().isRemoved() && getMachine().getLevel().isLoaded(getMachine().getBlockPos()) && MetaMachine.getMachine(getMachine().getLevel(), getMachine().getBlockPos()) == diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java index c89242c5c06..8095d042a58 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java @@ -10,6 +10,8 @@ import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; import com.gregtechceu.gtceu.utils.FormattingUtil; +import lombok.experimental.Tolerate; +import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.recipes.RecipeOutput; @@ -25,7 +27,6 @@ import lombok.Setter; import lombok.experimental.Accessors; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -60,7 +61,7 @@ public class GTRecipeType implements RecipeType { @Nullable @Setter @Getter - protected SoundEntry sound; + protected Holder sound; @Getter protected List> dataInfos = new ArrayList<>(); @Getter @@ -137,6 +138,11 @@ public GTRecipeType setMaxSize(IO io, RecipeCapability cap, int max) { return this; } + @Tolerate + public GTRecipeType setSound(SoundEntry sound) { + return setSound(Holder.direct(sound)); + } + public GTRecipeType UI(UnaryOperator builder) { uiLayout = builder.apply(new GTRecipeTypeUILayout.Builder(this)).build(); return this; @@ -170,7 +176,7 @@ public String toString() { return registryName.toString(); } - public @NotNull Iterator searchRecipe(IRecipeCapabilityHolder holder, Predicate canHandle) { + public Iterator searchRecipe(IRecipeCapabilityHolder holder, Predicate canHandle) { if (!holder.hasCapabilityProxies()) return Collections.emptyIterator(); var iterator = db.iterator(holder, canHandle); if (iterator == null) { @@ -251,17 +257,17 @@ public GTRecipeType onRecipeBuild(BiConsumer onBu return this; } - public void addDataStickEntry(@NotNull String researchId, @NotNull GTRecipe recipe) { + public void addDataStickEntry(String researchId, GTRecipe recipe) { Collection collection = researchEntries.computeIfAbsent(researchId, (k) -> new ObjectOpenHashSet<>()); collection.add(recipe); } @Nullable - public Collection getDataStickEntry(@NotNull String researchId) { + public Collection getDataStickEntry(String researchId) { return researchEntries.get(researchId); } - public boolean removeDataStickEntry(@NotNull String researchId, @NotNull GTRecipe recipe) { + public boolean removeDataStickEntry(String researchId, GTRecipe recipe) { Collection collection = researchEntries.get(researchId); if (collection == null) return false; if (collection.remove(recipe)) { @@ -317,7 +323,7 @@ public Component getName() { return Component.translatable(getTranslationKey()); } - public @NotNull RecipeDB db() { + public RecipeDB db() { return db; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java new file mode 100644 index 00000000000..bd0abe66900 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.recipe; + +import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index a4b71b0fa3a..dfc07c6f578 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -166,7 +166,7 @@ public GTRegistrate registerEventListeners(IEventBus bus) { return this; } - ///// Machine Builders + /// Machine Builders public MachineBuilder machine(String name, @@ -198,7 +198,7 @@ public GTRegistrate registerEventListeners(IEventBus bus) { blockEntityFactory); } - ///// Covers + /// Cover Registration public RegistryEntry cover(String name, CoverDefinition.CoverBehaviourProvider behaviorCreator, @@ -213,17 +213,17 @@ public RegistryEntry cover(String name, ResourceLocation.fromNamespaceAndPath(getModid(), "block/cover/" + name))); } - ///// Sound Builders + /// Sound Builder - public SoundEntryBuilder sound(String name) { - return new SoundEntryBuilder(GTCEu.id(name)); + public SoundEntryBuilder sound(String name) { + return sound(this, name); } - public SoundEntryBuilder sound(ResourceLocation name) { - return new SoundEntryBuilder(name); + public

SoundEntryBuilder

sound(P parent, String name) { + return entry(name, callback -> new SoundEntryBuilder<>(this, parent, name, callback)); } - ///// Block Builders + /// Block Builder @Override public GTBlockBuilder block(NonNullFunction factory) { @@ -251,7 +251,7 @@ public GTBlockBuilder block(@NotNull P parent, String callback -> GTBlockBuilder.create(this, parent, name, callback, factory)); } - ///// Creative Mode Tabs + /// Creative Mode Tabs private @Nullable RegistryEntry currentTab; private static final Map, @Nullable RegistryEntry> TAB_LOOKUP = new IdentityHashMap<>(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java index 01ee8656913..cf398ef89b9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java @@ -16,8 +16,10 @@ import com.tterrag.registrate.providers.loot.RegistrateBlockLootTables; import com.tterrag.registrate.util.nullness.*; +import javax.annotation.ParametersAreNonnullByDefault; import java.util.function.Supplier; +@ParametersAreNonnullByDefault public class GTBlockBuilder extends BlockBuilder { // spotless:off diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java index 39c927126d2..48337e761d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java @@ -7,6 +7,12 @@ import com.gregtechceu.gtceu.api.sound.SoundEntry; import com.gregtechceu.gtceu.api.sound.WrappedSoundEntry; +import com.tterrag.registrate.AbstractRegistrate; +import com.tterrag.registrate.builders.AbstractBuilder; +import com.tterrag.registrate.builders.BuilderCallback; +import com.tterrag.registrate.util.entry.RegistryEntry; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.CachedOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.PackOutput; @@ -22,7 +28,8 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; -public class SoundEntryBuilder { +@SuppressWarnings("unused") +public class SoundEntryBuilder

extends AbstractBuilder> { public static class SoundEntryProvider implements DataProvider { @@ -55,7 +62,6 @@ public CompletableFuture generate(Path path, CachedOutput cache) { } } - protected ResourceLocation id; @Nullable protected String subtitle = "unregistered"; protected SoundSource category = SoundSource.BLOCKS; @@ -63,59 +69,66 @@ public CompletableFuture generate(Path path, CachedOutput cache) { protected List variants; protected int attenuationDistance; - public SoundEntryBuilder(ResourceLocation id) { + public SoundEntryBuilder(AbstractRegistrate owner, P parent, String name, BuilderCallback callback) { + super(owner, parent, name, callback, GTRegistries.Keys.SOUND); wrappedEvents = new ArrayList<>(); variants = new ArrayList<>(); - this.id = id; } - public SoundEntryBuilder subtitle(String subtitle) { + public SoundEntryBuilder

subtitle(String subtitle) { this.subtitle = subtitle; return this; } - public SoundEntryBuilder attenuationDistance(int distance) { + public SoundEntryBuilder

attenuationDistance(int distance) { this.attenuationDistance = distance; return this; } - public SoundEntryBuilder noSubtitle() { + public SoundEntryBuilder

noSubtitle() { this.subtitle = null; return this; } - public SoundEntryBuilder category(SoundSource category) { + public SoundEntryBuilder

category(SoundSource category) { this.category = category; return this; } - public SoundEntryBuilder addVariant(String name) { + public SoundEntryBuilder

addVariant(String name) { return addVariant(GTCEu.id(name)); } - public SoundEntryBuilder addVariant(ResourceLocation id) { + public SoundEntryBuilder

addVariant(ResourceLocation id) { variants.add(id); return this; } - public SoundEntryBuilder playExisting(Supplier event, float volume, float pitch) { + public SoundEntryBuilder

playExisting(Supplier event, float volume, float pitch) { wrappedEvents.add(new ConfiguredSoundEvent(event, volume, pitch)); return this; } - public SoundEntryBuilder playExisting(SoundEvent event, float volume, float pitch) { + public SoundEntryBuilder

playExisting(SoundEvent event, float volume, float pitch) { return playExisting(() -> event, volume, pitch); } - public SoundEntryBuilder playExisting(SoundEvent event) { + public SoundEntryBuilder

playExisting(SoundEvent event) { return playExisting(event, 1, 1); } - public SoundEntry build() { + @Override + protected SoundEntry createEntry() { SoundEntry entry = wrappedEvents.isEmpty() ? - new CustomSoundEntry(id, variants, subtitle, category, attenuationDistance) : - new WrappedSoundEntry(id, subtitle, wrappedEvents, category, attenuationDistance); - GTRegistries.register(GTRegistries.SOUNDS, entry.getId(), entry); + new CustomSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), variants, subtitle, category, attenuationDistance) : + new WrappedSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), subtitle, wrappedEvents, category, attenuationDistance); + entry.prepare(); + entry.register(soundEvent -> Registry.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), soundEvent)); return entry; } + + @Override + public RegistryEntry register() { + return super.register(); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java index d0053168195..8377158090c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/package-info.java @@ -1,8 +1,4 @@ @NotNullByDefault -@NullMarked package com.gregtechceu.gtceu.api.registry.registrate.builder; import org.jetbrains.annotations.NotNullByDefault; -import org.jspecify.annotations.NullMarked; - -import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java b/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java index cbc2701fc4c..8c03b4e662a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.sound; +import lombok.Getter; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; @@ -20,7 +21,9 @@ public abstract class SoundEntry { + @Getter protected ResourceLocation id; + @Getter protected String subtitle; protected SoundSource category; protected int attenuationDistance; @@ -41,21 +44,13 @@ public SoundEntry(ResourceLocation id, String subtitle, SoundSource category, in public abstract SoundEvent getMainEvent(); public String getSubtitleKey() { - return id.getNamespace() + ".subtitle." + id.getPath(); - } - - public ResourceLocation getId() { - return id; + return id.toLanguageKey("subtitle"); } public boolean hasSubtitle() { return subtitle != null; } - public String getSubtitle() { - return subtitle; - } - public void playOnServer(Level world, Vec3i pos) { playOnServer(world, pos, 1, 1); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 6a158f88b95..e06db02c0e2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -148,7 +148,7 @@ public static void init(final IEventBus modBus) { GTMedicalConditions.init(); TagPrefix.init(); - GTSoundEntries.init(modBus); + GTSoundEntries.init(); GTDamageTypes.init(); GTPlaceholders.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java index c31d83bf58d..87c26f522b7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTJukeboxSongs.java @@ -15,7 +15,7 @@ public class GTJukeboxSongs { public static void bootstrap(BootstrapContext ctx) { ctx.register(SUS, new JukeboxSong( - BuiltInRegistries.SOUND_EVENT.wrapAsHolder(GTSoundEntries.SUS_RECORD.getMainEvent()), + BuiltInRegistries.SOUND_EVENT.wrapAsHolder(GTSoundEntries.SUS_RECORD.value().getMainEvent()), Component.translatable("item.gtceu.sus_record.desc"), 820, 1)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java index d6649b510aa..b7b740bf29e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundEntries.java @@ -1,69 +1,55 @@ package com.gregtechceu.gtceu.common.data; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.sound.SoundEntry; -import net.minecraft.core.Registry; -import net.minecraft.core.registries.BuiltInRegistries; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.registries.RegisterEvent; +import net.neoforged.neoforge.registries.DeferredHolder; import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; public class GTSoundEntries { // Machine Sounds - public static final SoundEntry FORGE_HAMMER = REGISTRATE.sound("forge_hammer").build(); - public static final SoundEntry MACERATOR = REGISTRATE.sound("macerator").build(); - public static final SoundEntry CHEMICAL = REGISTRATE.sound("chemical").build(); - public static final SoundEntry ASSEMBLER = REGISTRATE.sound("assembler").build(); - public static final SoundEntry CENTRIFUGE = REGISTRATE.sound("centrifuge").build(); - public static final SoundEntry COMPRESSOR = REGISTRATE.sound("compressor").build(); - public static final SoundEntry ELECTROLYZER = REGISTRATE.sound("electrolyzer").build(); - public static final SoundEntry MIXER = REGISTRATE.sound("mixer").build(); - public static final SoundEntry REPLICATOR = REGISTRATE.sound("replicator").build(); - public static final SoundEntry ARC = REGISTRATE.sound("arc").build(); - public static final SoundEntry BOILER = REGISTRATE.sound("boiler").build(); - public static final SoundEntry FURNACE = REGISTRATE.sound("furnace").build(); - public static final SoundEntry COOLING = REGISTRATE.sound("cooling").build(); - public static final SoundEntry FIRE = REGISTRATE.sound("fire").build(); - public static final SoundEntry BATH = REGISTRATE.sound("bath").build(); - public static final SoundEntry MOTOR = REGISTRATE.sound("motor").build(); - public static final SoundEntry CUT = REGISTRATE.sound("cut").build(); - public static final SoundEntry TURBINE = REGISTRATE.sound("turbine").build(); - public static final SoundEntry COMBUSTION = REGISTRATE.sound("combustion").build(); - public static final SoundEntry COMPUTATION = REGISTRATE.sound("computation").build(); - public static final SoundEntry MINER = REGISTRATE.sound("miner").build(); - public static final SoundEntry SCIENCE = REGISTRATE.sound("science").build(); - public static final SoundEntry JET_ENGINE = REGISTRATE.sound("jet_engine").build(); - public static final SoundEntry WRENCH_TOOL = REGISTRATE.sound("wrench").build(); - public static final SoundEntry SOFT_MALLET_TOOL = REGISTRATE.sound("soft_hammer").build(); - public static final SoundEntry DRILL_TOOL = REGISTRATE.sound("drill").build(); - public static final SoundEntry PLUNGER_TOOL = REGISTRATE.sound("plunger").build(); - public static final SoundEntry FILE_TOOL = REGISTRATE.sound("file").build(); - public static final SoundEntry SAW_TOOL = REGISTRATE.sound("saw").build(); - public static final SoundEntry SCREWDRIVER_TOOL = REGISTRATE.sound("screwdriver").build(); - public static final SoundEntry CHAINSAW_TOOL = REGISTRATE.sound("chainsaw").build(); - public static final SoundEntry WIRECUTTER_TOOL = REGISTRATE.sound("wirecutter").build(); - public static final SoundEntry SPRAY_CAN_TOOL = REGISTRATE.sound("spray_can").build(); - public static final SoundEntry PORTABLE_SCANNER = REGISTRATE.sound("portable_scanner").build(); - public static final SoundEntry MORTAR_TOOL = REGISTRATE.sound("mortar").build(); - public static final SoundEntry SUS_RECORD = REGISTRATE.sound("sus").build(); - public static final SoundEntry PORTAL_OPENING = REGISTRATE.sound("portal_opening").build(); - public static final SoundEntry PORTAL_CLOSING = REGISTRATE.sound("portal_closing").build(); - public static final SoundEntry METAL_PIPE = REGISTRATE.sound("metal_pipe").build(); + // spotless:off + public static final DeferredHolder FORGE_HAMMER = REGISTRATE.sound("forge_hammer").register(); + public static final DeferredHolder MACERATOR = REGISTRATE.sound("macerator").register(); + public static final DeferredHolder CHEMICAL = REGISTRATE.sound("chemical").register(); + public static final DeferredHolder ASSEMBLER = REGISTRATE.sound("assembler").register(); + public static final DeferredHolder CENTRIFUGE = REGISTRATE.sound("centrifuge").register(); + public static final DeferredHolder COMPRESSOR = REGISTRATE.sound("compressor").register(); + public static final DeferredHolder ELECTROLYZER = REGISTRATE.sound("electrolyzer").register(); + public static final DeferredHolder MIXER = REGISTRATE.sound("mixer").register(); + public static final DeferredHolder REPLICATOR = REGISTRATE.sound("replicator").register(); + public static final DeferredHolder ARC = REGISTRATE.sound("arc").register(); + public static final DeferredHolder BOILER = REGISTRATE.sound("boiler").register(); + public static final DeferredHolder FURNACE = REGISTRATE.sound("furnace").register(); + public static final DeferredHolder COOLING = REGISTRATE.sound("cooling").register(); + public static final DeferredHolder FIRE = REGISTRATE.sound("fire").register(); + public static final DeferredHolder BATH = REGISTRATE.sound("bath").register(); + public static final DeferredHolder MOTOR = REGISTRATE.sound("motor").register(); + public static final DeferredHolder CUT = REGISTRATE.sound("cut").register(); + public static final DeferredHolder TURBINE = REGISTRATE.sound("turbine").register(); + public static final DeferredHolder COMBUSTION = REGISTRATE.sound("combustion").register(); + public static final DeferredHolder COMPUTATION = REGISTRATE.sound("computation").register(); + public static final DeferredHolder MINER = REGISTRATE.sound("miner").register(); + public static final DeferredHolder SCIENCE = REGISTRATE.sound("science").register(); + public static final DeferredHolder JET_ENGINE = REGISTRATE.sound("jet_engine").register(); + public static final DeferredHolder WRENCH_TOOL = REGISTRATE.sound("wrench").register(); + public static final DeferredHolder SOFT_MALLET_TOOL = REGISTRATE.sound("soft_hammer").register(); + public static final DeferredHolder DRILL_TOOL = REGISTRATE.sound("drill").register(); + public static final DeferredHolder PLUNGER_TOOL = REGISTRATE.sound("plunger").register(); + public static final DeferredHolder FILE_TOOL = REGISTRATE.sound("file").register(); + public static final DeferredHolder SAW_TOOL = REGISTRATE.sound("saw").register(); + public static final DeferredHolder SCREWDRIVER_TOOL = REGISTRATE.sound("screwdriver").register(); + public static final DeferredHolder CHAINSAW_TOOL = REGISTRATE.sound("chainsaw").register(); + public static final DeferredHolder WIRECUTTER_TOOL = REGISTRATE.sound("wirecutter").register(); + public static final DeferredHolder SPRAY_CAN_TOOL = REGISTRATE.sound("spray_can").register(); + public static final DeferredHolder PORTABLE_SCANNER = REGISTRATE.sound("portable_scanner").register(); + public static final DeferredHolder MORTAR_TOOL = REGISTRATE.sound("mortar").register(); + public static final DeferredHolder SUS_RECORD = REGISTRATE.sound("sus").register(); + public static final DeferredHolder PORTAL_OPENING = REGISTRATE.sound("portal_opening").register(); + public static final DeferredHolder PORTAL_CLOSING = REGISTRATE.sound("portal_closing").register(); + public static final DeferredHolder METAL_PIPE = REGISTRATE.sound("metal_pipe").register(); + //spotless:on - public static void init(IEventBus modBus) { - modBus.register(GTSoundEntries.class); - } - - @SubscribeEvent - private static void registerSounds(RegisterEvent event) { - for (SoundEntry entry : GTRegistries.SOUNDS) { - entry.prepare(); - entry.register(soundEvent -> Registry.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), - soundEvent)); - } - } + public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java index 29dd6768837..41a27812be4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTSoundTypes.java @@ -7,6 +7,6 @@ public class GTSoundTypes { public static final SoundType METAL_PIPE = new SoundType(1.0f, 1.0f, - GTSoundEntries.METAL_PIPE.getMainEvent(), + GTSoundEntries.METAL_PIPE.value().getMainEvent(), SoundEvents.STONE_STEP, SoundEvents.STONE_PLACE, SoundEvents.STONE_HIT, SoundEvents.STONE_FALL); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java index 636e62d8d07..a27db580019 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ColorSprayBehaviour.java @@ -183,7 +183,7 @@ public InteractionResult onItemUseFirst(ItemStack itemStack, UseOnContext contex if (first == null || !handleSpecialBlockEntities(first, maxBlocksToRecolor, context)) { handleBlocks(pos, maxBlocksToRecolor, context); } - GTSoundEntries.SPRAY_CAN_TOOL.play(level, null, player.position(), 1.0f, 1.0f); + GTSoundEntries.SPRAY_CAN_TOOL.value().play(level, null, player.position(), 1.0f, 1.0f); return InteractionResult.SUCCESS; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java index efedb320f21..62491f41fdb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/PortableScannerBehavior.java @@ -108,7 +108,7 @@ public InteractionResult useOn(UseOnContext context) { player.sendSystemMessage(line); } - GTSoundEntries.PORTABLE_SCANNER.play(level, null, player.position(), 1.0f, 1.0f); + GTSoundEntries.PORTABLE_SCANNER.value().play(level, null, player.position(), 1.0f, 1.0f); return InteractionResult.CONSUME; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java index 77c3f89f4cf..c0b59f69e25 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java @@ -80,7 +80,7 @@ public boolean canPerformAction(ItemStack stack, ItemAbility action) { .forEach(stack -> player.getInventory().placeItemBackInInventory(stack)); state.spawnAfterBreak(serverLevel, pos, ItemStack.EMPTY, true); world.destroyBlock(pos, false); - GTSoundEntries.WRENCH_TOOL.playOnServer(serverLevel, pos, 1, GTValues.RNG.nextFloat() * .5f + .5f); + GTSoundEntries.WRENCH_TOOL.value().playOnServer(serverLevel, pos, 1, GTValues.RNG.nextFloat() * .5f + .5f); return InteractionResult.SUCCESS; } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java index e2d9c6e8cd3..d4a03093325 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/client/ItemEntityMixin.java @@ -25,7 +25,7 @@ public void beforeTick(CallbackInfo ci) { ItemEntity entity = (ItemEntity) (Object) this; if (GTValues.FOOLS.getAsBoolean() && !gtceu$wasOnGround && entity.onGround() && ChemicalHelper.getPrefix(entity.getItem().getItem()) == TagPrefix.rodLong) { - GTSoundEntries.METAL_PIPE.playFrom(entity, 10, 1); + GTSoundEntries.METAL_PIPE.value().playFrom(entity, 10, 1); } gtceu$wasOnGround = entity.onGround(); } From 7c19aed93b27c41dbd70aceef3c2d0ec9f400754 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 17:24:22 +1000 Subject: [PATCH 29/45] build fixes --- .../gtceu/api/data/worldgen/SimpleWorldGenLayer.java | 2 -- src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java | 2 +- .../java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java index a027b9ad61a..7d62ddd311f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java @@ -25,8 +25,6 @@ public SimpleWorldGenLayer(ResourceLocation id, IWorldGenLayer.RuleTestSupplier this.id = id; this.target = target; this.levels = levels; - - GTRegistries.register(GTRegistries.WORLD_GEN_LAYERS, id, this); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java index 736959150c2..299e0d1b375 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/IGTTool.java @@ -723,7 +723,7 @@ default boolean canPlaySound(ItemStack stack) { default void playSound(Player player) { if (ConfigHolder.INSTANCE.client.toolUseSounds && getSound() != null) { - player.level().playSound(null, player, getSound().getMainEvent(), SoundSource.PLAYERS, 1F, 1F); + player.level().playSound(null, player, getSound().value().getMainEvent(), SoundSource.PLAYERS, 1F, 1F); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java index 7723594722b..a16ce91ea68 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/ToolHelper.java @@ -563,7 +563,7 @@ public static void onActionDone(@Nullable Player player, ItemStack stack, Level IGTTool tool = (IGTTool) stack.getItem(); ToolHelper.damageItem(stack, player); if (tool.getSound() != null) { - level.playSound(player, pos.x, pos.y, pos.z, tool.getSound().getMainEvent(), + level.playSound(player, pos.x, pos.y, pos.z, tool.getSound().value().getMainEvent(), SoundSource.PLAYERS, 1.0F, 1.0F); } } From 45f7dd81c65d63851828aa5eb3671f11dd07a973 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 17:53:42 +1000 Subject: [PATCH 30/45] make chancelogic deferred --- .../gtceu/api/recipe/GTRecipe.java | 10 +++--- .../api/recipe/chance/logic/ChanceLogic.java | 36 +++++++++---------- .../gtceu/api/recipe/content/Content.java | 2 +- 3 files changed, 22 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java index a872e2963c2..b058dc6748b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipe.java @@ -325,18 +325,18 @@ public boolean hasTick() { public ChanceLogic getChanceLogicForCapability(RecipeCapability cap, IO io, boolean isTick) { if (io == IO.OUT) { if (isTick) { - return tickOutputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return tickOutputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } else { - return outputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return outputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } } else if (io == IO.IN) { if (isTick) { - return tickInputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return tickInputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } else { - return inputChanceLogics.getOrDefault(cap, ChanceLogic.OR); + return inputChanceLogics.getOrDefault(cap, ChanceLogic.OR.value()); } } - return ChanceLogic.OR; + return ChanceLogic.OR.value(); } public GTRecipeSerializer.RecipeIO getRecipeIO() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java index 5c2bf29fc55..979038b9ff7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java @@ -1,19 +1,19 @@ package com.gregtechceu.gtceu.api.recipe.chance.logic; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; import com.google.common.collect.ImmutableList; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2IntMap; +import net.neoforged.neoforge.registries.DeferredHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -31,7 +31,7 @@ public abstract class ChanceLogic { /** * Chanced Output Logic where any ingredients succeeding their roll will be produced */ - public static final ChanceLogic OR = new ChanceLogic("or") { + public static final DeferredHolder OR = register("or", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -71,12 +71,12 @@ public abstract class ChanceLogic { public String toString() { return "ChanceLogic{OR}"; } - }; + }); /** * Chanced Output Logic where all ingredients must succeed their roll in order for any to be produced */ - public static final ChanceLogic AND = new ChanceLogic("and") { + public static final DeferredHolder AND = register("and", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -108,14 +108,14 @@ public String toString() { public String toString() { return "ChanceLogic{AND}"; } - }; + }); /** * Chanced Output Logic where only the first ingredient succeeding its roll will be produced * Deprecated following the rewrite of XOR */ @Deprecated - public static final ChanceLogic FIRST = new ChanceLogic("first") { + public static final DeferredHolder FIRST = register("first", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -149,12 +149,12 @@ public String toString() { public String toString() { return "ChanceLogic{FIRST}"; } - }; + }); /** * Chanced Output Logic where only one of the ingredients will be output, in a manner weighted to the input chances */ - public static final ChanceLogic XOR = new ChanceLogic("xor") { + public static final DeferredHolder XOR = register("xor", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -245,12 +245,12 @@ public String toString() { public String toString() { return "ChanceLogic{XOR}"; } - }; + }); /** * Chanced Output Logic where nothing is produced */ - public static final ChanceLogic NONE = new ChanceLogic("none") { + public static final DeferredHolder NONE = register("none", new ChanceLogic() { @Override public @Unmodifiable List<@NotNull Content> roll(RecipeCapability cap, @@ -268,15 +268,7 @@ public String toString() { public String toString() { return "ChanceLogic{NONE}"; } - }; - - public ChanceLogic(ResourceLocation id) { - GTRegistries.register(GTRegistries.CHANCE_LOGICS, id, this); - } - - private ChanceLogic(String id) { - this(GTCEu.id(id)); - } + }); /** * @param entry the entry to get the complete chance for @@ -354,6 +346,10 @@ static void updateCachedChance(Object ingredient, @Nullable Object2IntMap cac @NotNull public abstract Component getTranslation(); + private static DeferredHolder register(String name, ChanceLogic logic) { + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.CHANCE_LOGIC, () -> logic); + } + @ApiStatus.Internal public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java index b01d57384c4..f06fd728115 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/content/Content.java @@ -91,7 +91,7 @@ public static void addChanceTooltips(RichTooltip tooltip, Content content, Chanc } else { float baseChanceFloat = 100f * content.chance() / content.maxChance(); - if (logic != ChanceLogic.NONE && logic != ChanceLogic.OR) { + if (logic != ChanceLogic.NONE.value() && logic != ChanceLogic.OR.value()) { tooltip.addLine(Component.translatable("gtceu.gui.content.chance_no_boost_logic", FormattingUtil.formatNumber2Places(baseChanceFloat), logic.getTranslation()) .withStyle(ChatFormatting.YELLOW)); From f0f83d1488a032e90809d856a57be06761d4dbcd Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 18:07:03 +1000 Subject: [PATCH 31/45] defer placeholder registration --- .../capability/recipe/RecipeCapability.java | 9 -- .../gtceu/api/placeholder/Placeholder.java | 4 +- .../api/placeholder/PlaceholderHandler.java | 4 - .../gtceu/common/data/GTPlaceholders.java | 113 +++++++++--------- .../integration/ae2/GTAEPlaceholders.java | 20 ++-- .../cctweaked/CCTweakedPlugin.java | 4 +- .../create/GTCreateIntegration.java | 6 +- 7 files changed, 78 insertions(+), 82 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java index 8ff961bc599..7a4c4914e3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java @@ -63,15 +63,6 @@ protected RecipeCapability(ResourceLocation id, int color, boolean doRenderSlot, this.serializer = serializer; } - /** - * @deprecated Use {@link #RecipeCapability(ResourceLocation, int, boolean, int, IContentSerializer)} - */ - @Deprecated(forRemoval = true, since = "8.0.0") - protected RecipeCapability(String name, int color, boolean doRenderSlot, int sortIndex, - IContentSerializer serializer) { - this(GTCEu.id(name), color, doRenderSlot, sortIndex, serializer); - } - public static Codec> contentCodec(RecipeCapability capability) { return Content.codec(capability).listOf().xmap(ArrayList::new, Function.identity()); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java b/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java index 94ece51b375..c4927ef938c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java @@ -10,6 +10,7 @@ import net.minecraft.server.level.ServerLevel; import lombok.Getter; +import org.jetbrains.annotations.ApiStatus; import java.util.List; @@ -24,8 +25,9 @@ public abstract class Placeholder { public abstract MultiLineComponent apply(PlaceholderContext ctx, List args) throws PlaceholderException; + @ApiStatus.Internal public Placeholder(String str) { - this(GTCEu.id(FormattingUtil.toLowerCaseUnderscore(str))); + this(GTCEu.id(str)); } public Placeholder(ResourceLocation id) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java b/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java index df17d8d47e4..3d638c260d4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/api/placeholder/PlaceholderHandler.java @@ -67,10 +67,6 @@ private static final class RendererHolder { public static final Map renderers = new HashMap<>(); } - public static void addPlaceholder(Placeholder placeholder) { - GTRegistries.register(GTRegistries.PLACEHOLDERS, placeholder.getId(), placeholder); - } - @OnlyIn(Dist.CLIENT) public static void addRenderer(String id, IPlaceholderRenderer renderer) { RendererHolder.renderers.put(id, renderer); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java index c36b7883561..cc2380c96a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlaceholders.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEnderRegistry; import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.*; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.client.renderer.placeholder.ModulePlaceholderRenderer; import com.gregtechceu.gtceu.client.renderer.placeholder.QuadPlaceholderRenderer; import com.gregtechceu.gtceu.client.renderer.placeholder.RectPlaceholderRenderer; @@ -24,6 +25,7 @@ import com.gregtechceu.gtceu.common.item.modules.ImageModuleBehaviour; import com.gregtechceu.gtceu.common.machine.multiblock.part.MaintenanceHatchPartMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.monitor.AdvancedMonitorPartMachine; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.integration.ae2.GTAEPlaceholders; import com.gregtechceu.gtceu.integration.cctweaked.CCTweakedPlugin; @@ -98,9 +100,13 @@ public static int countItems(@Nullable Filter filter, @Nullable IItem return cnt; } + private static void registerPlaceholder(Placeholder placeholder) { + GTRegistration.REGISTRATE.simple(placeholder.getName(), GTRegistries.Keys.PLACEHOLDER, () -> placeholder); + } + public static void init() { RegistrateDistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> GTPlaceholders::initRenderers); - PlaceholderHandler.addPlaceholder(new Placeholder("energy") { + registerPlaceholder(new Placeholder("energy") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -119,7 +125,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("energyCapacity") { + registerPlaceholder(new Placeholder("energy_capacity") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -137,7 +143,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("calc") { + registerPlaceholder(new Placeholder("calc") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -154,7 +160,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("itemCount") { + registerPlaceholder(new Placeholder("item_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -188,7 +194,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("fluidCount") { + registerPlaceholder(new Placeholder("fluid_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -208,7 +214,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("if") { + registerPlaceholder(new Placeholder("if") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -232,7 +238,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("color") { + registerPlaceholder(new Placeholder("color") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -243,7 +249,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return new MultiLineComponent(args.get(1).stream().map(c -> c.withStyle(color)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("underline") { + registerPlaceholder(new Placeholder("underline") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -253,7 +259,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, args.getFirst().stream().map(c -> c.withStyle(ChatFormatting.UNDERLINE)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("strike") { + registerPlaceholder(new Placeholder("strike") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -263,7 +269,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, args.getFirst().stream().map(c -> c.withStyle(ChatFormatting.STRIKETHROUGH)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("obf") { + registerPlaceholder(new Placeholder("obf") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -273,7 +279,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, args.getFirst().stream().map(c -> c.withStyle(ChatFormatting.OBFUSCATED)).toList()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("random") { + registerPlaceholder(new Placeholder("random") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -283,7 +289,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, PlaceholderUtils.toInt(args.getFirst()), PlaceholderUtils.toInt(args.get(1)))); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("repeat") { + registerPlaceholder(new Placeholder("repeat") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -306,7 +312,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("block") { + registerPlaceholder(new Placeholder("block") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -320,7 +326,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("tick") { + registerPlaceholder(new Placeholder("tick") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -334,7 +340,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("select") { + registerPlaceholder(new Placeholder("select") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -352,7 +358,7 @@ public boolean isPure() { }); if (!GTCEu.Mods.isCreateLoaded() || !ConfigHolder.INSTANCE.compat.createCompat) { - PlaceholderHandler.addPlaceholder(new Placeholder("redstone") { + registerPlaceholder(new Placeholder("redstone") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -374,9 +380,8 @@ public MultiLineComponent apply(PlaceholderContext ctx, throw new InvalidArgsException(); } }); - } - PlaceholderHandler.addPlaceholder(new Placeholder("previousText") { + registerPlaceholder(new Placeholder("previous_text") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -393,7 +398,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("progress") { + registerPlaceholder(new Placeholder("progress") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -411,7 +416,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("maxProgress") { + registerPlaceholder(new Placeholder("max_progress") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -429,7 +434,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("maintenance") { + registerPlaceholder(new Placeholder("maintenance") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -447,7 +452,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("active") { + registerPlaceholder(new Placeholder("active") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -465,7 +470,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("voltage") { + registerPlaceholder(new Placeholder("voltage") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -483,7 +488,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("amperage") { + registerPlaceholder(new Placeholder("amperage") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -501,7 +506,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("count") { + registerPlaceholder(new Placeholder("count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -520,7 +525,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("data") { + registerPlaceholder(new Placeholder("data") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -533,15 +538,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, if (ctx.itemStackHandler() == null) throw new NotSupportedException(); PlaceholderUtils.checkRange("slot index", 0, ctx.itemStackHandler().getSlots(), slot); ItemStack stack; - if (slot == 0) { - if (ctx.monitorGroup() == null) throw new NotSupportedException(); - if (ctx.monitorGroup().getTargetRaw() == null) throw new NoTargetException(); - IMonitorComponent component = GTCapabilityHelper.getMonitorComponent(ctx.level(), - ctx.monitorGroup().getTargetRaw(), null); - if (component != null && component.getDataItems() != null) { - stack = component.getDataItems().getStackInSlot(ctx.monitorGroup().getDataSlot()); - } else throw new NotSupportedException(); - } else stack = ctx.itemStackHandler().getStackInSlot(slot - 1); + stack = ctx.itemStackHandler().getStackInSlot(slot - 1); int capacity = -1; DataItem component = stack.get(GTDataComponents.DATA_ITEM); if (component != null) capacity = component.capacity(); @@ -585,7 +582,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } } }); - PlaceholderHandler.addPlaceholder(new Placeholder("combine") { + registerPlaceholder(new Placeholder("combine") { @Override public MultiLineComponent apply(PlaceholderContext ctx, List args) { @@ -602,7 +599,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("nbt") { + registerPlaceholder(new Placeholder("nbt") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -620,7 +617,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("toChars") { + registerPlaceholder(new Placeholder("to_chars") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -638,7 +635,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("toAscii") { + registerPlaceholder(new Placeholder("to_ascii") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -654,7 +651,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("fromAscii") { + registerPlaceholder(new Placeholder("from_ascii") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -668,7 +665,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("subList") { + registerPlaceholder(new Placeholder("sub_list") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -690,7 +687,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("cmp") { + registerPlaceholder(new Placeholder("cmp") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -715,7 +712,7 @@ public boolean isPure() { } }); - PlaceholderHandler.addPlaceholder(new Placeholder("bf") { + registerPlaceholder(new Placeholder("bf") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -800,7 +797,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, default -> throw new PlaceholderException(Component .translatable("gtceu.computer_monitor_cover.error.bf_invalid", i).getString()); } - } catch (Exception e) { + } catch (Exception ignored) { } if (Character.isDigit(code.charAt(i))) { @@ -812,7 +809,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } }); - PlaceholderHandler.addPlaceholder(new Placeholder("cmd") { + registerPlaceholder(new Placeholder("cmd") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -877,7 +874,7 @@ public boolean shouldInformAdmins() { return output; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("tm") { + registerPlaceholder(new Placeholder("tm") { @Override public MultiLineComponent apply(PlaceholderContext ctx, List args) { @@ -889,7 +886,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("formatInt") { + registerPlaceholder(new Placeholder("format_int") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -915,7 +912,7 @@ public boolean isPure() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("click") { + registerPlaceholder(new Placeholder("click") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -936,7 +933,7 @@ public boolean isView() { return true; } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ender") { + registerPlaceholder(new Placeholder("ender") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1028,7 +1025,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } } }); - PlaceholderHandler.addPlaceholder(new Placeholder("eval") { + registerPlaceholder(new Placeholder("eval") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1042,7 +1039,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } }); - PlaceholderHandler.addPlaceholder(new Placeholder("module") { + registerPlaceholder(new Placeholder("module") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1065,7 +1062,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, (CompoundTag) stack.save(ctx.level().registryAccess()))); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("setImage") { + registerPlaceholder(new Placeholder("set_image") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1086,7 +1083,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.empty(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("rect") { + registerPlaceholder(new Placeholder("rect") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1110,7 +1107,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, renderData)); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("quad") { + registerPlaceholder(new Placeholder("quad") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1144,7 +1141,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, renderData)); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("item") { + registerPlaceholder(new Placeholder("item") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1156,7 +1153,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(ctx.itemStackHandler().getStackInSlot(slot - 1).toString()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("blockNbt") { + registerPlaceholder(new Placeholder("block_nbt") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1180,7 +1177,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return tag == null ? MultiLineComponent.empty() : MultiLineComponent.literal(tag.toString()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("setTargetSlot") { + registerPlaceholder(new Placeholder("set_target_slot") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -1199,7 +1196,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.empty(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("targetSlot") { + registerPlaceholder(new Placeholder("target_slot") { @Override public MultiLineComponent apply(PlaceholderContext ctx, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java index 07e32d30178..a5a244dc922 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/GTAEPlaceholders.java @@ -4,6 +4,8 @@ import com.gregtechceu.gtceu.api.cover.filter.Filters; import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.*; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.utils.GTStringUtils; import net.minecraft.MethodsReturnNonnullByDefault; @@ -103,8 +105,12 @@ private static Vector3i getSpatialSize(IGrid grid) { return new Vector3i(tmp.getX(), tmp.getY(), tmp.getZ()).absolute(); } + private static void registerPlaceholder(Placeholder placeholder) { + GTRegistration.REGISTRATE.simple(placeholder.getName(), GTRegistries.Keys.PLACEHOLDER, () -> placeholder); + } + public static void init() { - PlaceholderHandler.addPlaceholder(new Placeholder("ae2itemCount") { + registerPlaceholder(new Placeholder("ae2_item_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -127,7 +133,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, throw new InvalidArgsException(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2fluidCount") { + registerPlaceholder(new Placeholder("ae2_fluid_count") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -139,7 +145,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, throw new WrongNumberOfArgsException(1, args.size()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2power") { + registerPlaceholder(new Placeholder("ae2_power") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -149,7 +155,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(grid.getEnergyService().getStoredPower()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2maxPower") { + registerPlaceholder(new Placeholder("ae2_max_power") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -159,7 +165,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(grid.getEnergyService().getMaxStoredPower()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2powerUsage") { + registerPlaceholder(new Placeholder("ae2_power_usage") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -169,7 +175,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return MultiLineComponent.literal(grid.getEnergyService().getAvgPowerUsage()); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2spatial") { + registerPlaceholder(new Placeholder("ae2_spatial") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -189,7 +195,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, } else throw new InvalidArgsException(); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("ae2crafting") { + registerPlaceholder(new Placeholder("ae2_crafting") { @Override public MultiLineComponent apply(PlaceholderContext ctx, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java index 05bdc33d6ef..adee36d98ce 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java @@ -4,6 +4,8 @@ import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.NotSupportedException; import com.gregtechceu.gtceu.api.placeholder.exceptions.PlaceholderException; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.integration.cctweaked.peripherals.*; import dan200.computercraft.api.ComputerCraftAPI; @@ -28,7 +30,7 @@ public static void init() { } public static void initPlaceholders() { - PlaceholderHandler.addPlaceholder(new Placeholder("bufferText") { + GTRegistration.REGISTRATE.simple("buffer_text", GTRegistries.Keys.PLACEHOLDER, () -> new Placeholder("buffer_text") { @Override public MultiLineComponent apply(PlaceholderContext ctx, diff --git a/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java b/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java index 5cb90e50d18..dbec7b5db98 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java @@ -2,6 +2,8 @@ import com.gregtechceu.gtceu.api.placeholder.*; import com.gregtechceu.gtceu.api.placeholder.exceptions.*; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.registry.GTRegistration; import com.gregtechceu.gtceu.utils.GTStringUtils; import net.createmod.catnip.data.Couple; @@ -36,7 +38,7 @@ public static void init() { } public static void initPlaceholders() { - PlaceholderHandler.addPlaceholder(new Placeholder("redstone") { + GTRegistration.REGISTRATE.simple("redstone", GTRegistries.Keys.PLACEHOLDER, () -> new Placeholder("redstone") { @Override public MultiLineComponent apply(PlaceholderContext ctx, @@ -44,7 +46,7 @@ public MultiLineComponent apply(PlaceholderContext ctx, return processRedstonePlaceholder(ctx, args); } }); - PlaceholderHandler.addPlaceholder(new Placeholder("displayTarget") { + GTRegistration.REGISTRATE.simple("display_target", GTRegistries.Keys.PLACEHOLDER, () -> new Placeholder("display_target") { @Override public MultiLineComponent apply(PlaceholderContext ctx, From 518e00e36858378e923fced28e619ad0252f0352 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 18:15:56 +1000 Subject: [PATCH 32/45] defer dimension markers --- .../gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../gtceu/common/data/GTDimensionMarkers.java | 30 +++++++------------ 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index e06db02c0e2..92b34fe0089 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -162,7 +162,7 @@ public static void init(final IEventBus modBus) { GTBlocks.init(); GTFluids.init(); - GTDimensionMarkers.init(); + GTDimensionMarkers.init(modBus); GTRecipeCapabilities.init(); GTRecipeConditions.init(); ChanceLogic.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java index 8bb6da55f37..7a51ec3507e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.client.renderer.block.model.BlockModel; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.ItemLike; @@ -13,6 +14,8 @@ import net.minecraft.world.level.block.Block; import com.tterrag.registrate.util.entry.BlockEntry; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredRegister; import org.jetbrains.annotations.Nullable; import java.util.function.Supplier; @@ -26,28 +29,15 @@ public class GTDimensionMarkers { REGISTRATE.resetCreativeModeTab(); } + private static final DeferredRegister BASE_MC_DIMENSION_MARKERS = DeferredRegister.create(GTRegistries.Keys.DIMENSION_MARKER, "minecraft"); + public static final BlockEntry OVERWORLD_MARKER = createMarker("overworld"); public static final BlockEntry NETHER_MARKER = createMarker("the_nether"); public static final BlockEntry END_MARKER = createMarker("the_end"); - public static final DimensionMarker OVERWORLD = createAndRegister(Level.OVERWORLD, 0, - () -> OVERWORLD_MARKER, null); - public static final DimensionMarker NETHER = createAndRegister(Level.NETHER, 0, - () -> NETHER_MARKER, null); - public static final DimensionMarker END = createAndRegister(Level.END, 0, - () -> END_MARKER, null); - - public static DimensionMarker createAndRegister(ResourceKey dimension, int tier, Supplier supplier, - @Nullable Component overrideName) { - if (overrideName == null) { - // if a special name hasn't been set, use the dimension's 'translated' name as a default - overrideName = DimensionCondition.getDimensionName(dimension); - } - - DimensionMarker marker = new DimensionMarker(tier, supplier, overrideName); - GTRegistries.register(GTRegistries.DIMENSION_MARKERS, dimension.location(), marker); - return marker; - } + public static final Holder OVERWORLD = BASE_MC_DIMENSION_MARKERS.register("overworld", () -> new DimensionMarker(0, () -> OVERWORLD_MARKER, null)); + public static final Holder NETHER = BASE_MC_DIMENSION_MARKERS.register("nether", () -> new DimensionMarker(0, () -> NETHER_MARKER, null)); + public static final Holder END = BASE_MC_DIMENSION_MARKERS.register("end", () -> new DimensionMarker(0, () -> END_MARKER, null)); private static BlockEntry createMarker(String name) { return REGISTRATE.block("%s_marker".formatted(name), Block::new) @@ -65,5 +55,7 @@ private static BlockEntry createMarker(String name) { .register(); } - public static void init() {} + public static void init(IEventBus modBus) { + BASE_MC_DIMENSION_MARKERS.register(modBus); + } } From b0cf8290cda17fd45472c782990ba802256a5690 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 18:18:31 +1000 Subject: [PATCH 33/45] spotless --- .../capability/recipe/RecipeCapability.java | 1 - .../data/worldgen/SimpleWorldGenLayer.java | 2 -- .../api/data/worldgen/WorldGenLayers.java | 5 ++-- .../gtceu/api/item/tool/GTToolType.java | 1 - .../gtceu/api/placeholder/Placeholder.java | 1 - .../gtceu/api/recipe/GTRecipeType.java | 2 +- .../api/recipe/chance/logic/ChanceLogic.java | 4 +-- .../gtceu/api/recipe/package-info.java | 2 +- .../registrate/builder/GTBlockBuilder.java | 3 ++- .../registrate/builder/SoundEntryBuilder.java | 17 +++++++----- .../gtceu/api/sound/SoundEntry.java | 2 +- .../gtceu/common/data/GTDimensionMarkers.java | 22 +++++++--------- .../cctweaked/CCTweakedPlugin.java | 24 +++++++++-------- .../create/GTCreateIntegration.java | 26 ++++++++++--------- 14 files changed, 56 insertions(+), 56 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java index 7a4c4914e3f..92089829216 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java +++ b/src/main/java/com/gregtechceu/gtceu/api/capability/recipe/RecipeCapability.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.capability.recipe; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.trait.notifiable.NotifiableRecipeHandlerTrait; import com.gregtechceu.gtceu.api.recipe.GTRecipe; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java index 7d62ddd311f..de258a9856a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/SimpleWorldGenLayer.java @@ -1,7 +1,5 @@ package com.gregtechceu.gtceu.api.data.worldgen; -import com.gregtechceu.gtceu.api.registry.GTRegistries; - import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java index 8648e6e48b8..5ee00a02814 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/WorldGenLayers.java @@ -1,9 +1,9 @@ package com.gregtechceu.gtceu.api.data.worldgen; import com.gregtechceu.gtceu.GTCEu; - import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.registry.GTRegistration; + import net.minecraft.core.Holder; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.BlockTags; @@ -32,7 +32,8 @@ public class WorldGenLayers { private static Holder register(String name, IWorldGenLayer.RuleTestSupplier target, Set> levels) { - return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.WORLD_GEN_LAYER, () -> new SimpleWorldGenLayer(GTCEu.id(name), target, levels)); + return GTRegistration.REGISTRATE.simple(name, GTRegistries.Keys.WORLD_GEN_LAYER, + () -> new SimpleWorldGenLayer(GTCEu.id(name), target, levels)); } public static void init() {} diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java index dadec511662..5e7fb1698c1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/tool/GTToolType.java @@ -738,7 +738,6 @@ public Builder sound(Holder sound, boolean playSoundOnBlockDestroy) return this; } - public Builder electric(int tier) { return tier(tier); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java b/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java index c4927ef938c..f8a4778080b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/placeholder/Placeholder.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.placeholder.exceptions.PlaceholderException; import com.gregtechceu.gtceu.common.capability.PlaceholderSavedData; -import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java index 8095d042a58..bf1a8f3b3e8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/GTRecipeType.java @@ -10,7 +10,6 @@ import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; import com.gregtechceu.gtceu.utils.FormattingUtil; -import lombok.experimental.Tolerate; import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; import net.minecraft.core.registries.BuiltInRegistries; @@ -26,6 +25,7 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import lombok.experimental.Tolerate; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java index 979038b9ff7..ba531a40812 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/chance/logic/ChanceLogic.java @@ -5,15 +5,15 @@ import com.gregtechceu.gtceu.api.recipe.content.Content; import com.gregtechceu.gtceu.api.recipe.content.ContentModifier; import com.gregtechceu.gtceu.api.registry.GTRegistries; - import com.gregtechceu.gtceu.common.registry.GTRegistration; + import net.minecraft.network.chat.Component; +import net.neoforged.neoforge.registries.DeferredHolder; import com.google.common.collect.ImmutableList; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.Object2IntMap; -import net.neoforged.neoforge.registries.DeferredHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java index bd0abe66900..3ada506f7ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java +++ b/src/main/java/com/gregtechceu/gtceu/api/recipe/package-info.java @@ -1,4 +1,4 @@ @NotNullByDefault package com.gregtechceu.gtceu.api.recipe; -import org.jetbrains.annotations.NotNullByDefault; \ No newline at end of file +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java index cf398ef89b9..f45deecd9c1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java @@ -16,9 +16,10 @@ import com.tterrag.registrate.providers.loot.RegistrateBlockLootTables; import com.tterrag.registrate.util.nullness.*; -import javax.annotation.ParametersAreNonnullByDefault; import java.util.function.Supplier; +import javax.annotation.ParametersAreNonnullByDefault; + @ParametersAreNonnullByDefault public class GTBlockBuilder extends BlockBuilder { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java index 48337e761d5..0e6582622a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/SoundEntryBuilder.java @@ -7,10 +7,6 @@ import com.gregtechceu.gtceu.api.sound.SoundEntry; import com.gregtechceu.gtceu.api.sound.WrappedSoundEntry; -import com.tterrag.registrate.AbstractRegistrate; -import com.tterrag.registrate.builders.AbstractBuilder; -import com.tterrag.registrate.builders.BuilderCallback; -import com.tterrag.registrate.util.entry.RegistryEntry; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.data.CachedOutput; @@ -21,6 +17,10 @@ import net.minecraft.sounds.SoundSource; import com.google.gson.JsonObject; +import com.tterrag.registrate.AbstractRegistrate; +import com.tterrag.registrate.builders.AbstractBuilder; +import com.tterrag.registrate.builders.BuilderCallback; +import com.tterrag.registrate.util.entry.RegistryEntry; import org.jetbrains.annotations.Nullable; import java.nio.file.Path; @@ -120,10 +120,13 @@ public SoundEntryBuilder

playExisting(SoundEvent event) { @Override protected SoundEntry createEntry() { SoundEntry entry = wrappedEvents.isEmpty() ? - new CustomSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), variants, subtitle, category, attenuationDistance) : - new WrappedSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), subtitle, wrappedEvents, category, attenuationDistance); + new CustomSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), variants, + subtitle, category, attenuationDistance) : + new WrappedSoundEntry(ResourceLocation.fromNamespaceAndPath(getOwner().getModid(), getName()), subtitle, + wrappedEvents, category, attenuationDistance); entry.prepare(); - entry.register(soundEvent -> Registry.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), soundEvent)); + entry.register( + soundEvent -> Registry.register(BuiltInRegistries.SOUND_EVENT, soundEvent.getLocation(), soundEvent)); return entry; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java b/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java index 8c03b4e662a..127d86fe406 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sound/SoundEntry.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.api.sound; -import lombok.Getter; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.core.Vec3i; @@ -15,6 +14,7 @@ import net.neoforged.api.distmarker.OnlyIn; import com.google.gson.JsonObject; +import lombok.Getter; import java.util.function.BooleanSupplier; import java.util.function.Consumer; diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java index 7a51ec3507e..61c658f22cb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTDimensionMarkers.java @@ -2,23 +2,15 @@ import com.gregtechceu.gtceu.api.data.DimensionMarker; import com.gregtechceu.gtceu.api.registry.GTRegistries; -import com.gregtechceu.gtceu.common.recipe.condition.DimensionCondition; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Holder; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceKey; -import net.minecraft.world.level.ItemLike; -import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; - -import com.tterrag.registrate.util.entry.BlockEntry; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredRegister; -import org.jetbrains.annotations.Nullable; -import java.util.function.Supplier; +import com.tterrag.registrate.util.entry.BlockEntry; import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; @@ -29,15 +21,19 @@ public class GTDimensionMarkers { REGISTRATE.resetCreativeModeTab(); } - private static final DeferredRegister BASE_MC_DIMENSION_MARKERS = DeferredRegister.create(GTRegistries.Keys.DIMENSION_MARKER, "minecraft"); + private static final DeferredRegister BASE_MC_DIMENSION_MARKERS = DeferredRegister + .create(GTRegistries.Keys.DIMENSION_MARKER, "minecraft"); public static final BlockEntry OVERWORLD_MARKER = createMarker("overworld"); public static final BlockEntry NETHER_MARKER = createMarker("the_nether"); public static final BlockEntry END_MARKER = createMarker("the_end"); - public static final Holder OVERWORLD = BASE_MC_DIMENSION_MARKERS.register("overworld", () -> new DimensionMarker(0, () -> OVERWORLD_MARKER, null)); - public static final Holder NETHER = BASE_MC_DIMENSION_MARKERS.register("nether", () -> new DimensionMarker(0, () -> NETHER_MARKER, null)); - public static final Holder END = BASE_MC_DIMENSION_MARKERS.register("end", () -> new DimensionMarker(0, () -> END_MARKER, null)); + public static final Holder OVERWORLD = BASE_MC_DIMENSION_MARKERS.register("overworld", + () -> new DimensionMarker(0, () -> OVERWORLD_MARKER, null)); + public static final Holder NETHER = BASE_MC_DIMENSION_MARKERS.register("nether", + () -> new DimensionMarker(0, () -> NETHER_MARKER, null)); + public static final Holder END = BASE_MC_DIMENSION_MARKERS.register("end", + () -> new DimensionMarker(0, () -> END_MARKER, null)); private static BlockEntry createMarker(String name) { return REGISTRATE.block("%s_marker".formatted(name), Block::new) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java index adee36d98ce..548dba76b40 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/cctweaked/CCTweakedPlugin.java @@ -30,17 +30,19 @@ public static void init() { } public static void initPlaceholders() { - GTRegistration.REGISTRATE.simple("buffer_text", GTRegistries.Keys.PLACEHOLDER, () -> new Placeholder("buffer_text") { + GTRegistration.REGISTRATE.simple("buffer_text", GTRegistries.Keys.PLACEHOLDER, + () -> new Placeholder("buffer_text") { - @Override - public MultiLineComponent apply(PlaceholderContext ctx, - List args) throws PlaceholderException { - PlaceholderUtils.checkArgs(args, 1); - if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) throw new NotSupportedException(); - int i = PlaceholderUtils.toInt(args.get(0)); - PlaceholderUtils.checkRange("line number", 1, 100, i); - return MultiLineComponent.of(cover.getComputerCraftTextBuffer().get(i - 1)); - } - }); + @Override + public MultiLineComponent apply(PlaceholderContext ctx, + List args) throws PlaceholderException { + PlaceholderUtils.checkArgs(args, 1); + if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) + throw new NotSupportedException(); + int i = PlaceholderUtils.toInt(args.get(0)); + PlaceholderUtils.checkRange("line number", 1, 100, i); + return MultiLineComponent.of(cover.getComputerCraftTextBuffer().get(i - 1)); + } + }); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java b/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java index dbec7b5db98..6438bd3c39c 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/create/GTCreateIntegration.java @@ -46,18 +46,20 @@ public MultiLineComponent apply(PlaceholderContext ctx, return processRedstonePlaceholder(ctx, args); } }); - GTRegistration.REGISTRATE.simple("display_target", GTRegistries.Keys.PLACEHOLDER, () -> new Placeholder("display_target") { - - @Override - public MultiLineComponent apply(PlaceholderContext ctx, - List args) throws PlaceholderException { - PlaceholderUtils.checkArgs(args, 1); - if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) throw new NotSupportedException(); - int i = PlaceholderUtils.toInt(args.get(0)); - PlaceholderUtils.checkRange("line number", 1, 100, i); - return MultiLineComponent.of(cover.getCreateDisplayTargetBuffer().get(i - 1)); - } - }); + GTRegistration.REGISTRATE.simple("display_target", GTRegistries.Keys.PLACEHOLDER, + () -> new Placeholder("display_target") { + + @Override + public MultiLineComponent apply(PlaceholderContext ctx, + List args) throws PlaceholderException { + PlaceholderUtils.checkArgs(args, 1); + if (!(ctx.cover() instanceof IPlaceholderInfoProviderCover cover)) + throw new NotSupportedException(); + int i = PlaceholderUtils.toInt(args.get(0)); + PlaceholderUtils.checkRange("line number", 1, 100, i); + return MultiLineComponent.of(cover.getCreateDisplayTargetBuffer().get(i - 1)); + } + }); } private static int getRedstoneLinkPower(PlaceholderContext ctx, From 18f66eb2a72ae3d760efbf1ac97ff314e901e889 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 18:38:39 +1000 Subject: [PATCH 34/45] a --- .../api/data/worldgen/modifier/BiomePlacement.java | 1 + .../api/data/worldgen/modifier/DimensionFilter.java | 1 + .../api/data/worldgen/modifier/FrequencyModifier.java | 1 + .../gtceu/api/registry/registrate/GTRegistrate.java | 11 +++++++++++ .../com/gregtechceu/gtceu/common/CommonProxy.java | 3 ++- .../data}/GTPlacementModifierTypes.java | 5 ++++- .../worldgen/modifier/RubberTreeChancePlacement.java | 2 +- 7 files changed, 21 insertions(+), 3 deletions(-) rename src/main/java/com/gregtechceu/gtceu/{api/data/worldgen/modifier => common/data}/GTPlacementModifierTypes.java (86%) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java index 3ab0a58be64..57b3b0750f6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.api.data.worldgen.BiomeWeightModifier; +import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.levelgen.placement.PlacementContext; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java index 0a34355d6d8..1570ba54cca 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; +import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderSet; import net.minecraft.core.RegistryCodecs; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java index 99f2f4d72ff..8eb1e72b2a6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; +import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; import net.minecraft.core.BlockPos; import net.minecraft.util.ExtraCodecs; import net.minecraft.util.Mth; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index dfc07c6f578..7ef23c35a6d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -3,6 +3,8 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.cover.CoverDefinition; +import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; +import com.gregtechceu.gtceu.api.data.medicalcondition.Symptom; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; @@ -251,6 +253,15 @@ public GTBlockBuilder block(@NotNull P parent, String callback -> GTBlockBuilder.create(this, parent, name, callback, factory)); } + /// Medical Conditions + + public RegistryEntry medicalCondition(String name, int color, + int maxProgression, MedicalCondition.IdleProgressionType progressionType, + float progressionRate, boolean canBePermanent, + Symptom.ConfiguredSymptom... symptoms) { + return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), color, maxProgression, progressionType, progressionRate, canBePermanent, symptoms)); + } + /// Creative Mode Tabs private @Nullable RegistryEntry currentTab; diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 92b34fe0089..012f738ab84 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -17,7 +17,7 @@ import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.IndicatorGenerators; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerators; -import com.gregtechceu.gtceu.api.data.worldgen.modifier.GTPlacementModifierTypes; +import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; import com.gregtechceu.gtceu.api.events.ModifyMachineEvent; import com.gregtechceu.gtceu.api.events.RegisterSpoilablesEvent; import com.gregtechceu.gtceu.api.item.IComponentItem; @@ -140,6 +140,7 @@ public static void init(final IEventBus modBus) { GregTechDatagen.initPre(); GTRegistries.init(modBus); + REGISTRATE.registerEventListeners(modBus); GTElements.init(); MaterialIconSet.init(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlacementModifierTypes.java similarity index 86% rename from src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java rename to src/main/java/com/gregtechceu/gtceu/common/data/GTPlacementModifierTypes.java index fed64a5c4f3..f0ed2f2a99d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/GTPlacementModifierTypes.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTPlacementModifierTypes.java @@ -1,6 +1,9 @@ -package com.gregtechceu.gtceu.api.data.worldgen.modifier; +package com.gregtechceu.gtceu.common.data; import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.data.worldgen.modifier.BiomePlacement; +import com.gregtechceu.gtceu.api.data.worldgen.modifier.DimensionFilter; +import com.gregtechceu.gtceu.api.data.worldgen.modifier.FrequencyModifier; import com.gregtechceu.gtceu.common.worldgen.modifier.RubberTreeChancePlacement; import net.minecraft.core.registries.BuiltInRegistries; diff --git a/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java b/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java index dde631a8170..ae08c93bfce 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java +++ b/src/main/java/com/gregtechceu/gtceu/common/worldgen/modifier/RubberTreeChancePlacement.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.common.worldgen.modifier; -import com.gregtechceu.gtceu.api.data.worldgen.modifier.GTPlacementModifierTypes; +import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.core.BlockPos; From 70f863d59c9a69fa9dcae0909343cf5d38c1d0e1 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 29 Aug 2026 19:33:49 +1000 Subject: [PATCH 35/45] update medical conditions to use holders --- .../api/data/chemical/material/Material.java | 9 +- .../material/properties/HazardProperty.java | 5 +- .../medicalcondition/MedicalCondition.java | 14 ++- .../api/registry/registrate/GTRegistrate.java | 9 ++ .../capability/MedicalConditionTracker.java | 2 +- .../common/data/GTMedicalConditions.java | 106 ++++++++---------- .../gtceu/common/data/GTRecipeModifiers.java | 7 +- .../common/data/machines/GTMachineUtils.java | 3 +- .../item/behavior/AntidoteBehavior.java | 18 +-- .../EnvironmentalHazardEmitterTrait.java | 8 ++ .../EnvironmentalHazardCondition.java | 4 +- .../data/recipe/builder/GTRecipeBuilder.java | 9 ++ .../material/MaterialBuilderWrapper.java | 10 +- .../com/gregtechceu/gtceu/utils/GTUtil.java | 2 +- .../MedicalConditionTestHelpers.java | 31 ++--- 15 files changed, 131 insertions(+), 106 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java index 227264f68b1..8b4158f5b8c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/Material.java @@ -22,6 +22,7 @@ import com.gregtechceu.gtceu.utils.GTMath; import com.gregtechceu.gtceu.utils.TagUtil; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceKey; @@ -1488,7 +1489,7 @@ public Builder radioactiveHazard(float multiplier) { * @param trigger The trigger type for this hazard. * @param condition The condition applied by this hazard. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition) { + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, 1, false)); return this; } @@ -1504,7 +1505,7 @@ public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition con * @param condition The condition applied by this hazard. * @param progressionMultiplier Multiplier for how quickly the condition will progress. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition, float progressionMultiplier) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, progressionMultiplier, false)); @@ -1521,7 +1522,7 @@ public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition con * @param applyToDerivatives Whether the Hazard should be applied to materials with this Material in its * components list. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition, float progressionMultiplier, boolean applyToDerivatives) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, progressionMultiplier, applyToDerivatives)); @@ -1540,7 +1541,7 @@ public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition con * @param applyToDerivatives Whether the Hazard should be applied to materials with this Material in its * components list. */ - public Builder hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, + public Builder hazard(HazardProperty.HazardTrigger trigger, Holder condition, boolean applyToDerivatives) { properties.setProperty(PropertyKey.HAZARD, new HazardProperty(trigger, condition, 1, applyToDerivatives)); return this; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java index 50f710853d4..b0161cc22a4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/properties/HazardProperty.java @@ -11,6 +11,7 @@ import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.CustomTags; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.StringRepresentable; @@ -31,12 +32,12 @@ public class HazardProperty implements IMaterialProperty { - public final MedicalCondition condition; + public final Holder condition; public final HazardTrigger hazardTrigger; public final boolean applyToDerivatives; public final float progressionMultiplier; - public HazardProperty(HazardTrigger hazardTrigger, MedicalCondition condition, float progressionMultiplier, + public HazardProperty(HazardTrigger hazardTrigger, Holder condition, float progressionMultiplier, boolean applyToDerivatives) { this.hazardTrigger = hazardTrigger; this.condition = condition; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java b/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java index 883d2bf7183..98199468b81 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java @@ -47,13 +47,11 @@ public class MedicalCondition { * condition. */ @Getter - @Setter - @NotNull - public Consumer recipeModifier = builder -> {}; + public final Consumer recipeModifier; public MedicalCondition(ResourceLocation id, int color, int maxProgression, IdleProgressionType progressionType, float progressionRate, - boolean canBePermanent, + boolean canBePermanent, Consumer recipeModifier, Symptom.ConfiguredSymptom... symptoms) { this.id = id; this.color = color; @@ -67,6 +65,14 @@ public MedicalCondition(ResourceLocation id, int color, this.idleProgressionType = progressionType; this.idleProgressionRate = progressionRate; this.canBePermanent = canBePermanent; + this.recipeModifier = recipeModifier; + } + + public MedicalCondition(ResourceLocation id, int color, + int maxProgression, IdleProgressionType progressionType, float progressionRate, + boolean canBePermanent, + Symptom.ConfiguredSymptom... symptoms) { + this(id, color, maxProgression, progressionType, progressionRate, canBePermanent, $ -> {}, symptoms); } public ResourceKey getDamageType() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 7ef23c35a6d..1285375352c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -11,6 +11,7 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.builder.GTBlockBuilder; import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; @@ -20,6 +21,7 @@ import com.gregtechceu.gtceu.client.renderer.cover.SimpleCoverRenderer; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; +import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -255,6 +257,13 @@ public GTBlockBuilder block(@NotNull P parent, String /// Medical Conditions + public RegistryEntry medicalCondition(String name, int color, + int maxProgression, MedicalCondition.IdleProgressionType progressionType, + float progressionRate, boolean canBePermanent, Consumer recipeModifier, + Symptom.ConfiguredSymptom... symptoms) { + return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), color, maxProgression, progressionType, progressionRate, canBePermanent, recipeModifier, symptoms)); + } + public RegistryEntry medicalCondition(String name, int color, int maxProgression, MedicalCondition.IdleProgressionType progressionType, float progressionRate, boolean canBePermanent, diff --git a/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java b/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java index 172080e6f5b..3a47cb62e50 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java @@ -80,7 +80,7 @@ public void progressRelatedCondition(@NotNull MaterialEntry materialEntry, int c HazardProperty materialHazard = materialEntry.material().getProperty(PropertyKey.HAZARD); float strength = (float) (materialEntry.getMaterialAmount() / GTValues.M) * count * materialHazard.progressionMultiplier; - progressCondition(materialHazard.condition, strength); + progressCondition(materialHazard.condition.value(), strength); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java index 75d4f2ce3b8..7fe39ca8802 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMedicalConditions.java @@ -1,61 +1,64 @@ package com.gregtechceu.gtceu.common.data; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.data.medicalcondition.Symptom; -import com.gregtechceu.gtceu.api.registry.GTRegistries; -import net.minecraft.resources.ResourceLocation; +import net.neoforged.neoforge.registries.DeferredHolder; import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.dust; import static com.gregtechceu.gtceu.common.data.GTMaterials.*; +import static com.gregtechceu.gtceu.common.registry.GTRegistration.REGISTRATE; public class GTMedicalConditions { + // spotless:off + // General Conditions - public static final MedicalCondition NONE = register("none", 0xffffff, 0, + public static final DeferredHolder NONE = REGISTRATE.medicalCondition("none", 0xffffff, 0, MedicalCondition.IdleProgressionType.NONE, 0, false); + // takes 5 minutes of having burn-causing items in the player's inventory for them to get the weakness effect // heals 2 seconds' worth of progression every second when not holding those items - public static final MedicalCondition CHEMICAL_BURNS = register("chemical_burns", 0xbc305a, 300, + public static final DeferredHolder CHEMICAL_BURNS = REGISTRATE.medicalCondition("chemical_burns", 0xbc305a, 300, MedicalCondition.IdleProgressionType.HEAL, 2, false, - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS)) - .setRecipeModifier(builder -> builder + builder -> builder .outputFluids(DilutedHydrochloricAcid.getFluid(500)) - .outputFluids(DilutedSulfuricAcid.getFluid(750))); + .outputFluids(DilutedSulfuricAcid.getFluid(750)), + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS)); + // takes 5 minutes of having poisonous items in the player's inventory for them to get the weakness effect // at 10 minutes, they get a weaker version of the poison effect // heals 2 seconds' worth of progression every second when not holding those items - public static final MedicalCondition POISON = register("poison", 0xA36300, 600, + public static final DeferredHolder POISON = REGISTRATE.medicalCondition("poison", 0xA36300, 600, MedicalCondition.IdleProgressionType.HEAL, 2, true, + builder -> builder.outputFluids(SulfurTrioxide.getFluid(1000)), new Symptom.ConfiguredSymptom(Symptom.WEAK_POISONING), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)) - .setRecipeModifier(builder -> builder - .outputFluids(SulfurTrioxide.getFluid(1000))); + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)); + // having weakly poisonous items in the player's inventory gives them the weak poison effect // the effect ramps up in 6 "stages", getting progressively worse every stage. It caps out at Weak Poison 10. // does NOT heal automatically - public static final MedicalCondition WEAK_POISON = register("weak_poison", 0x6D7917, 1800, + public static final DeferredHolder WEAK_POISON = REGISTRATE.medicalCondition("weak_poison", 0x6D7917, 1800, MedicalCondition.IdleProgressionType.NONE, 0, false, - new Symptom.ConfiguredSymptom(Symptom.WEAK_POISONING, 6, 1800)) - .setRecipeModifier(builder -> builder - .outputFluids(NitricOxide.getFluid(1000))); + builder -> builder.outputFluids(NitricOxide.getFluid(1000)), + new Symptom.ConfiguredSymptom(Symptom.WEAK_POISONING, 6, 1800)); + // takes 2.5 minutes of having irritating items in the player's inventory for them to get the weakness effect // at 5 minutes, they begin getting random damage every so often // heals 5 seconds' worth of progression every second when not holding those items - public static final MedicalCondition IRRITANT = register("irritant", 0x02512f, 600, + public static final DeferredHolder IRRITANT = REGISTRATE.medicalCondition("irritant", 0x02512f, 600, MedicalCondition.IdleProgressionType.HEAL, 5, false, + builder -> builder.outputItems(dust, DarkAsh, 4), new Symptom.ConfiguredSymptom(Symptom.RANDOM_DAMAGE), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)) - .setRecipeModifier(builder -> builder - .outputItems(dust, DarkAsh, 4)); + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 300, 600)); + // takes 5 minutes of having nauseating items in the player's inventory for them to get the nausea effect // heals 5 seconds' worth of progression every second when not holding those items - public static final MedicalCondition NAUSEA = register("nausea", 0x1D4A00, 600, + public static final DeferredHolder NAUSEA = REGISTRATE.medicalCondition("nausea", 0x1D4A00, 600, MedicalCondition.IdleProgressionType.HEAL, 5, false, - new Symptom.ConfiguredSymptom(Symptom.NAUSEA, 1, 420, 600)) - .setRecipeModifier(builder -> builder - .outputFluids(CarbonMonoxide.getFluid(50))); + builder -> builder.outputFluids(CarbonMonoxide.getFluid(50)), + new Symptom.ConfiguredSymptom(Symptom.NAUSEA, 1, 420, 600)); + /** * All effects: *

    @@ -75,7 +78,7 @@ public class GTMedicalConditions { * This condition does NOT heal automatically. You can use {@linkplain GTItems#RAD_AWAY_PILL * rad-away pills} to heal it. */ - public static final MedicalCondition CARCINOGEN = register("carcinogen", 0x0f570f, 36000, + public static final DeferredHolder CARCINOGEN = REGISTRATE.medicalCondition("carcinogen", 0x0f570f, 36000, MedicalCondition.IdleProgressionType.NONE, 0, true, new Symptom.ConfiguredSymptom(Symptom.DEATH), new Symptom.ConfiguredSymptom(Symptom.HEALTH_DEBUFF, 10800, 21600), @@ -86,58 +89,41 @@ public class GTMedicalConditions { new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 3600, 14400)); // Material specific Conditions - public static final MedicalCondition ASBESTOSIS = register("asbestosis", 0xe3e3e3, 5000, + public static final DeferredHolder ASBESTOSIS = REGISTRATE.medicalCondition("asbestosis", 0xe3e3e3, 5000, MedicalCondition.IdleProgressionType.HEAL, 1, true, + builder -> builder.outputItems(dust, Asbestos, 4), // new Symptom.ConfiguredSymptom(Symptom.HEALTH_DEBUFF, 3000, 5000), // new Symptom.ConfiguredSymptom(Symptom.AIR_SUPPLY_DEBUFF, 1500, 3500), // new Symptom.ConfiguredSymptom(Symptom.HUNGER, 500, 4000), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 1200, 5000)) - .setRecipeModifier(builder -> builder - .outputItems(dust, Asbestos, 4)); - public static final MedicalCondition ARSENICOSIS = register("arsenicosis", 0xbd4b15, 1000, + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 1200, 5000)); + + public static final DeferredHolder ARSENICOSIS = REGISTRATE.medicalCondition("arsenicosis", 0xbd4b15, 1000, MedicalCondition.IdleProgressionType.HEAL, 1, true, + builder -> builder.outputItems(dust, Arsenic, 4), new Symptom.ConfiguredSymptom(Symptom.WITHER), new Symptom.ConfiguredSymptom(Symptom.NAUSEA), new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 2, 500, 1000), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 330, 1000)) + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 330, 1000)); // new Symptom.ConfiguredSymptom(Symptom.HUNGER, 2, .2f)) - .setRecipeModifier(builder -> builder - .outputItems(dust, Arsenic, 4)); - public static final MedicalCondition METHANOL_POISONING = register("methanol_poisoning", 0xaa8800, 600, + + public static final DeferredHolder METHANOL_POISONING = REGISTRATE.medicalCondition("methanol_poisoning", 0xaa8800, 600, MedicalCondition.IdleProgressionType.HEAL, .5f, true, + builder -> builder.outputFluids(Methanol.getFluid(1000)), new Symptom.ConfiguredSymptom(Symptom.POISONING), new Symptom.ConfiguredSymptom(Symptom.BLINDNESS, 2, 450, 600), new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 300, 600), - new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 1, 150, 600)) - .setRecipeModifier(builder -> builder - .outputFluids(Methanol.getFluid(1000))); - public static final MedicalCondition CARBON_MONOXIDE_POISONING = register("carbon_monoxide_poisoning", + new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 1, 150, 600)); + + public static final DeferredHolder CARBON_MONOXIDE_POISONING = REGISTRATE.medicalCondition("carbon_monoxide_poisoning", 0x041525, 2000, MedicalCondition.IdleProgressionType.HEAL, 1, true, + builder -> builder.outputFluids(CarbonMonoxide.getFluid(1000)), new Symptom.ConfiguredSymptom(Symptom.DEATH), new Symptom.ConfiguredSymptom(Symptom.NAUSEA), new Symptom.ConfiguredSymptom(Symptom.SLOWNESS, 2, 1500, 2000), - new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 500, 2000)) - .setRecipeModifier(builder -> builder - .outputFluids(CarbonMonoxide.getFluid(1000))); - - public static MedicalCondition register(ResourceLocation id, int color, - int maxProgression, MedicalCondition.IdleProgressionType progressionType, - float progressionRate, boolean canBePermanent, - Symptom.ConfiguredSymptom... symptoms) { - var condition = new MedicalCondition(id, color, maxProgression, - progressionType, progressionRate, canBePermanent, symptoms); - GTRegistries.register(GTRegistries.MEDICAL_CONDITIONS, id, condition); - return condition; - } - - // internal variant of the above that skips having to write `register(GTCEu.id(...` - private static MedicalCondition register(String id, int color, - int maxProgression, MedicalCondition.IdleProgressionType progressionType, - float progressionRate, boolean canBePermanent, - Symptom.ConfiguredSymptom... symptoms) { - return register(GTCEu.id(id), color, maxProgression, progressionType, progressionRate, canBePermanent, - symptoms); - } + new Symptom.ConfiguredSymptom(Symptom.WEAKNESS, 2, 500, 2000)); + + + // spotless:on public static void init() {} } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java index abf2036da76..d3ade870231 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTRecipeModifiers.java @@ -27,6 +27,7 @@ import net.minecraft.Util; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.item.ItemStack; @@ -88,14 +89,14 @@ public class GTRecipeModifiers { } }).build(); - public static final BiFunction ENVIRONMENT_REQUIREMENT = Util - .memoize((condition, maxAllowedStrength) -> (machine, recipe) -> { + public static final BiFunction, Integer, RecipeModifier> ENVIRONMENT_REQUIREMENT = Util + .memoize((conditionHolder, maxAllowedStrength) -> (machine, recipe) -> { if (!ConfigHolder.INSTANCE.gameplay.environmentalHazards) return ModifierFunction.IDENTITY; if (!(machine.getLevel() instanceof ServerLevel serverLevel)) return ModifierFunction.NULL; EnvironmentalHazardSavedData data = EnvironmentalHazardSavedData.getOrCreate(serverLevel); BlockPos machinePos = machine.getBlockPos(); - var zone = data.getZoneByContainedPosAndCondition(machinePos, condition); + var zone = data.getZoneByContainedPosAndCondition(machinePos, conditionHolder.value()); if (zone == null) return ModifierFunction.IDENTITY; float strength = zone.strength(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index 3392354f8ca..618825e10d7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -778,7 +778,8 @@ public static Component environmentRequirement(MedicalCondition condition) { } public static Component defaultEnvironmentRequirement() { - return environmentRequirement(GTMedicalConditions.CARBON_MONOXIDE_POISONING); + //TODO fix + return Component.empty();//environmentRequirement(GTMedicalConditions.CARBON_MONOXIDE_POISONING); } public static BiConsumer> TANK_TOOLTIPS = (stack, list) -> { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java index 4b24296e47b..9ba0c15037e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/AntidoteBehavior.java @@ -4,10 +4,13 @@ import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.capability.MedicalConditionTracker; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; +import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; @@ -18,10 +21,7 @@ import org.jetbrains.annotations.Nullable; -import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; /** * Defines an antidote for a hazard (e.g. poisoning) @@ -30,12 +30,12 @@ * @param removePercent how many 'counts' should be removed from the chosen condition(s), * as a percentage of the current 'counts' in the range [0, 100]. -1 for all. */ -public record AntidoteBehavior(Set types, int removePercent) +public record AntidoteBehavior(HolderSet types, int removePercent) implements IInteractionItem, IAddInformation { - public AntidoteBehavior(int removePercent, MedicalCondition... types) { - this(new HashSet<>(), removePercent); - this.types.addAll(Arrays.asList(types)); + @SafeVarargs + public AntidoteBehavior(int removePercent, Holder... types) { + this(HolderSet.direct(types), removePercent); } @Override @@ -53,7 +53,7 @@ public ItemStack finishUsingItem(ItemStack stack, Level level, LivingEntity livi if (condition == null) { continue; } - if (!this.types.contains(condition)) { + if (!this.types.contains(GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition))) { continue; } if (removePercent == -1) { @@ -76,7 +76,7 @@ public void appendHoverText(ItemStack stack, @Nullable Item.TooltipContext conte if (GTUtil.isShiftDown()) { tooltipComponents.add(Component.translatable("tooltip.gtceu.antidote.description_shift")); for (var type : types) { - tooltipComponents.add(type.getAffectedName()); + tooltipComponents.add(type.value().getAffectedName()); } if (removePercent == -1) { tooltipComponents diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java index 8037624b80f..46846ccf403 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/hazard/EnvironmentalHazardEmitterTrait.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData; import com.gregtechceu.gtceu.config.ConfigHolder; +import net.minecraft.core.Holder; import net.minecraft.server.level.ServerLevel; import lombok.Getter; @@ -36,6 +37,13 @@ public EnvironmentalHazardEmitterTrait(MedicalCondition conditionToEmit, this.emissionStrength = emissionStrength; } + public EnvironmentalHazardEmitterTrait(Holder conditionToEmit, + float emissionStrength) { + super(); + this.conditionToEmit = conditionToEmit.value(); + this.emissionStrength = emissionStrength; + } + @Override public void afterWorking() { if (emitHazardOnRecipeFinished) emitHazard(); diff --git a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java index 8af727d5429..00f0fd2dc5b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/common/recipe/condition/EnvironmentalHazardCondition.java @@ -32,7 +32,7 @@ public class EnvironmentalHazardCondition extends RecipeCondition 0; + return zone != null && zone.strength() > 0 && zone.condition() == condition; } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java index 0b6f154cf2f..4328cf8b804 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java @@ -29,6 +29,7 @@ import com.gregtechceu.gtceu.utils.ResearchManager; import com.gregtechceu.gtceu.utils.codec.CodecUtils; +import net.minecraft.core.Holder; import net.minecraft.core.HolderLookup; import net.minecraft.core.HolderSet; import net.minecraft.core.registries.Registries; @@ -1229,6 +1230,14 @@ public GTRecipeBuilder environmentalHazard(MedicalCondition condition) { return environmentalHazard(condition, false); } + public GTRecipeBuilder environmentalHazard(Holder condition, boolean reverse) { + return addCondition(new EnvironmentalHazardCondition(condition.value()).setReverse(reverse)); + } + + public GTRecipeBuilder environmentalHazard(Holder condition) { + return environmentalHazard(condition, false); + } + public final GTRecipeBuilder adjacentFluids(Fluid... fluids) { return adjacentFluids(false, fluids); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java index c9107ed135f..9726b20f906 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java @@ -12,6 +12,7 @@ import com.gregtechceu.gtceu.api.fluids.FluidBuilder; import com.gregtechceu.gtceu.api.fluids.FluidState; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKey; +import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.integration.kjs.helpers.MaterialStackWrapper; import net.minecraft.resources.ResourceLocation; @@ -19,6 +20,7 @@ import dev.latvian.mods.kubejs.registry.BuilderBase; import dev.latvian.mods.kubejs.typings.Info; import dev.latvian.mods.kubejs.typings.Param; +import org.checkerframework.checker.units.qual.C; import java.util.Collection; import java.util.function.UnaryOperator; @@ -538,25 +540,25 @@ public MaterialBuilderWrapper radioactiveHazard(float multiplier) { } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition) { - internal.hazard(trigger, condition); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition)); return this; } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, float progressionMultiplier) { - internal.hazard(trigger, condition, progressionMultiplier); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), progressionMultiplier); return this; } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, float progressionMultiplier, boolean applyToDerivatives) { - internal.hazard(trigger, condition, progressionMultiplier, applyToDerivatives); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), progressionMultiplier, applyToDerivatives); return this; } public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, boolean applyToDerivatives) { - internal.hazard(trigger, condition, applyToDerivatives); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), applyToDerivatives); return this; } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java index 6411e557e89..3c93e921d88 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java @@ -562,7 +562,7 @@ public static void appendHazardTooltips(Material material, List toolt if (GTUtil.isShiftDown()) { tooltipComponents.add(Component.translatable("tooltip.gtceu.medical_condition.description_shift")); - tooltipComponents.add(material.getProperty(HAZARD).condition.getTranslatableName()); + tooltipComponents.add(material.getProperty(HAZARD).condition.value().getTranslatableName()); tooltipComponents.add(Component.translatable("tooltip.gtceu.hazard_trigger")); tooltipComponents.add(material.getProperty(HAZARD).hazardTrigger.getTranslatableName()); return; diff --git a/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java b/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java index 93504eebaa4..13d0bcc15fd 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java +++ b/src/test/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTestHelpers.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.gametest.util.TestUtils; +import net.minecraft.core.Holder; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; @@ -14,19 +15,19 @@ public class MedicalConditionTestHelpers { public static void addMedicalConditionCounts(GameTestHelper helper, Player player, - MedicalCondition condition, float counts) { - getMedicalConditionTracker(helper, player).progressCondition(condition, counts); + Holder condition, float counts) { + getMedicalConditionTracker(helper, player).progressCondition(condition.value(), counts); } public static void setMedicalConditionCounts(GameTestHelper helper, Player player, - MedicalCondition condition, float counts) { + Holder condition, float counts) { MedicalConditionTracker tracker = getMedicalConditionTracker(helper, player); - tracker.medicalConditions.put(condition, counts); + tracker.medicalConditions.put(condition.value(), counts); tracker.updateActiveSymptoms(); } - public static void clearMedicalCondition(GameTestHelper helper, Player player, MedicalCondition condition) { - getMedicalConditionTracker(helper, player).removeMedicalCondition(condition); + public static void clearMedicalCondition(GameTestHelper helper, Player player, Holder condition) { + getMedicalConditionTracker(helper, player).removeMedicalCondition(condition.value()); } public static MedicalConditionTracker getMedicalConditionTracker(GameTestHelper helper, Player player) { @@ -37,21 +38,21 @@ public static MedicalConditionTracker getMedicalConditionTracker(GameTestHelper return tracker; } - public static void assertHasCondition(GameTestHelper helper, Player player, MedicalCondition condition) { - helper.assertTrue(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition), - "Player " + player + " should have medical condition " + condition.id); + public static void assertHasCondition(GameTestHelper helper, Player player, Holder condition) { + helper.assertTrue(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition.value()), + "Player " + player + " should have medical condition " + condition.getKey()); } - public static void assertFreeOfCondition(GameTestHelper helper, Player player, MedicalCondition condition) { - helper.assertFalse(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition), - "Player " + player + " should not have medical condition " + condition.id); + public static void assertFreeOfCondition(GameTestHelper helper, Player player, Holder condition) { + helper.assertFalse(getMedicalConditionTracker(helper, player).medicalConditions.containsKey(condition.value()), + "Player " + player + " should not have medical condition " + condition.getKey()); } public static void assertConditionCountEquals(GameTestHelper helper, Player player, - MedicalCondition condition, float expectedCounts) { - float counts = getMedicalConditionTracker(helper, player).medicalConditions.getFloat(condition); + Holder condition, float expectedCounts) { + float counts = getMedicalConditionTracker(helper, player).medicalConditions.getFloat(condition.value()); helper.assertTrue(Mth.equal(counts, expectedCounts), "Player " + player + " should have " + expectedCounts + " 'counts' of medical condition " + - condition.id + ", has " + counts); + condition.getKey() + ", has " + counts); } } From 91f5a17f1bf976f76de5fc778c92e0f21341e6cf Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 30 Aug 2026 12:15:59 +1000 Subject: [PATCH 36/45] start working on deferred machine registration --- .../gtceu/api/machine/MachineDefinition.java | 18 +-- .../api/registry/registrate/GTRegistrate.java | 13 +- .../registrate/builder/MachineBuilder.java | 115 +++++++----------- .../builder/MultiblockMachineBuilder.java | 12 +- .../common/data/machines/GTMachineUtils.java | 16 +-- .../machine/KJSTieredMultiblockBuilder.java | 4 +- .../MultiblockMachineBuilderWrapper.java | 6 +- 7 files changed, 77 insertions(+), 107 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index 7472fd4a914..8483c9066ea 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -16,6 +16,7 @@ import net.minecraft.core.IdMapper; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -30,6 +31,7 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import net.neoforged.neoforge.registries.DeferredHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -52,10 +54,10 @@ public class MachineDefinition implements Supplier { @Setter @Nullable private String langValue; - @Setter - private Supplier blockSupplier; - @Setter - private Supplier itemSupplier; + @Setter(onMethod_ = @ApiStatus.Internal) + private DeferredHolder blockHolder; + @Setter(onMethod_ = @ApiStatus.Internal) + private DeferredHolder itemHolder; @Setter private Supplier> blockEntityTypeSupplier; @Getter @@ -144,12 +146,12 @@ public final void registerDefaultState(MachineRenderState state) { this.defaultRenderState = state; } - public Block getBlock() { - return blockSupplier.get(); + public MetaMachineBlock getBlock() { + return blockHolder.get(); } public MetaMachineItem getItem() { - return itemSupplier.get(); + return itemHolder.get(); } public BlockEntityType getBlockEntityType() { @@ -171,7 +173,7 @@ public VoxelShape getShape(Direction direction) { @Override public MetaMachineBlock get() { - return (MetaMachineBlock) blockSupplier.get(); + return blockHolder.value(); } public String getName() { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 1285375352c..55cf6110849 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -11,7 +11,6 @@ import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; -import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.builder.GTBlockBuilder; import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; @@ -188,16 +187,16 @@ public GTRegistrate registerEventListeners(IEventBus bus) { MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } - public MultiblockMachineBuilder multiblock(String name, - BiFunction blockFactory, - BiFunction itemFactory, - MachineInstanceFactory blockEntityFactory) { + public MultiblockMachineBuilder multiblock(String name, + BiFunction blockFactory, + BiFunction itemFactory, + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, blockFactory, itemFactory, blockEntityFactory); } - public MultiblockMachineBuilder multiblock(String name, - MachineInstanceFactory blockEntityFactory) { + public MultiblockMachineBuilder multiblock(String name, + MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 048662aaf6d..27b00b4de12 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -33,7 +33,7 @@ import com.gregtechceu.gtceu.integration.kjs.GTCEuStartupEvents; import com.gregtechceu.gtceu.integration.kjs.events.ModifyMachineEventJS; -import net.minecraft.MethodsReturnNonnullByDefault; +import lombok.Setter; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.RenderType; import net.minecraft.network.chat.Component; @@ -54,7 +54,6 @@ import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; import brachy.modularui.theme.ThemeAPI; -import com.tterrag.registrate.AbstractRegistrate; import com.tterrag.registrate.builders.BlockBuilder; import com.tterrag.registrate.builders.ItemBuilder; import com.tterrag.registrate.providers.DataGenContext; @@ -64,26 +63,22 @@ import com.tterrag.registrate.util.nullness.NonNullConsumer; import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; import dev.latvian.mods.rhino.util.HideFromJS; -import dev.latvian.mods.rhino.util.RemapPrefixForJS; import it.unimi.dsi.fastutil.objects.Reference2IntMap; import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; import lombok.Getter; -import lombok.Setter; import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.Validate; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.*; -import javax.annotation.ParametersAreNonnullByDefault; - import static com.gregtechceu.gtceu.common.data.models.GTMachineModels.*; -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -@RemapPrefixForJS("kjs$") +@SuppressWarnings("unused") @Accessors(chain = true, fluent = true) public class MachineBuilder> { @@ -94,9 +89,9 @@ public class MachineBuilder blockFactory; protected final BiFunction itemFactory; protected MachineInstanceFactory instanceFactory; + @Setter(onMethod_ = @ApiStatus.Internal) + public Function definitionFactory; - @Setter - protected Function definition; @Nullable @Getter private MachineBuilder.ModelInitializer model = null; @@ -154,7 +149,7 @@ public class MachineBuilder definition, + Function definitionFactory, BiFunction blockFactory, BiFunction itemFactory, MachineInstanceFactory instanceFactory) { @@ -163,7 +158,7 @@ public MachineBuilder(GTRegistrate registrate, String name, this.blockFactory = blockFactory; this.itemFactory = itemFactory; this.instanceFactory = instanceFactory; - this.definition = definition; + this.definitionFactory = definitionFactory; } @SuppressWarnings("unchecked") @@ -330,19 +325,14 @@ public SELF recipeType(GTRecipeType type) { @Tolerate public SELF recipeTypes(GTRecipeType... types) { + Validate.noNullElements(types, "Cannot add null recipe type to machine."); + List typeList = new ArrayList<>(); Collections.addAll(typeList, this.recipeTypes); - for (int i = 0; i < types.length; i++) { - GTRecipeType type = types[i]; - if (type != null) { - initRecipeMachineModelProperties(type); - typeList.add(type); - } else { - GTCEu.LOGGER.error( - "Tried to set null recipe type on machine {} (index {}). Did you create the recipe type before this machine?", - this.registrate.makeResourceLocation(this.name), i); - } + for (GTRecipeType type : types) { + initRecipeMachineModelProperties(type); + typeList.add(type); } this.recipeTypes = typeList.toArray(GTRecipeType[]::new); return getThis(); @@ -546,22 +536,6 @@ public > SELF modelProperty(Property property, return getThis(); } - // KJS helpers for model property defaults - // These don't need to be copied to the multiblock builder because KJS doesn't care about the return type downgrade - - public SELF kjs$modelPropertyBool(Property property, boolean defaultValue) { - return modelProperty(property, defaultValue); - } - - public SELF kjs$modelPropertyInt(Property property, int defaultValue) { - return modelProperty(property, defaultValue); - } - - public & Comparable> SELF kjs$modelPropertyEnum(Property property, - T defaultValue) { - return modelProperty(property, defaultValue); - } - @Tolerate public SELF modelProperties(Property... properties) { return this.modelProperties(List.of(properties)); @@ -640,7 +614,7 @@ public SELF multiblockPreviewRenderer(boolean multiBlockWorldPreview, } protected DEFINITION createDefinition() { - return definition.apply(registrate.makeResourceLocation(name)); + return definitionFactory.apply(registrate.makeResourceLocation(name)); } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -674,7 +648,7 @@ public DEFINITION register() { if (model == null && blockModel == null) { simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); } - var blockBuilder = BlockBuilderWrapper.makeBlockBuilder(getThis(), definition); + var blockBuilder = makeBlockBuilder(definition); if (this.langValue != null) { blockBuilder.lang(langValue); definition.setLangValue(langValue); @@ -682,9 +656,9 @@ public DEFINITION register() { if (this.blockBuilder != null) { this.blockBuilder.accept(blockBuilder); } - var block = blockBuilder.register(); + BlockEntry block = blockBuilder.register(); - var itemBuilder = ItemBuilderWrapper.makeItemBuilder(getThis(), block); + ItemBuilder itemBuilder = makeItemBuilder(block); if (this.itemBuilder != null) { this.itemBuilder.accept(itemBuilder); } @@ -705,8 +679,8 @@ public DEFINITION register() { } definition.setThemeId(themeId); definition.setRecipeTypes(recipeTypes); - definition.setBlockSupplier(block); - definition.setItemSupplier(item); + definition.setBlockHolder(block); + definition.setItemHolder(item); definition.setTier(tier); definition.setRecipeOutputLimits(recipeOutputLimits); definition.setBlockEntityTypeSupplier(blockEntity::get); @@ -738,6 +712,7 @@ public DEFINITION register() { definition.setRenderXEIPreview(renderMultiblockXEIPreview); definition.setRenderWorldPreview(renderMultiblockWorldPreview); GTRegistries.register(GTRegistries.MACHINES, definition.getId(), definition); + return definition; } @@ -779,40 +754,33 @@ default ModelInitializer compose(UnaryOperator BlockBuilder> makeBlockBuilder(MachineBuilder builder, - DEFINITION definition) { - return builder.registrate.block(properties -> makeBlock(builder, definition, properties)) - .color(() -> () -> MetaMachineBlock::colorTinted) - .initialProperties(() -> Blocks.DISPENSER) - .properties(BlockBehaviour.Properties::noLootTable) - .addLayer(() -> RenderType::cutout) - .exBlockstate(builder.blockModel != null ? builder.blockModel : createMachineModel(builder.model)) - .properties(builder.blockProp) - .onRegister(b -> Arrays.stream(builder.abilities).forEach(a -> a.register(builder.tier, b))); - } - private static Block makeBlock(MachineBuilder builder, DEFINITION definition, - BlockBehaviour.Properties properties) { - MachineDefinition.setBuilt(definition); - var b = builder.blockFactory.apply(properties, definition); - MachineDefinition.clearBuilt(); - return b; - } + private BlockBuilder makeBlockBuilder(DEFINITION definition) { + return this.registrate.block(properties -> makeBlock(definition, properties)) + .color(() -> () -> MetaMachineBlock::colorTinted) + .initialProperties(() -> Blocks.DISPENSER) + .properties(BlockBehaviour.Properties::noLootTable) + .addLayer(() -> RenderType::cutout) + .exBlockstate(this.blockModel != null ? this.blockModel : createMachineModel(this.model)) + .properties(this.blockProp) + .onRegister(b -> Arrays.stream(this.abilities).forEach(a -> a.register(this.tier, b))); } - protected static class ItemBuilderWrapper { + private MetaMachineBlock makeBlock(DEFINITION definition, BlockBehaviour.Properties properties) { + MachineDefinition.setBuilt(definition); + var b = this.blockFactory.apply(properties, definition); + MachineDefinition.clearBuilt(); + return b; + } - public static ItemBuilder> makeItemBuilder(MachineBuilder builder, - BlockEntry block) { - return builder.registrate - .item(properties -> builder.itemFactory.apply((MetaMachineBlock) block.get(), properties)) + private ItemBuilder makeItemBuilder(BlockEntry block) { + return this.registrate + .item(properties -> this.itemFactory.apply(block.get(), properties)) .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys // copied from BlockBuilder#item .model((ctx, prov) -> { prov.withExistingParent(ctx.getName(), - ResourceLocation.fromNamespaceAndPath(builder.registrate.getModid(), + ResourceLocation.fromNamespaceAndPath(this.registrate.getModid(), "block/machine/" + ctx.getName())); }) .clientExtension(() -> () -> new IClientItemExtensions() { @@ -822,9 +790,8 @@ public BlockEntityWithoutLevelRenderer getCustomRenderer() { return ItemWithBERModelRenderer.INSTANCE; } }) - .color(() -> () -> builder.itemColor::apply) - .properties(builder.itemProp); - } + .color(() -> () -> this.itemColor::apply) + .properties(this.itemProp); } // spotless:on diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index cc0ef64ccda..c77b1a68347 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -37,10 +37,10 @@ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @Accessors(chain = true, fluent = true) -public class MultiblockMachineBuilder> - extends MachineBuilder { + SELF extends MultiblockMachineBuilder> + extends MachineBuilder { private boolean generator; private final Map> patterns; @@ -55,10 +55,10 @@ public class MultiblockMachineBuilder blockFactory, + BiFunction blockFactory, BiFunction itemFactory, MachineInstanceFactory blockEntityFactory) { - super(registrate, name, (loc -> (DEFINITION) new MultiblockMachineDefinition(loc)), + super(registrate, name, (MultiblockMachineDefinition::new), blockFactory, itemFactory, blockEntityFactory); patterns = new Object2ReferenceOpenHashMap<>(); @@ -122,7 +122,7 @@ public SELF partSorter(Comparator sorter) { @Override @HideFromJS - public DEFINITION register() { + public MultiblockMachineDefinition register() { var definition = super.register(); definition.setGenerator(generator); if (patterns.isEmpty()) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index 618825e10d7..c7f7c137d92 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.data.machines; +import brachy.modularui.api.drawable.Text; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; @@ -61,6 +62,7 @@ import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -535,8 +537,8 @@ public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate re Supplier casing, Supplier valve, @Nullable PropertyFluidFilter filter, - BiConsumer, ResourceLocation> rendererSetup) { - MultiblockMachineBuilder builder = registrate + BiConsumer, ResourceLocation> rendererSetup) { + MultiblockMachineBuilder builder = registrate .multiblock(name, holder -> new MultiblockTankMachine(holder, capacity, filter)) .langValue(displayName) .tooltips( @@ -577,7 +579,7 @@ public static MachineDefinition registerTankValve(GTRegistrate registrate, Strin MACHINE extends MultiblockControllerMachine> MultiblockMachineDefinition[] registerTieredMultis(GTRegistrate registrate, String name, MachineInstanceFactory.Tiered factory, - BiFunction, MultiblockMachineDefinition> builder, + BiFunction, MultiblockMachineDefinition> builder, int... tiers) { MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[GTValues.TIER_COUNT]; for (int tier : tiers) { @@ -773,13 +775,13 @@ public static Component explosion() { return null; } - public static Component environmentRequirement(MedicalCondition condition) { - return Component.translatable("gtceu.recipe.environmental_hazard.reverse", condition.getTranslatableName()); + public static Component environmentRequirement(Holder condition) { + // Dynamic to avoid resolving the medical condition holder until the component is actually used. + return Text.dynamic(() -> Component.translatable("gtceu.recipe.environmental_hazard.reverse", condition.value().getTranslatableName())); } public static Component defaultEnvironmentRequirement() { - //TODO fix - return Component.empty();//environmentRequirement(GTMedicalConditions.CARBON_MONOXIDE_POISONING); + return environmentRequirement(GTMedicalConditions.CARBON_MONOXIDE_POISONING); } public static BiConsumer> TANK_TOOLTIPS = (stack, list) -> { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java index c91f796a2d9..c809d1ccaf0 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java @@ -28,7 +28,7 @@ public class KJSTieredMultiblockBuilder extends BuilderBase<@Nullable MultiblockMachineDefinition @NotNull []> implements IMachineBuilderKJS { - private final MultiblockMachineBuilder[] builders = new MultiblockMachineBuilder[TIER_COUNT]; + private final MultiblockMachineBuilder[] builders = new MultiblockMachineBuilder[TIER_COUNT]; @Setter public transient int[] tiers = GTMachineUtils.ELECTRIC_TIERS; @@ -92,7 +92,7 @@ public void generateLang(LangKubeEvent lang) { MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[TIER_COUNT]; for (final int tier : tiers) { String tierName = VN[tier].toLowerCase(Locale.ROOT); - MultiblockMachineBuilder builder = GTRegistrate + MultiblockMachineBuilder builder = GTRegistrate .createIgnoringListenerErrors(this.id.getNamespace()) .multiblock(String.format("%s_%s", tierName, this.id.getPath()), holder -> machine.create(holder, tier)); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java index b947118866b..ba0afd21f09 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java @@ -50,10 +50,10 @@ public class MultiblockMachineBuilderWrapper extends BuilderBase implements IMachineBuilderKJS { - private final MultiblockMachineBuilder internal; + private final MultiblockMachineBuilder internal; public MultiblockMachineBuilderWrapper(ResourceLocation id, - MultiblockMachineBuilder internal) { + MultiblockMachineBuilder internal) { super(id); this.internal = internal; this.dummyBuilder = true; @@ -95,7 +95,7 @@ public MultiblockMachineBuilderWrapper recoveryStacks(Supplier stac } public MultiblockMachineBuilderWrapper definition(Function definition) { - internal.definition(definition); + internal.definitionFactory(definition); return this; } From d00c6ff00d39ca48a89b392744938f58a64d6e18 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 30 Aug 2026 12:26:30 +1000 Subject: [PATCH 37/45] more machine definition cleanup --- .../gtceu/api/machine/MachineDefinition.java | 8 +-- .../gtceu/api/multiblock/Predicates.java | 2 +- .../common/data/machines/GCYMMachines.java | 50 +++++++++---------- .../common/data/machines/GTMachineUtils.java | 6 +-- .../common/data/machines/GTMultiMachines.java | 24 ++++----- .../electric/CentralMonitorMachine.java | 2 +- .../machine/MEPatternBufferPartMachine.java | 2 +- .../builders/machine/IMachineBuilderKJS.java | 2 +- .../MultiblockMachineBuilderWrapper.java | 5 -- 9 files changed, 48 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index 8483c9066ea..ae0faf3b50e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -38,12 +38,13 @@ import java.util.EnumMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.function.*; /** * Representing basic information of a machine. */ -public class MachineDefinition implements Supplier { +public class MachineDefinition { public static final IdMapper RENDER_STATE_REGISTRY = new IdMapper<>(512); @@ -171,7 +172,6 @@ public VoxelShape getShape(Direction direction) { return this.cache.computeIfAbsent(direction, dir -> GTUtil.rotateVoxelShape(shape, dir)); } - @Override public MetaMachineBlock get() { return blockHolder.value(); } @@ -208,10 +208,10 @@ public int hashCode() { return id.hashCode(); } - static final ThreadLocal STATE = new ThreadLocal<>(); + static final ThreadLocal<@Nullable MachineDefinition> STATE = new ThreadLocal<>(); public static MachineDefinition getBuilt() { - return STATE.get(); + return Objects.requireNonNull(STATE.get()); } public static void setBuilt(MachineDefinition state) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java b/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java index 75340ecd42c..4ca143863df 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java +++ b/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java @@ -150,7 +150,7 @@ public static MultiPredicate machines(@Nullable MachineDefinition... definitions List blocks = new ArrayList<>(); for (MachineDefinition definition : definitions) { if (definition != null) { - blocks.add(definition.get()); + blocks.add(definition.getBlock()); } } if (blocks.isEmpty()) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java index dd4fe58ec1d..4d44549f7a3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java @@ -94,7 +94,7 @@ public static void init() {} .slice("XXXXX", "XGGGX", "XGGGX", "XAAAX") .slice("XXXXX", "XGGGX", "XGGGX", "XAAAX") .slice("XXXXX", "XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_SECURE_MACERATION.get()).setMinGlobalLimited(55) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -123,7 +123,7 @@ public static void init() {} .slice("XXXXX", "X X", "X X") .slice("XXXXX", "XTTTX", "X X") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(55) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -153,7 +153,7 @@ public static void init() {} .slice("XXXXX", "XPAPX", "XXXXX") .slice("XXXXX", "XAPAX", "XXXXX") .slice("#XXX#", "XXSXX", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_VIBRATION_SAFE.get()).setMinGlobalLimited(40) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -181,7 +181,7 @@ public static void init() {} .slice("XXXXX", "XPPPX", "XAPAX", "XPPPX", "XAGAX", "FFGFF") .slice("XXXXX", "XAPAX", "XAAAX", "XAPAX", "XAAAX", "##F##") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#", "#XXX#", "##F##") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_REACTION_SAFE.get()).setMinGlobalLimited(50) .and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -213,7 +213,7 @@ public static void init() {} .slice("XXXXX", "XCCCX", "XCCCX") .slice("XXXXX", "XCCCX", "XCCCX") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_NONCONDUCTING.get()).setMinGlobalLimited(30) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -239,7 +239,7 @@ public static void init() {} .slice("XCXCX", "XCXCX", "XCXCX") .slice("XCXCX", "XCXCX", "XCXCX") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_NONCONDUCTING.get()).setMinGlobalLimited(35) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -266,7 +266,7 @@ public static void init() {} .slice("XXX", "XAX", "XXX") .slice("XXX", "XAX", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_TUNGSTENSTEEL_ROBUST.get()).setMinGlobalLimited(30) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -294,7 +294,7 @@ public static void init() {} .slice("XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX") .slice("XXXXXXXXX", "XAAAXAAAX", "XGGGXXXXX") .slice("XXXXXXXXX", "XGGGXXSXX", "XGGGX###X") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_LARGE_SCALE_ASSEMBLING.get()).setMinGlobalLimited(40) .and(Predicates.autoAbilities(definition.getRecipeTypes(), false, false, true, true, true, true)) @@ -328,7 +328,7 @@ public static void init() {} .slice("XXXXXXX", "XAAAAPX", "XGGGGGX") .slice("XXXXXXX", "XTTTTXX", "XXXXXXX") .slice("#####XX", "#####SX", "#####XX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_LARGE_SCALE_ASSEMBLING.get()).setMinGlobalLimited(55) .and(Predicates.autoAbilities(definition.getRecipeTypes(), false, false, true, true, true, true)) @@ -360,7 +360,7 @@ public static void init() {} .slice("XXXXX", "XAAAX", "XAAAX", "XXMXX") .slice("XXXXX", "XACAX", "XACAX", "XXXXX") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_HIGH_TEMPERATURE_SMELTING.get()).setMinGlobalLimited(45) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -392,7 +392,7 @@ public static void init() {} .slice("XXXXX", "GAAAG", "GACAG", "XKXKX") .slice("XXXXX", "XAAAX", "XAAAX", "XKKKX") .slice("XXSXX", "XXGXX", "XXGXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('C', blocks(CASING_TUNGSTENSTEEL_PIPE.get())) .where('X', blocks(CASING_LASER_SAFE_ENGRAVING.get()).setMinGlobalLimited(50) .and(Predicates.autoAbilities(definition.getRecipeTypes())) @@ -421,7 +421,7 @@ public static void init() {} .slice("#XXX#", "#XAX#", "XKKKX", "XKKKX", "X###X") .slice("XXXXX", "XAXAX", "XKKKX", "XKKKX", "X###X") .slice("#X#X#", "#X#X#", "#XSX#", "XXXXX", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_VIBRATION_SAFE.get()).setMinGlobalLimited(50) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) @@ -451,7 +451,7 @@ public static void init() {} .slice("XXXXX", "CAAAC", "GAAAG", "CAAAC", "XXMXX") .slice("XXXXX", "CAAAC", "GAAAG", "CAAAC", "XXXXX") .slice("#XSX#", "#CCC#", "#GGG#", "#CCC#", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_HIGH_TEMPERATURE_SMELTING.get()).setMinGlobalLimited(30) .and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, false))) @@ -499,7 +499,7 @@ public static void init() {} .slice("XXX", "XTX", "XXX") .slice("XXX", "XTX", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(30) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -525,7 +525,7 @@ public static void init() {} .slice("XXXXXXX", "XXXXXXX", "XXXXXXX") .slice("XXXXXXX", "XAXGGGX", "XXXXXXX") .slice("XXXXXXX", "XSXCCCX", "XXXXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STRESS_PROOF.get()).setMinGlobalLimited(40) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -554,7 +554,7 @@ public static void init() {} .slice("XXXXX", "XCPCX", "XAPAX", "XAPAX", "#XXX#") .slice("XXXXX", "XCCCX", "XAAAX", "XXAXX", "##X##") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#", "#####") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_CORROSION_PROOF.get()).setMinGlobalLimited(50) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -582,7 +582,7 @@ public static void init() {} .slice("XXXXXXX", "XAXCCCX", "XXXAAAX", "##XXXXX") .slice("XXXXXXX", "XAXCCCX", "XXXAAAX", "##XXXXX") .slice("XXXXXXX", "XSXGGGX", "XXXGGGX", "##XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_SHOCK_PROOF.get()).setMinGlobalLimited(65) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -609,14 +609,14 @@ public static void init() {} MultiPredicate casingPredicate = blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(40); MultiPredicate exportPredicate = abilities(PartAbility.EXPORT_FLUIDS_1X); if (GTCEu.Mods.isAE2Loaded()) - exportPredicate = exportPredicate.xor(blocks(GTAEMachines.FLUID_EXPORT_HATCH_ME.get())); + exportPredicate = exportPredicate.xor(machines(GTAEMachines.FLUID_EXPORT_HATCH_ME)); exportPredicate = exportPredicate.setMaxLayerLimited(1); return MultiblockPatternBuilder.start(UP, BACK, RIGHT) .slice("#YYY#", "YYYYY", "YYYYY", "YYYYY", "#YYY#") .slice("#YSY#", "YAAAY", "YAAAY", "YAAAY", "#YYY#") .sliceRepeatable(1, 12, "##X##", "#XAX#", "XAPAX", "#XAX#", "##X##") .slice("#####", "#ZZZ#", "#ZZZ#", "#ZZZ#", "#####") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('Y', casingPredicate.and(abilities(IMPORT_ITEMS)) .and(abilities(INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2)) .and(abilities(IMPORT_FLUIDS).setMinGlobalLimited(1)) @@ -649,7 +649,7 @@ public static void init() {} .slice("XXXXX", "XXXXX", "XXXXX") .slice("XXXXX", "XCACX", "XXXXX") .slice("XXXXX", "XXSXX", "XXXXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(25) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -676,7 +676,7 @@ public static void init() {} .slice("XXXXX", "XXXPX", "XXXGX") .sliceRepeatable(2, 2, "##XXX", "##XPX", "##XGX") .slice("##XXX", "##XXX", "##XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STRESS_PROOF.get()).setMinGlobalLimited(40) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -705,7 +705,7 @@ public static void init() {} .slice("XXXXX", "XAAAX", "XAAAX", "XXXXX") .slice("XXXXX", "XCACX", "XCACX", "XXXXX") .slice("#XXX#", "#XSX#", "#XXX#", "#XXX#") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_WATERTIGHT.get()).setMinGlobalLimited(45) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -731,7 +731,7 @@ public static void init() {} .slice("XXXXX", "XXXXX", "XXX##") .slice("XXXXX", "X#CCX", "XXXXX") .slice("XXXXX", "XSXXX", "XXX##") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STRESS_PROOF.get()).setMinGlobalLimited(25) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, true))) @@ -774,7 +774,7 @@ public static void init() {} .slice("#XXXXXXXXXXX#", "#XXXXXXXXXXX#", "###F#####F###", "###F#####F###", "###FFFFFFF###", "#############", "#############", "#############", "#############", "#############", "####FFFFF####", "#############", "#############", "#############", "#############", "#############", "#############") .slice("##XXXXXXXXX##", "##XXXXSXXXX##", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############", "#############") // spotless:on - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', casing.and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) .where('C', heatingCoils()) @@ -831,7 +831,7 @@ public static void init() {} .slice("XXXXXXX#KKK", "XPPPPPX#KVK", "XPA#APX#KVK", "XPAAAPX#KVK", "XPAAAPX#KKK", "XPPPPPX####", "XXXXXXX####") .slice("#XXXXX#####", "#XXSXX#####", "#XGGGX#####", "#XGGGX#####", "#XGGGX#####", "#XXXXX#####", "###########") // spotless:on - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_ALUMINIUM_FROSTPROOF.get()).setMinGlobalLimited(140) .and(autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index c7f7c137d92..f9ab203bd39 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -535,7 +535,7 @@ public static MachineDefinition[] registerQuantumChests(GTRegistrate registrate, public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate registrate, String name, String displayName, int capacity, Supplier casing, - Supplier valve, + MachineDefinition valve, @Nullable PropertyFluidFilter filter, BiConsumer, ResourceLocation> rendererSetup) { MultiblockMachineBuilder builder = registrate @@ -552,9 +552,9 @@ public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate re .slice("CCC", "CCC", "CCC") .slice("CCC", "C#C", "CCC") .slice("CCC", "CSC", "CCC") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('C', blocks(casing.get()) - .and(blocks(valve.get()).setMaxGlobalLimited(2, 0))) + .and(machines(valve).setMaxGlobalLimited(2, 0))) .where('#', air()) .build()) .appearanceBlock(casing); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java index d9051e44e8f..4da383fce7e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java @@ -107,9 +107,9 @@ public class GTMultiMachines { .slice("XXX", "X#X", "XXX") .slice("XXX", "XYX", "XXX") .where('X', - blocks(CASING_COKE_BRICKS.get()).and(blocks(COKE_OVEN_HATCH.get()).setMaxGlobalLimited(5))) + blocks(CASING_COKE_BRICKS.get()).and(machines(COKE_OVEN_HATCH).setMaxGlobalLimited(5))) .where('#', Predicates.air()) - .where('Y', Predicates.controller(blocks(definition.getBlock()))) + .where('Y', Predicates.controller(definition)) .build()) .workableCasingModel(GTCEu.id("block/casings/solid/machine_coke_bricks"), GTCEu.id("block/multiblock/coke_oven")) @@ -226,7 +226,7 @@ public class GTMultiMachines { .slice("XXX", "XXX", "XXX") .slice("XXX", "X#X", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_STEEL_SOLID.get()).setMinGlobalLimited(14) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, true, false))) @@ -247,7 +247,7 @@ public class GTMultiMachines { .slice("CCC", "C#C", "CCC") .slice("CCC", "C#C", "CCC") .slice("XXX", "XSX", "XXX") - .where('S', Predicates.controller(blocks(definition.get()))) + .where('S', Predicates.controller(definition)) .where('X', blocks(MACHINE_CASING_ULV.get()).setMinGlobalLimited(6) .and(Predicates.autoAbilities(definition.getRecipeTypes())) @@ -285,7 +285,7 @@ public class GTMultiMachines { .slice("XXX", "CCC", "XXX") .slice("XXX", "C#C", "XMX") .slice("XSX", "CCC", "XXX") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(CASING_INVAR_HEATPROOF.get()).setMinGlobalLimited(9) .and(autoAbilities(definition.getRecipeTypes())) .and(autoAbilities(true, false, false))) @@ -328,7 +328,7 @@ public class GTMultiMachines { .slice("HCHCH", "HCHCH", "HCHCH") .slice("HCHCH", "H###H", "HCHCH") .slice("HCHCH", "HCOCH", "HCHCH") - .where('O', Predicates.controller(blocks(definition.get()))) + .where('O', Predicates.controller(definition)) .where('H', blocks(CASING_STAINLESS_CLEAN.get()).setMinGlobalLimited(12) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, true, false))) @@ -362,7 +362,7 @@ public class GTMultiMachines { .pattern(definition -> { MultiPredicate exportPredicate = abilities(PartAbility.EXPORT_FLUIDS_1X); if (GTCEu.Mods.isAE2Loaded()) { - exportPredicate = exportPredicate.xor(blocks(GTAEMachines.FLUID_EXPORT_HATCH_ME.get())); + exportPredicate = exportPredicate.xor(machines(GTAEMachines.FLUID_EXPORT_HATCH_ME)); } exportPredicate = exportPredicate.setMaxLayerLimited(1); MultiPredicate maint = autoAbilities(true, false, false) @@ -460,12 +460,12 @@ public class GTMultiMachines { .slice("XXXX", "##F#", "##F#") .slice("XXHX", "F##F", "FFFF") .slice("SXXX", "##F#", "##F#") - .where('S', Predicates.controller(blocks(definition.getBlock()))) + .where('S', Predicates.controller(definition)) .where('X', blocks(CASING_PUMP_DECK.get())) .where('F', Predicates.frames(GTMaterials.TreatedWood)) .where('H', Predicates.abilities(PartAbility.PUMP_FLUID_HATCH) - .xor(blocks(FLUID_EXPORT_HATCH[ULV].get(), FLUID_EXPORT_HATCH[LV].get()))) + .xor(machines(FLUID_EXPORT_HATCH[ULV], FLUID_EXPORT_HATCH[LV]))) .where('#', Predicates.any()) .build()) .allowExtendedFacing(false) @@ -572,7 +572,7 @@ public class GTMultiMachines { .slice("####CC###CC####", "###EAAOGOAAE###", "####CC###CC####") .slice("######ICI######", "####GGAAAGG####", "######ICI######") .slice("###############", "######OSO######", "###############") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('G', blocks(FUSION_GLASS.get()).or(casing)) .where('E', casing.and( blocks(PartAbility.INPUT_ENERGY.getBlockRange(tier, UV).toArray(Block[]::new)) @@ -612,7 +612,7 @@ public class GTMultiMachines { .slice("XXX", "#F#", "#F#", "#F#", "###", "###", "###") .slice("XXX", "FCF", "FCF", "FCF", "#F#", "#F#", "#F#") .slice("XSX", "#F#", "#F#", "#F#", "###", "###", "###") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(FluidDrillMachine.getCasingState(tier)).setMinGlobalLimited(3) .and(abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1) .setMaxGlobalLimited(2)) @@ -862,7 +862,7 @@ public class GTMultiMachines { .slice("XXX", "#F#", "#F#", "#F#", "###", "###", "###") .slice("XXX", "FCF", "FCF", "FCF", "#F#", "#F#", "#F#") .slice("XSX", "#F#", "#F#", "#F#", "###", "###", "###") - .where('S', controller(blocks(definition.get()))) + .where('S', controller(definition)) .where('X', blocks(BedrockOreMinerMachine.getCasingState(tier)).setMinGlobalLimited(3) .and(abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java index b643edb2068..7f56228584f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/CentralMonitorMachine.java @@ -268,7 +268,7 @@ public IBlockPattern getDefaultStructurePattern() { return MultiblockPatternBuilder.start() .slice(slice) .where('B', getMultiPredicate()) - .where('C', Predicates.controller(Predicates.blocks(this.getDefinition().get()))) + .where('C', Predicates.controller(this.getDefinition())) .build(); } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java index 30c210e0c09..ea6d4df7757 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/ae2/machine/MEPatternBufferPartMachine.java @@ -880,7 +880,7 @@ public PatternContainerGroup getTerminalGroup() { } else { return new PatternContainerGroup( AEItemKey.of(GTAEMachines.ME_PATTERN_BUFFER.getItem()), - GTAEMachines.ME_PATTERN_BUFFER.get().getDefinition().getItem().getDescription(), + GTAEMachines.ME_PATTERN_BUFFER.getItem().getDescription(), Collections.emptyList()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java index d8895ad1dc9..f90d2279faa 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java @@ -21,7 +21,7 @@ default void generateMachineModel(@Nullable MachineBuilder builder, if (builder.model() == null && builder.blockModel() == null) return; // Fake a data provider for the GT model builders - DataGenContext context = new DataGenContext<>(definition::get, + DataGenContext context = new DataGenContext<>(definition::getBlock, definition.getName(), definition.getId()); if (builder.blockModel() != null) { builder.blockModel().accept(context, RuntimeBlockstateProvider.INSTANCE); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java index ba0afd21f09..97285f01fe9 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java @@ -94,11 +94,6 @@ public MultiblockMachineBuilderWrapper recoveryStacks(Supplier stac return this; } - public MultiblockMachineBuilderWrapper definition(Function definition) { - internal.definitionFactory(definition); - return this; - } - public MultiblockMachineBuilderWrapper blockEntityFactory(MachineInstanceFactory machine) { internal.instanceFactory(machine); return this; From c87abfc8a31c1cec1d37fdea0f4ad46e81a59803 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 30 Aug 2026 13:34:31 +1000 Subject: [PATCH 38/45] fully expose item builder when making a machine --- .../api/registry/registrate/GTRegistrate.java | 10 +- .../registrate/builder/MachineBuilder.java | 107 ++++++++++-------- .../builder/MultiblockMachineBuilder.java | 4 +- .../common/data/machines/GTMachineUtils.java | 13 ++- .../MultiblockMachineBuilderWrapper.java | 17 --- 5 files changed, 70 insertions(+), 81 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 55cf6110849..fcb2b9bf3d8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -175,29 +175,27 @@ public GTRegistrate registerEventListeners(IEventBus bus) { MACHINE extends MetaMachine> MachineBuilder machine(String name, Function definitionFactory, BiFunction blockFactory, - BiFunction itemFactory, MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, definitionFactory, - blockFactory, itemFactory, blockEntityFactory); + blockFactory, blockEntityFactory); } public MachineBuilder machine(String name, MachineInstanceFactory blockEntityFactory) { return new MachineBuilder<>(this, name, MachineDefinition::new, - MetaMachineBlock::new, MetaMachineItem::new, blockEntityFactory); + MetaMachineBlock::new, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, BiFunction blockFactory, - BiFunction itemFactory, MachineInstanceFactory blockEntityFactory) { return new MultiblockMachineBuilder<>(this, name, - blockFactory, itemFactory, blockEntityFactory); + blockFactory, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, MachineInstanceFactory blockEntityFactory) { - return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, MetaMachineItem::new, + return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, blockEntityFactory); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 27b00b4de12..099828693ab 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -87,11 +87,15 @@ public class MachineBuilder blockFactory; - protected final BiFunction itemFactory; protected MachineInstanceFactory instanceFactory; @Setter(onMethod_ = @ApiStatus.Internal) public Function definitionFactory; + private @Nullable Consumer> blockBuilder; + private @Nullable BlockEntry blockEntry; + + private @Nullable ItemBuilder> itemBuilder; + @Nullable @Getter private MachineBuilder.ModelInitializer model = null; @@ -110,9 +114,6 @@ public class MachineBuilder blockProp = p -> p; - private NonNullUnaryOperator itemProp = p -> p; - private @Nullable Consumer> blockBuilder; - private @Nullable Consumer> itemBuilder; private NonNullConsumer> onBlockEntityRegister = NonNullConsumer.noop(); @Getter // getter for KJS private GTRecipeType[] recipeTypes = new GTRecipeType[0]; @@ -120,8 +121,6 @@ public class MachineBuilder> recipeOutputLimits = new Reference2IntOpenHashMap<>(); private int paintingColor = ConfigHolder.INSTANCE.client.getDefaultPaintingColor(); - private BiFunction itemColor = ((itemStack, tintIndex) -> tintIndex == 2 ? - GTValues.VC[tier == -1 ? 0 : tier] : tintIndex == 1 ? paintingColor : -1); private PartAbility[] abilities = new PartAbility[0]; private final List tooltips = new ArrayList<>(); private @Nullable BiConsumer> tooltipBuilder; @@ -151,12 +150,10 @@ public class MachineBuilder definitionFactory, BiFunction blockFactory, - BiFunction itemFactory, MachineInstanceFactory instanceFactory) { this.registrate = registrate; this.name = name; this.blockFactory = blockFactory; - this.itemFactory = itemFactory; this.instanceFactory = instanceFactory; this.definitionFactory = definitionFactory; } @@ -215,19 +212,52 @@ public SELF blockProp(NonNullUnaryOperator blockProp) return getThis(); } - public SELF itemProp(NonNullUnaryOperator itemProp) { - this.itemProp = itemProp; - return getThis(); - } - public SELF blockBuilder(Consumer> blockBuilder) { this.blockBuilder = blockBuilder; return getThis(); } - public SELF itemBuilder(Consumer> itemBuilder) { - this.itemBuilder = itemBuilder; - return getThis(); + + /** + * Gets the {@link MetaMachineItem} for this machine, and returns the builder for it so that further customization can be done.
    + * If the {@link ItemBuilder} has not been created yet, then the default one is created. + * + * @return the {@link ItemBuilder} for the {@link MetaMachineItem} + */ + public ItemBuilder> item() { + if (itemBuilder != null) return itemBuilder; + return item(MetaMachineItem::new); + } + + /** + * Create a {@link MetaMachineItem} for this machine, which is created by the given factory, and return the builder for it so that further customization can be done.
    + * Cannot be called if {@link #item()} has already been called. + * + * @param The type of the item . + * @param factory A factory for the item, which accepts the block and item properties and returns a new item. + * @return the {@link ItemBuilder} for the {@link MetaMachineItem} + */ + public ItemBuilder> item(BiFunction factory) { + if (itemBuilder != null) throw new IllegalStateException("Item builder for machine %s has already been initialized".formatted(name)); + + var newItemBuilder = this.registrate + .item(this, name, properties -> factory.apply(Objects.requireNonNull(blockEntry, "Item factory called before block resolved.").get(), properties)) + .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys + // copied from BlockBuilder#item + .model((ctx, prov) -> { + prov.withExistingParent(ctx.getName(), registrate.makeResourceLocation("block/machine/" + ctx.getName())); + }) + .color(() -> () -> ((itemStack, tintIndex) -> tintIndex == 2 ? + GTValues.VC[tier == -1 ? 0 : tier] : tintIndex == 1 ? paintingColor : -1)) + .clientExtension(() -> () -> new IClientItemExtensions() { + @Override + public BlockEntityWithoutLevelRenderer getCustomRenderer() { + return ItemWithBERModelRenderer.INSTANCE; + } + }); + + itemBuilder = newItemBuilder; + return newItemBuilder; } public SELF onBlockEntityRegister(NonNullConsumer> onBlockEntityRegister) { @@ -250,11 +280,6 @@ public SELF paintingColor(int paintingColor) { return getThis(); } - public SELF itemColor(BiFunction itemColor) { - this.itemColor = itemColor; - return getThis(); - } - public SELF tooltipBuilder(BiConsumer> tooltipBuilder) { this.tooltipBuilder = tooltipBuilder; return getThis(); @@ -633,6 +658,16 @@ protected void setupStateDefinition(MachineDefinition definition) { definition.registerDefaultState(defaultState); } + public DEFINITION createEntry() { + DEFINITION definition = createDefinition(); + + + return definition; + } + + /** + * Finalise the builder for registration (does not actually register the machine, registration is performed during the register event in {@link #createEntry()} + */ @HideFromJS public DEFINITION register() { ModifyMachineEvent event = new ModifyMachineEvent(this); @@ -658,12 +693,6 @@ public DEFINITION register() { } BlockEntry block = blockBuilder.register(); - ItemBuilder itemBuilder = makeItemBuilder(block); - if (this.itemBuilder != null) { - this.itemBuilder.accept(itemBuilder); - } - var item = itemBuilder.register(); - var blockEntityBuilder = registrate .blockEntity( (type, pos, state) -> instanceFactory @@ -679,8 +708,9 @@ public DEFINITION register() { } definition.setThemeId(themeId); definition.setRecipeTypes(recipeTypes); + definition.setBlockHolder(block); - definition.setItemHolder(item); + definition.setItemHolder(item().register()); definition.setTier(tier); definition.setRecipeOutputLimits(recipeOutputLimits); definition.setBlockEntityTypeSupplier(blockEntity::get); @@ -772,27 +802,6 @@ private MetaMachineBlock makeBlock(DEFINITION definition, BlockBehaviour.Propert MachineDefinition.clearBuilt(); return b; } - - private ItemBuilder makeItemBuilder(BlockEntry block) { - return this.registrate - .item(properties -> this.itemFactory.apply(block.get(), properties)) - .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys - // copied from BlockBuilder#item - .model((ctx, prov) -> { - prov.withExistingParent(ctx.getName(), - ResourceLocation.fromNamespaceAndPath(this.registrate.getModid(), - "block/machine/" + ctx.getName())); - }) - .clientExtension(() -> () -> new IClientItemExtensions() { - - @Override - public BlockEntityWithoutLevelRenderer getCustomRenderer() { - return ItemWithBERModelRenderer.INSTANCE; - } - }) - .color(() -> () -> this.itemColor::apply) - .properties(this.itemProp); - } // spotless:on protected static final class KJSCallWrapper { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index c77b1a68347..b4c535f1d79 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -56,11 +56,9 @@ public class MultiblockMachineBuilder< public MultiblockMachineBuilder(GTRegistrate registrate, String name, BiFunction blockFactory, - BiFunction itemFactory, MachineInstanceFactory blockEntityFactory) { super(registrate, name, (MultiblockMachineDefinition::new), - blockFactory, - itemFactory, blockEntityFactory); + blockFactory, blockEntityFactory); patterns = new Object2ReferenceOpenHashMap<>(); allowExtendedFacing(true); allowCoverOnFront(true); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index f9ab203bd39..761ce8f0d44 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -266,12 +266,12 @@ public static MachineDefinition[] registerTransformerMachines(GTRegistrate regis (holder, tier) -> new TransformerMachine(holder, tier, baseAmp), (tier, builder) -> builder .rotationState(RotationState.ALL) - .itemColor((itemStack, index) -> switch (index) { + .item().color(() -> () -> (itemStack, index) -> switch (index) { case 1 -> ConfigHolder.INSTANCE.client.getDefaultPaintingColor(); case 2 -> VC[tier + 1]; case 3 -> VC[tier]; default -> -1; - }) + }).build() .modelProperty(GTMachineModelProperties.IS_TRANSFORM_UP, false) .model(createTransformerModel(baseAmp)) .langValue("%s %sTransformer".formatted(VCF[tier] + VOLTAGE_NAMES[tier] + ChatFormatting.RESET, @@ -446,7 +446,7 @@ public static MachineDefinition registerCrate(GTRegistrate registrate, Material .modelProperty(GTMachineModelProperties.IS_TAPED, false) .model(GTMachineModels.createCrateModel(wooden)) .paintingColor(wooden ? 0xFFFFFF : material.getMaterialRGB()) - .itemColor((s, t) -> wooden ? 0xFFFFFF : material.getMaterialRGB()) + .item().color(() -> () -> (s, t) -> wooden ? 0xFFFFFF : material.getMaterialRGB()).build() .register(); } @@ -456,8 +456,8 @@ public static MachineDefinition registerDrum(GTRegistrate registrate, Material m var definition = registrate .machine(material.getName() + "_drum", MachineDefinition::new, MetaMachineBlock::new, - (holder, prop) -> DrumMachineItem.create(holder, prop, material), info -> new DrumMachine(info, material, capacity)) + .item((holder, prop) -> DrumMachineItem.create(holder, prop, material)).build() .langValue(lang) .rotationState(RotationState.NONE) .simpleModel(GTCEu.id("block/machine/template/drum/" + (wooden ? "wooden" : "metal") + "_drum")) @@ -472,7 +472,7 @@ public static MachineDefinition registerDrum(GTRegistrate registrate, Material m Component.translatable("gtceu.universal.tooltip.fluid_storage_capacity", FormattingUtil.formatNumbers(capacity))) .paintingColor(wooden ? 0xFFFFFF : material.getMaterialRGB()) - .itemColor((s, i) -> wooden ? 0xFFFFFF : material.getMaterialRGB()) + .item().color(() -> () -> (s, i) -> wooden ? 0xFFFFFF : material.getMaterialRGB()).build() .register(); DRUM_CAPACITY.put(definition, capacity); return definition; @@ -485,9 +485,10 @@ public static MachineDefinition[] registerQuantumTanks(GTRegistrate registrate, var register = registrate.machine( GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, MachineDefinition::new, - MetaMachineBlock::new, QuantumTankMachineItem::new, + MetaMachineBlock::new, (holder) -> new QuantumTankMachine(holder, tier, maxAmount)) .langValue(toEnglishName(name) + " " + LVT[tier]) + .item(QuantumTankMachineItem::new).build() .blockProp(Block.Properties::dynamicShape) .rotationState(RotationState.ALL) .allowExtendedFacing(true) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java index 97285f01fe9..2a8e5f2e477 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java @@ -135,21 +135,11 @@ public MultiblockMachineBuilderWrapper blockProp(NonNullUnaryOperator itemProp) { - internal.itemProp(itemProp); - return this; - } - public MultiblockMachineBuilderWrapper blockBuilder(@Nullable Consumer> blockBuilder) { internal.blockBuilder(blockBuilder); return this; } - public MultiblockMachineBuilderWrapper itemBuilder(@Nullable Consumer> itemBuilder) { - internal.itemBuilder(itemBuilder); - return this; - } - public MultiblockMachineBuilderWrapper recipeTypes(GTRecipeType... recipeTypes) { internal.recipeTypes(recipeTypes); return this; @@ -175,11 +165,6 @@ public MultiblockMachineBuilderWrapper addOutputLimit(RecipeCapability capabi return this; } - public MultiblockMachineBuilderWrapper itemColor(BiFunction itemColor) { - internal.itemColor(itemColor); - return this; - } - public MultiblockMachineBuilderWrapper simpleModel(ResourceLocation model) { internal.simpleModel(model); return this; @@ -396,7 +381,6 @@ public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), id.getPath(), MetaMachineBlock::new, - MetaMachineItem::new, WorkableElectricMultiblockMachine::new); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } @@ -406,7 +390,6 @@ public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), id.getPath(), MetaMachineBlock::new, - MetaMachineItem::new, machine::create); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } From 9a1eb48526d02832d8c88680a8c56f48415d4ddb Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 30 Aug 2026 13:51:45 +1000 Subject: [PATCH 39/45] fully expose block builder when making a machine --- .../api/registry/registrate/GTRegistrate.java | 28 +----- .../registrate/builder/MachineBuilder.java | 95 ++++++++++--------- .../builder/MultiblockMachineBuilder.java | 7 +- .../common/data/machines/GTMachineUtils.java | 12 +-- .../MultiblockMachineBuilderWrapper.java | 22 +---- 5 files changed, 58 insertions(+), 106 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index fcb2b9bf3d8..1dc3be683a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -1,15 +1,12 @@ package com.gregtechceu.gtceu.api.registry.registrate; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition; import com.gregtechceu.gtceu.api.data.medicalcondition.Symptom; -import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.builder.GTBlockBuilder; @@ -26,7 +23,6 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; @@ -57,9 +53,7 @@ import java.util.*; import java.util.Optional; import java.util.concurrent.atomic.AtomicBoolean; -import java.util.function.BiFunction; import java.util.function.Consumer; -import java.util.function.Function; import java.util.function.Supplier; public class GTRegistrate extends AbstractRegistrate { @@ -171,32 +165,14 @@ public GTRegistrate registerEventListeners(IEventBus bus) { /// Machine Builders - public MachineBuilder machine(String name, - Function definitionFactory, - BiFunction blockFactory, - MachineInstanceFactory blockEntityFactory) { - return new MachineBuilder<>(this, name, definitionFactory, - blockFactory, blockEntityFactory); - } - public MachineBuilder machine(String name, MachineInstanceFactory blockEntityFactory) { - return new MachineBuilder<>(this, name, MachineDefinition::new, - MetaMachineBlock::new, blockEntityFactory); - } - - public MultiblockMachineBuilder multiblock(String name, - BiFunction blockFactory, - MachineInstanceFactory blockEntityFactory) { - return new MultiblockMachineBuilder<>(this, name, - blockFactory, blockEntityFactory); + return new MachineBuilder<>(this, name, MachineDefinition::new, blockEntityFactory); } public MultiblockMachineBuilder multiblock(String name, MachineInstanceFactory blockEntityFactory) { - return new MultiblockMachineBuilder<>(this, name, MetaMachineBlock::new, - blockEntityFactory); + return new MultiblockMachineBuilder<>(this, name, blockEntityFactory); } /// Cover Registration diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 099828693ab..6648ad8e0cb 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -33,6 +33,7 @@ import com.gregtechceu.gtceu.integration.kjs.GTCEuStartupEvents; import com.gregtechceu.gtceu.integration.kjs.events.ModifyMachineEventJS; +import com.tterrag.registrate.util.nullness.NonNullSupplier; import lombok.Setter; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.RenderType; @@ -61,7 +62,6 @@ import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer; -import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; import dev.latvian.mods.rhino.util.HideFromJS; import it.unimi.dsi.fastutil.objects.Reference2IntMap; import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; @@ -86,12 +86,11 @@ public class MachineBuilder blockFactory; protected MachineInstanceFactory instanceFactory; @Setter(onMethod_ = @ApiStatus.Internal) public Function definitionFactory; - private @Nullable Consumer> blockBuilder; + private @Nullable BlockBuilder> blockBuilder; private @Nullable BlockEntry blockEntry; private @Nullable ItemBuilder> itemBuilder; @@ -113,7 +112,6 @@ public class MachineBuilder blockProp = p -> p; private NonNullConsumer> onBlockEntityRegister = NonNullConsumer.noop(); @Getter // getter for KJS private GTRecipeType[] recipeTypes = new GTRecipeType[0]; @@ -149,11 +147,9 @@ public class MachineBuilder definitionFactory, - BiFunction blockFactory, MachineInstanceFactory instanceFactory) { this.registrate = registrate; this.name = name; - this.blockFactory = blockFactory; this.instanceFactory = instanceFactory; this.definitionFactory = definitionFactory; } @@ -207,19 +203,52 @@ public SELF renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { return getThis(); } - public SELF blockProp(NonNullUnaryOperator blockProp) { - this.blockProp = blockProp; - return getThis(); + /** + * Gets the {@link MetaMachineBlock} builder for this machine so that further customization can be done.
    + * If the {@link BlockBuilder} has not been created yet, then the default one is created. + * + * @return the {@link BlockBuilder} for the {@link MetaMachineBlock} + */ + public BlockBuilder> block() { + if (blockBuilder != null) return blockBuilder; + return block(MetaMachineBlock::new); } - public SELF blockBuilder(Consumer> blockBuilder) { - this.blockBuilder = blockBuilder; - return getThis(); + public NonNullSupplier asSupplier() { + return null; // TODO + } + + /** + * Create a {@link MetaMachineBlock} for this machine, which is created by the given factory, and return the builder for it so that further customization can be done.
    + * Cannot be called if {@link #block()} has already been called. + * + * @param The type of the block. + * @param factory A factory for the block, which accepts the block properties and machine definition and returns a new block. + * @return the {@link BlockBuilder} for the {@link MetaMachineBlock} + */ + public BlockBuilder> block(BiFunction factory) { + if (blockBuilder == null) throw new IllegalStateException("Block builder for machine %s has already been initialized.".formatted(name)); + + var newBlockBuilder = this.registrate.block(this, name, properties -> { + MachineDefinition.setBuilt(this.asSupplier().get()); + var b = factory.apply(properties, this.asSupplier().get()); + MachineDefinition.clearBuilt(); + return b; + }) + .color(() -> () -> MetaMachineBlock::colorTinted) + .initialProperties(() -> Blocks.DISPENSER) + .properties(BlockBehaviour.Properties::noLootTable) + .addLayer(() -> RenderType::cutout) + .exBlockstate(this.blockModel != null ? this.blockModel : createMachineModel(this.model)) + .onRegister(b -> Arrays.stream(this.abilities).forEach(a -> a.register(this.tier, b))); + + blockBuilder = newBlockBuilder; + return newBlockBuilder; } /** - * Gets the {@link MetaMachineItem} for this machine, and returns the builder for it so that further customization can be done.
    + * Gets the {@link MetaMachineItem} builder for this machine so that further customization can be done.
    * If the {@link ItemBuilder} has not been created yet, then the default one is created. * * @return the {@link ItemBuilder} for the {@link MetaMachineItem} @@ -233,12 +262,12 @@ public ItemBuilder * Cannot be called if {@link #item()} has already been called. * - * @param The type of the item . + * @param The type of the item. * @param factory A factory for the item, which accepts the block and item properties and returns a new item. * @return the {@link ItemBuilder} for the {@link MetaMachineItem} */ public ItemBuilder> item(BiFunction factory) { - if (itemBuilder != null) throw new IllegalStateException("Item builder for machine %s has already been initialized".formatted(name)); + if (itemBuilder != null) throw new IllegalStateException("Item builder for machine %s has already been initialized.".formatted(name)); var newItemBuilder = this.registrate .item(this, name, properties -> factory.apply(Objects.requireNonNull(blockEntry, "Item factory called before block resolved.").get(), properties)) @@ -683,22 +712,19 @@ public DEFINITION register() { if (model == null && blockModel == null) { simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); } - var blockBuilder = makeBlockBuilder(definition); if (this.langValue != null) { - blockBuilder.lang(langValue); + block().lang(langValue); definition.setLangValue(langValue); } - if (this.blockBuilder != null) { - this.blockBuilder.accept(blockBuilder); - } - BlockEntry block = blockBuilder.register(); + + blockEntry = block().register(); var blockEntityBuilder = registrate .blockEntity( (type, pos, state) -> instanceFactory .buildMachine(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) - .validBlock(block); + .validBlock(blockEntry); if (hasBER) { blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); } @@ -709,7 +735,7 @@ public DEFINITION register() { definition.setThemeId(themeId); definition.setRecipeTypes(recipeTypes); - definition.setBlockHolder(block); + definition.setBlockHolder(blockEntry); definition.setItemHolder(item().register()); definition.setTier(tier); definition.setRecipeOutputLimits(recipeOutputLimits); @@ -733,7 +759,7 @@ public DEFINITION register() { } } if (appearance == null) { - appearance = block::getDefaultState; + appearance = blockEntry::getDefaultState; } definition.setAppearance(appearance); definition.setAllowExtendedFacing(allowExtendedFacing); @@ -783,27 +809,6 @@ default ModelInitializer compose(UnaryOperator makeBlockBuilder(DEFINITION definition) { - return this.registrate.block(properties -> makeBlock(definition, properties)) - .color(() -> () -> MetaMachineBlock::colorTinted) - .initialProperties(() -> Blocks.DISPENSER) - .properties(BlockBehaviour.Properties::noLootTable) - .addLayer(() -> RenderType::cutout) - .exBlockstate(this.blockModel != null ? this.blockModel : createMachineModel(this.model)) - .properties(this.blockProp) - .onRegister(b -> Arrays.stream(this.abilities).forEach(a -> a.register(this.tier, b))); - } - - private MetaMachineBlock makeBlock(DEFINITION definition, BlockBehaviour.Properties properties) { - MachineDefinition.setBuilt(definition); - var b = this.blockFactory.apply(properties, definition); - MachineDefinition.clearBuilt(); - return b; - } - // spotless:on - protected static final class KJSCallWrapper { public static void fireKJSEvent(ModifyMachineEvent event) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index b4c535f1d79..c30aa26e272 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -1,7 +1,5 @@ package com.gregtechceu.gtceu.api.registry.registrate.builder; -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; -import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -16,7 +14,6 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; -import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import brachy.modularui.api.widget.IWidget; @@ -55,10 +52,8 @@ public class MultiblockMachineBuilder< .emptyList(); public MultiblockMachineBuilder(GTRegistrate registrate, String name, - BiFunction blockFactory, MachineInstanceFactory blockEntityFactory) { - super(registrate, name, (MultiblockMachineDefinition::new), - blockFactory, blockEntityFactory); + super(registrate, name, (MultiblockMachineDefinition::new), blockEntityFactory); patterns = new Object2ReferenceOpenHashMap<>(); allowExtendedFacing(true); allowCoverOnFront(true); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index 761ce8f0d44..a13350d7613 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.compat.FeCompat; import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability; import com.gregtechceu.gtceu.api.capability.recipe.IO; @@ -68,6 +67,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockBehaviour; import net.neoforged.neoforge.fluids.FluidStack; import net.neoforged.neoforge.fluids.FluidType; import net.neoforged.neoforge.fluids.SimpleFluidContent; @@ -454,9 +454,7 @@ public static MachineDefinition registerDrum(GTRegistrate registrate, Material m String lang) { boolean wooden = material.hasProperty(PropertyKey.WOOD); var definition = registrate - .machine(material.getName() + "_drum", MachineDefinition::new, - MetaMachineBlock::new, - info -> new DrumMachine(info, material, capacity)) + .machine(material.getName() + "_drum", info -> new DrumMachine(info, material, capacity)) .item((holder, prop) -> DrumMachineItem.create(holder, prop, material)).build() .langValue(lang) .rotationState(RotationState.NONE) @@ -484,12 +482,10 @@ public static MachineDefinition[] registerQuantumTanks(GTRegistrate registrate, long maxAmount = 4000 * FluidType.BUCKET_VOLUME * (long) Math.pow(2, tier - 1); var register = registrate.machine( GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, - MachineDefinition::new, - MetaMachineBlock::new, (holder) -> new QuantumTankMachine(holder, tier, maxAmount)) .langValue(toEnglishName(name) + " " + LVT[tier]) .item(QuantumTankMachineItem::new).build() - .blockProp(Block.Properties::dynamicShape) + .block().properties(Block.Properties::dynamicShape).build() .rotationState(RotationState.ALL) .allowExtendedFacing(true) .model(createTieredHullMachineModel(GTCEu.id("block/machine/template/quantum/quantum_tank")) @@ -512,7 +508,7 @@ public static MachineDefinition[] registerQuantumChests(GTRegistrate registrate, (holder, tier) -> new QuantumChestMachine(holder, tier, tier == MAX ? Long.MAX_VALUE : 4_000_000 * (long) Math.pow(2, tier - 1)), (tier, builder) -> builder.langValue(toEnglishName(name) + " " + LVT[tier]) - .blockProp(Block.Properties::dynamicShape) + .block().properties(BlockBehaviour.Properties::dynamicShape).build() .rotationState(RotationState.ALL) .allowExtendedFacing(true) .model(createTieredHullMachineModel(GTCEu.id("block/machine/template/quantum/quantum_chest")) diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java index 2a8e5f2e477..aadef71e7f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java @@ -1,9 +1,7 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; -import com.gregtechceu.gtceu.api.block.MetaMachineBlock; import com.gregtechceu.gtceu.api.capability.recipe.RecipeCapability; import com.gregtechceu.gtceu.api.data.RotationState; -import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.*; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -22,19 +20,14 @@ import net.minecraft.core.Direction; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.VoxelShape; -import com.tterrag.registrate.builders.BlockBuilder; -import com.tterrag.registrate.builders.ItemBuilder; import com.tterrag.registrate.providers.DataGenContext; import com.tterrag.registrate.util.nullness.NonNullBiConsumer; -import com.tterrag.registrate.util.nullness.NonNullUnaryOperator; import dev.latvian.mods.kubejs.client.LangKubeEvent; import dev.latvian.mods.kubejs.generator.KubeAssetGenerator; import dev.latvian.mods.kubejs.registry.BuilderBase; @@ -130,16 +123,6 @@ public MultiblockMachineBuilderWrapper hasBER(boolean hasBER) { return this; } - public MultiblockMachineBuilderWrapper blockProp(NonNullUnaryOperator blockProp) { - internal.blockProp(blockProp); - return this; - } - - public MultiblockMachineBuilderWrapper blockBuilder(@Nullable Consumer> blockBuilder) { - internal.blockBuilder(blockBuilder); - return this; - } - public MultiblockMachineBuilderWrapper recipeTypes(GTRecipeType... recipeTypes) { internal.recipeTypes(recipeTypes); return this; @@ -380,7 +363,6 @@ public MultiblockMachineDefinition createObject() { public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id) { var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), id.getPath(), - MetaMachineBlock::new, WorkableElectricMultiblockMachine::new); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } @@ -388,9 +370,7 @@ public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id, KJSTieredMachineBuilder.CreationFunction machine) { var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), - id.getPath(), - MetaMachineBlock::new, - machine::create); + id.getPath(), machine::create); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } } From bb0595b9fa3b1053eb96be14b119fb613407304a Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 30 Aug 2026 13:55:47 +1000 Subject: [PATCH 40/45] fixes --- .../api/registry/registrate/builder/MachineBuilder.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 6648ad8e0cb..7172925a04f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -214,8 +214,10 @@ public BlockBuilder asSupplier() { - return null; // TODO + // TODO replace with better method once this is converted to an actual registrate builder + return () -> (DEFINITION)Objects.requireNonNull(GTRegistries.MACHINES.get(registrate.makeResourceLocation(name))); } /** @@ -227,7 +229,7 @@ public NonNullSupplier asSupplier() { * @return the {@link BlockBuilder} for the {@link MetaMachineBlock} */ public BlockBuilder> block(BiFunction factory) { - if (blockBuilder == null) throw new IllegalStateException("Block builder for machine %s has already been initialized.".formatted(name)); + if (blockBuilder != null) throw new IllegalStateException("Block builder for machine %s has already been initialized.".formatted(name)); var newBlockBuilder = this.registrate.block(this, name, properties -> { MachineDefinition.setBuilt(this.asSupplier().get()); From 966cd1059f6ac1239bfee2856038b8e87e08c248 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 30 Aug 2026 14:04:06 +1000 Subject: [PATCH 41/45] fix bug --- .../registrate/builder/MachineBuilder.java | 83 ++++++++++--------- .../builder/MultiblockMachineBuilder.java | 5 +- 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 7172925a04f..9115adac786 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -33,6 +33,7 @@ import com.gregtechceu.gtceu.integration.kjs.GTCEuStartupEvents; import com.gregtechceu.gtceu.integration.kjs.events.ModifyMachineEventJS; +import com.tterrag.registrate.util.entry.BlockEntityEntry; import com.tterrag.registrate.util.nullness.NonNullSupplier; import lombok.Setter; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; @@ -95,6 +96,8 @@ public class MachineBuilder> itemBuilder; + private @Nullable BlockEntityEntry blockEntityEntry; + @Nullable @Getter private MachineBuilder.ModelInitializer model = null; @@ -253,7 +256,7 @@ public BlockBuilder * If the {@link ItemBuilder} has not been created yet, then the default one is created. * - * @return the {@link ItemBuilder} for the {@link MetaMachineItem} + * @return The {@link ItemBuilder} for the {@link MetaMachineItem} */ public ItemBuilder> item() { if (itemBuilder != null) return itemBuilder; @@ -689,59 +692,25 @@ protected void setupStateDefinition(MachineDefinition definition) { definition.registerDefaultState(defaultState); } - public DEFINITION createEntry() { + protected DEFINITION createEntry() { DEFINITION definition = createDefinition(); - - - return definition; - } - - /** - * Finalise the builder for registration (does not actually register the machine, registration is performed during the register event in {@link #createEntry()} - */ - @HideFromJS - public DEFINITION register() { - ModifyMachineEvent event = new ModifyMachineEvent(this); - ModLoader.postEvent(event); - if (GTCEu.Mods.isKubeJSLoaded()) { - KJSCallWrapper.fireKJSEvent(event); - } - this.registrate.object(name); - var definition = createDefinition(); - definition.setRotationState(rotationState); setupStateDefinition(definition); - if (model == null && blockModel == null) { - simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); - } if (this.langValue != null) { - block().lang(langValue); definition.setLangValue(langValue); } - blockEntry = block().register(); - - var blockEntityBuilder = registrate - .blockEntity( - (type, pos, state) -> instanceFactory - .buildMachine(new BlockEntityCreationInfo(type, pos, state))) - .onRegister(onBlockEntityRegister) - .validBlock(blockEntry); - if (hasBER) { - blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); - } - var blockEntity = blockEntityBuilder.register(); if (this.ui != null) { definition.setUI(ui); } definition.setThemeId(themeId); definition.setRecipeTypes(recipeTypes); - definition.setBlockHolder(blockEntry); + definition.setBlockHolder(Objects.requireNonNull(blockEntry)); definition.setItemHolder(item().register()); definition.setTier(tier); definition.setRecipeOutputLimits(recipeOutputLimits); - definition.setBlockEntityTypeSupplier(blockEntity::get); + definition.setBlockEntityTypeSupplier(Objects.requireNonNull(blockEntityEntry)::get); definition.setTooltipBuilder((itemStack, components) -> { components.addAll(tooltips); if (tooltipBuilder != null) tooltipBuilder.accept(itemStack, components); @@ -769,11 +738,47 @@ public DEFINITION register() { definition.setDefaultPaintingColor(paintingColor); definition.setRenderXEIPreview(renderMultiblockXEIPreview); definition.setRenderWorldPreview(renderMultiblockWorldPreview); - GTRegistries.register(GTRegistries.MACHINES, definition.getId(), definition); return definition; } + /** + * Finalise the builder for registration (does not actually register the machine, registration is performed during the register event in {@link #createEntry()} + */ + @HideFromJS + public DEFINITION register() { + ModifyMachineEvent event = new ModifyMachineEvent(this); + ModLoader.postEvent(event); + if (GTCEu.Mods.isKubeJSLoaded()) { + KJSCallWrapper.fireKJSEvent(event); + } + + if (model == null && blockModel == null) { + simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); + } + if (this.langValue != null) { + block().lang(langValue); + } + + blockEntry = block().register(); + + var blockEntityBuilder = registrate + .>blockEntity(this, name, + (type, pos, state) -> instanceFactory + .buildMachine(new BlockEntityCreationInfo(type, pos, state))) + .onRegister(onBlockEntityRegister) + .validBlock(blockEntry); + if (hasBER) { + blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); + } + blockEntityEntry = blockEntityBuilder.register(); + + // TODO remove once this is a registrate builder + var definition = createEntry(); + GTRegistries.register(GTRegistries.MACHINES, definition.getId(), definition); + return definition; + } + @FunctionalInterface public interface ModelInitializer { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index c30aa26e272..f6e91e34a25 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -114,9 +114,8 @@ public SELF partSorter(Comparator sorter) { } @Override - @HideFromJS - public MultiblockMachineDefinition register() { - var definition = super.register(); + protected MultiblockMachineDefinition createEntry() { + var definition = super.createEntry(); definition.setGenerator(generator); if (patterns.isEmpty()) { throw new IllegalStateException("Missing default structure pattern for " + name); From 3219ba1a9a3b889b1b0da1b0d071f28f4b0ac5a6 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sun, 30 Aug 2026 18:00:30 +1000 Subject: [PATCH 42/45] implement deferred machine registration --- .../medicalcondition/MedicalCondition.java | 2 - .../worldgen/modifier/BiomePlacement.java | 2 +- .../worldgen/modifier/DimensionFilter.java | 1 + .../worldgen/modifier/FrequencyModifier.java | 1 + .../gtceu/api/machine/MachineDefinition.java | 6 +- .../machine/MultiblockMachineDefinition.java | 2 +- .../gtceu/api/multiblock/Predicates.java | 10 + .../api/registry/registrate/GTRegistrate.java | 37 +- .../registrate/builder/GTBlockBuilder.java | 8 +- .../registrate/builder/MachineBuilder.java | 135 +++---- .../builder/MultiblockMachineBuilder.java | 13 +- .../registrate/entry/MachineEntry.java | 51 +++ .../registrate/entry/package-info.java | 4 + .../gregtechceu/gtceu/common/CommonProxy.java | 7 +- .../gtceu/common/data/GTMachines.java | 340 ++++++++++-------- .../common/data/machines/GCYMMachines.java | 56 +-- .../common/data/machines/GTAEMachines.java | 17 +- .../common/data/machines/GTMachineUtils.java | 246 ++++++------- .../common/data/machines/GTMultiMachines.java | 91 +++-- .../data/machines/GTResearchMachines.java | 49 +-- .../multiblock/part/DualHatchPartMachine.java | 4 +- .../part/FluidHatchPartMachine.java | 12 +- .../multiblock/part/ItemBusPartMachine.java | 4 +- .../part/SteamItemBusPartMachine.java | 4 +- .../mui/factory/CentralMonitorUIFactory.java | 2 +- .../data/recipe/builder/GTRecipeBuilder.java | 32 +- .../data/recipe/misc/MachineRecipeLoader.java | 9 +- .../recipe/misc/MetaTileEntityLoader.java | 18 + .../MetaTileEntityMachineRecipeLoader.java | 9 +- .../machine/KJSSteamMachineBuilder.java | 22 +- .../machine/KJSTieredMachineBuilder.java | 36 +- .../machine/KJSTieredMultiblockBuilder.java | 25 +- .../machine/KJSWrappingMachineBuilder.java | 14 +- .../machine/KJSWrappingMultiblockBuilder.java | 14 +- .../MultiblockMachineBuilderWrapper.java | 14 +- .../material/MaterialBuilderWrapper.java | 4 +- .../gtceu/gametest/util/TestUtils.java | 8 +- 37 files changed, 708 insertions(+), 601 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/package-info.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java b/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java index 98199468b81..6c1290b610e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/medicalcondition/MedicalCondition.java @@ -12,9 +12,7 @@ import net.minecraft.world.damagesource.DamageType; import lombok.Getter; -import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.function.Consumer; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java index 57b3b0750f6..9ba6b460c38 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/BiomePlacement.java @@ -1,8 +1,8 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; import com.gregtechceu.gtceu.api.data.worldgen.BiomeWeightModifier; - import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; + import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.levelgen.placement.PlacementContext; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java index 1570ba54cca..115ddb4a7e5 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/DimensionFilter.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; + import net.minecraft.core.BlockPos; import net.minecraft.core.HolderSet; import net.minecraft.core.RegistryCodecs; diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java index 8eb1e72b2a6..aaa6bd51f7d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/worldgen/modifier/FrequencyModifier.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.api.data.worldgen.modifier; import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; + import net.minecraft.core.BlockPos; import net.minecraft.util.ExtraCodecs; import net.minecraft.util.Mth; diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index ae0faf3b50e..c2047acfc89 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -24,6 +24,7 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import net.neoforged.neoforge.registries.DeferredHolder; import brachy.modularui.theme.ThemeAPI; import it.unimi.dsi.fastutil.objects.Reference2IntMap; @@ -31,7 +32,6 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import net.neoforged.neoforge.registries.DeferredHolder; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; @@ -172,10 +172,6 @@ public VoxelShape getShape(Direction direction) { return this.cache.computeIfAbsent(direction, dir -> GTUtil.rotateVoxelShape(shape, dir)); } - public MetaMachineBlock get() { - return blockHolder.value(); - } - public String getName() { return id.getPath(); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java index c5a34bd3210..56039fa6a82 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java @@ -27,7 +27,7 @@ public class MultiblockMachineDefinition extends MachineDefinition { @Setter private boolean generator; @Getter - private Map> structurePatterns = new HashMap<>(); + private final Map> structurePatterns = new HashMap<>(); @Getter @Setter private boolean allowFlip; diff --git a/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java b/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java index 4ca143863df..e4553b1aded 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java +++ b/src/main/java/com/gregtechceu/gtceu/api/multiblock/Predicates.java @@ -19,6 +19,7 @@ import com.gregtechceu.gtceu.api.multiblock.util.BlockInfo; import com.gregtechceu.gtceu.api.pipenet.IPipeNode; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -146,6 +147,15 @@ private static String blockToString(Block block) { .orElse("unknown block"); } + public static MultiPredicate machines(MachineEntry definition) { + return machines(definition.value()); + } + + @SafeVarargs + public static MultiPredicate machines(MachineEntry... definitions) { + return machines(Arrays.stream(definitions).map(Holder::value).toArray(MachineDefinition[]::new)); + } + public static MultiPredicate machines(@Nullable MachineDefinition... definitions) { List blocks = new ArrayList<>(); for (MachineDefinition definition : definitions) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 1dc3be683a5..85651ca96f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -16,8 +16,8 @@ import com.gregtechceu.gtceu.client.renderer.cover.ICoverRenderer; import com.gregtechceu.gtceu.client.renderer.cover.SimpleCoverRenderer; import com.gregtechceu.gtceu.core.mixins.registrate.AbstractRegistrateAccessor; - import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; + import net.minecraft.core.Registry; import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceKey; @@ -165,14 +165,18 @@ public GTRegistrate registerEventListeners(IEventBus bus) { /// Machine Builders - public MachineBuilder machine(String name, - MachineInstanceFactory blockEntityFactory) { - return new MachineBuilder<>(this, name, MachineDefinition::new, blockEntityFactory); + @SuppressWarnings("unchecked") + public > S machine(String name, + MachineInstanceFactory blockEntityFactory) { + return entry(name, + callback -> (S) new MachineBuilder<>(this, name, callback, MachineDefinition::new, blockEntityFactory)); } - public MultiblockMachineBuilder multiblock(String name, - MachineInstanceFactory blockEntityFactory) { - return new MultiblockMachineBuilder<>(this, name, blockEntityFactory); + @SuppressWarnings("unchecked") + public > S multiblock(String name, + MachineInstanceFactory blockEntityFactory) { + return entry(name, callback -> (S) new MultiblockMachineBuilder<>(this, name, callback, blockEntityFactory)); } /// Cover Registration @@ -231,17 +235,24 @@ public GTBlockBuilder block(@NotNull P parent, String /// Medical Conditions public RegistryEntry medicalCondition(String name, int color, - int maxProgression, MedicalCondition.IdleProgressionType progressionType, - float progressionRate, boolean canBePermanent, Consumer recipeModifier, + int maxProgression, + MedicalCondition.IdleProgressionType progressionType, + float progressionRate, + boolean canBePermanent, + Consumer recipeModifier, Symptom.ConfiguredSymptom... symptoms) { - return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), color, maxProgression, progressionType, progressionRate, canBePermanent, recipeModifier, symptoms)); + return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), + color, maxProgression, progressionType, progressionRate, canBePermanent, recipeModifier, symptoms)); } public RegistryEntry medicalCondition(String name, int color, - int maxProgression, MedicalCondition.IdleProgressionType progressionType, - float progressionRate, boolean canBePermanent, + int maxProgression, + MedicalCondition.IdleProgressionType progressionType, + float progressionRate, + boolean canBePermanent, Symptom.ConfiguredSymptom... symptoms) { - return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), color, maxProgression, progressionType, progressionRate, canBePermanent, symptoms)); + return simple(name, GTRegistries.Keys.MEDICAL_CONDITION, () -> new MedicalCondition(makeResourceLocation(name), + color, maxProgression, progressionType, progressionRate, canBePermanent, symptoms)); } /// Creative Mode Tabs diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java index f45deecd9c1..e36b48cd34b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/GTBlockBuilder.java @@ -90,7 +90,7 @@ public GTBlockBuilder defaultBlockstate() { @Override public GTBlockBuilder blockstate(NonNullBiConsumer, RegistrateBlockstateProvider> cons) { - return (GTBlockBuilder) setData(ProviderType.BLOCKSTATE, cons); + return setData(ProviderType.BLOCKSTATE, cons); } @Override @@ -118,12 +118,6 @@ public GTBlockBuilder recipe(NonNullBiConsumer, R return (GTBlockBuilder) super.recipe(cons); } - // why is it final >:( - // @SafeVarargs - // public final BlockBuilder tag(TagKey... tags) { - // return tag(ProviderType.BLOCK_TAGS, tags); - // } - public GTBlockBuilder setDataGeneric(ProviderType type, NonNullBiConsumer, D> cons) { getOwner().setDataGenerator(this, type, prov -> cons.accept(DataGenContext.from(this), prov)); return this; diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 9115adac786..2d67fa75cb6 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -22,6 +22,7 @@ import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.client.renderer.BlockEntityWithBERModelRenderer; @@ -33,9 +34,6 @@ import com.gregtechceu.gtceu.integration.kjs.GTCEuStartupEvents; import com.gregtechceu.gtceu.integration.kjs.events.ModifyMachineEventJS; -import com.tterrag.registrate.util.entry.BlockEntityEntry; -import com.tterrag.registrate.util.nullness.NonNullSupplier; -import lombok.Setter; import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.client.renderer.RenderType; import net.minecraft.network.chat.Component; @@ -54,12 +52,16 @@ import net.neoforged.fml.ModLoader; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; +import net.neoforged.neoforge.registries.DeferredHolder; import brachy.modularui.theme.ThemeAPI; +import com.tterrag.registrate.builders.AbstractBuilder; import com.tterrag.registrate.builders.BlockBuilder; +import com.tterrag.registrate.builders.BuilderCallback; import com.tterrag.registrate.builders.ItemBuilder; import com.tterrag.registrate.providers.DataGenContext; import com.tterrag.registrate.providers.ProviderType; +import com.tterrag.registrate.util.entry.BlockEntityEntry; import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer; @@ -67,12 +69,14 @@ import it.unimi.dsi.fastutil.objects.Reference2IntMap; import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; import lombok.Getter; +import lombok.Setter; import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.Validate; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; +import org.jspecify.annotations.NonNull; import java.util.*; import java.util.function.*; @@ -82,10 +86,8 @@ @SuppressWarnings("unused") @Accessors(chain = true, fluent = true) public class MachineBuilder> { - - protected final GTRegistrate registrate; - protected final String name; + SELF extends MachineBuilder> + extends AbstractBuilder { protected MachineInstanceFactory instanceFactory; @Setter(onMethod_ = @ApiStatus.Internal) @@ -149,14 +151,19 @@ public class MachineBuilder definitionFactory, MachineInstanceFactory instanceFactory) { - this.registrate = registrate; - this.name = name; + super(registrate, registrate, name, callback, GTRegistries.Keys.MACHINE); this.instanceFactory = instanceFactory; this.definitionFactory = definitionFactory; } + @Override + public GTRegistrate getOwner() { + return (GTRegistrate) super.getOwner(); + } + @SuppressWarnings("unchecked") public SELF getThis() { return (SELF) this; @@ -217,29 +224,26 @@ public BlockBuilder asSupplier() { - // TODO replace with better method once this is converted to an actual registrate builder - return () -> (DEFINITION)Objects.requireNonNull(GTRegistries.MACHINES.get(registrate.makeResourceLocation(name))); - } - /** - * Create a {@link MetaMachineBlock} for this machine, which is created by the given factory, and return the builder for it so that further customization can be done.
    + * Create a {@link MetaMachineBlock} for this machine, which is created by the given factory, and return the builder + * for it so that further customization can be done.
    * Cannot be called if {@link #block()} has already been called. * - * @param The type of the block. - * @param factory A factory for the block, which accepts the block properties and machine definition and returns a new block. + * @param The type of the block. + * @param factory A factory for the block, which accepts the block properties and machine definition and returns a + * new block. * @return the {@link BlockBuilder} for the {@link MetaMachineBlock} */ public BlockBuilder> block(BiFunction factory) { - if (blockBuilder != null) throw new IllegalStateException("Block builder for machine %s has already been initialized.".formatted(name)); - - var newBlockBuilder = this.registrate.block(this, name, properties -> { - MachineDefinition.setBuilt(this.asSupplier().get()); - var b = factory.apply(properties, this.asSupplier().get()); - MachineDefinition.clearBuilt(); - return b; - }) + if (blockBuilder != null) throw new IllegalStateException( + "Block builder for machine %s has already been initialized.".formatted(getName())); + + var newBlockBuilder = this.getOwner().block(this, getName(), properties -> { + MachineDefinition.setBuilt(this.asSupplier().get()); + var b = factory.apply(properties, this.asSupplier().get()); + MachineDefinition.clearBuilt(); + return b; + }) .color(() -> () -> MetaMachineBlock::colorTinted) .initialProperties(() -> Blocks.DISPENSER) .properties(BlockBehaviour.Properties::noLootTable) @@ -251,7 +255,6 @@ public BlockBuilder * If the {@link ItemBuilder} has not been created yet, then the default one is created. @@ -264,26 +267,31 @@ public ItemBuilder + * Create a {@link MetaMachineItem} for this machine, which is created by the given factory, and return the builder + * for it so that further customization can be done.
    * Cannot be called if {@link #item()} has already been called. * - * @param The type of the item. + * @param The type of the item. * @param factory A factory for the item, which accepts the block and item properties and returns a new item. * @return the {@link ItemBuilder} for the {@link MetaMachineItem} */ public ItemBuilder> item(BiFunction factory) { - if (itemBuilder != null) throw new IllegalStateException("Item builder for machine %s has already been initialized.".formatted(name)); - - var newItemBuilder = this.registrate - .item(this, name, properties -> factory.apply(Objects.requireNonNull(blockEntry, "Item factory called before block resolved.").get(), properties)) + if (itemBuilder != null) throw new IllegalStateException( + "Item builder for machine %s has already been initialized.".formatted(getName())); + + var newItemBuilder = getOwner() + .item(this, getName(), + properties -> factory.apply( + Objects.requireNonNull(blockEntry, "Item factory called before block resolved.").get(), + properties)) .setData(ProviderType.LANG, NonNullBiConsumer.noop()) // do not gen any lang keys // copied from BlockBuilder#item - .model((ctx, prov) -> { - prov.withExistingParent(ctx.getName(), registrate.makeResourceLocation("block/machine/" + ctx.getName())); - }) + .model((ctx, prov) -> prov.withExistingParent(ctx.getName(), + getOwner().makeResourceLocation("block/machine/" + ctx.getName()))) .color(() -> () -> ((itemStack, tintIndex) -> tintIndex == 2 ? GTValues.VC[tier == -1 ? 0 : tier] : tintIndex == 1 ? paintingColor : -1)) .clientExtension(() -> () -> new IClientItemExtensions() { + @Override public BlockEntityWithoutLevelRenderer getCustomRenderer() { return ItemWithBERModelRenderer.INSTANCE; @@ -374,7 +382,7 @@ public SELF recipeType(GTRecipeType type) { if (type == null) { GTCEu.LOGGER.error( "Tried to set null recipe type on machine {}. Did you create the recipe type before this machine?", - this.registrate.makeResourceLocation(this.name)); + getOwner().makeResourceLocation(getName())); return getThis(); } this.recipeTypes = ArrayUtils.add(this.recipeTypes, type); @@ -416,7 +424,7 @@ public SELF simpleModel(ResourceLocation modelName) { } public SELF defaultModel() { - return simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); + return simpleModel(getOwner().makeResourceLocation("block/machine/template/" + getName())); } public SELF tieredHullModel(ResourceLocation model) { @@ -426,7 +434,7 @@ public SELF tieredHullModel(ResourceLocation model) { public SELF overlayTieredHullModel(String name) { modelProperty(GTMachineModelProperties.IS_FORMED, false); return overlayTieredHullModel( - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), "block/machine/part/" + name)); + getOwner().makeResourceLocation("block/machine/part/" + name)); } public SELF overlayTieredHullModel(ResourceLocation overlayModel) { @@ -441,12 +449,11 @@ public SELF colorOverlayTieredHullModel(String overlay, @Nullable String pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); - ResourceLocation overlayTex = ResourceLocation.fromNamespaceAndPath(registrate.getModid(), - "block/overlay/machine/" + overlay); + ResourceLocation overlayTex = getOwner().makeResourceLocation("block/overlay/machine/" + overlay); ResourceLocation pipeOverlayTex = pipeOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + pipeOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + pipeOverlay); ResourceLocation emissiveOverlayTex = emissiveOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + emissiveOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + emissiveOverlay); return colorOverlayTieredHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } @@ -465,7 +472,7 @@ public SELF colorOverlayTieredHullModel(ResourceLocation overlay, public SELF overlaySteamHullModel(String name) { modelProperty(GTMachineModelProperties.IS_FORMED, false); return overlaySteamHullModel( - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), "block/machine/part/" + name)); + getOwner().makeResourceLocation("block/machine/part/" + name)); } public SELF overlaySteamHullModel(ResourceLocation overlayModel) { @@ -481,13 +488,11 @@ public SELF colorOverlaySteamHullModel(String overlay, @Nullable String pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); - ResourceLocation overlayTex = ResourceLocation.fromNamespaceAndPath(registrate.getModid(), - "block/overlay/machine/" + overlay); + ResourceLocation overlayTex = getOwner().makeResourceLocation("block/overlay/machine/" + overlay); ResourceLocation pipeOverlayTex = pipeOverlay == null ? null : - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), "block/overlay/machine/" + pipeOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + pipeOverlay); ResourceLocation emissiveOverlayTex = emissiveOverlay == null ? null : - ResourceLocation.fromNamespaceAndPath(registrate.getModid(), - "block/overlay/machine/" + emissiveOverlay); + getOwner().makeResourceLocation("block/overlay/machine/" + emissiveOverlay); return colorOverlaySteamHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } @@ -495,12 +500,12 @@ public SELF colorOverlaySteamHullModel(String overlay, @Nullable ResourceLocation pipeOverlay, @Nullable String emissiveOverlay) { modelProperty(GTMachineModelProperties.IS_FORMED, false); - ResourceLocation overlayTex = ResourceLocation.fromNamespaceAndPath(registrate.getModid(), + ResourceLocation overlayTex = getOwner().makeResourceLocation( "block/overlay/machine/" + overlay); ResourceLocation pipeOverlayTex = pipeOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + pipeOverlay); + getOwner().makeResourceLocation(("block/overlay/machine/" + pipeOverlay)); ResourceLocation emissiveOverlayTex = emissiveOverlay == null ? null : - registrate.makeResourceLocation("block/overlay/machine/" + emissiveOverlay); + getOwner().makeResourceLocation(("block/overlay/machine/" + emissiveOverlay)); return colorOverlaySteamHullModel(overlayTex, pipeOverlayTex, emissiveOverlayTex); } @@ -555,6 +560,7 @@ public SELF tooltips(@Nullable Component... components) { return tooltips(Arrays.asList(components)); } + @SuppressWarnings("NullableProblems") public SELF tooltips(List components) { tooltips.addAll(components.stream().filter(Objects::nonNull).toList()); return getThis(); @@ -673,7 +679,7 @@ public SELF multiblockPreviewRenderer(boolean multiBlockWorldPreview, } protected DEFINITION createDefinition() { - return definitionFactory.apply(registrate.makeResourceLocation(name)); + return definitionFactory.apply(getOwner().makeResourceLocation(getName())); } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -692,7 +698,8 @@ protected void setupStateDefinition(MachineDefinition definition) { definition.registerDefaultState(defaultState); } - protected DEFINITION createEntry() { + @SuppressWarnings("NullableProblems") + protected @NonNull DEFINITION createEntry() { DEFINITION definition = createDefinition(); definition.setRotationState(rotationState); setupStateDefinition(definition); @@ -742,11 +749,8 @@ protected DEFINITION createEntry() { return definition; } - /** - * Finalise the builder for registration (does not actually register the machine, registration is performed during the register event in {@link #createEntry()} - */ @HideFromJS - public DEFINITION register() { + public MachineEntry register() { ModifyMachineEvent event = new ModifyMachineEvent(this); ModLoader.postEvent(event); if (GTCEu.Mods.isKubeJSLoaded()) { @@ -754,7 +758,7 @@ public DEFINITION register() { } if (model == null && blockModel == null) { - simpleModel(registrate.makeResourceLocation("block/machine/template/" + name)); + simpleModel(getOwner().makeResourceLocation("block/machine/template/" + getName())); } if (this.langValue != null) { block().lang(langValue); @@ -762,8 +766,8 @@ public DEFINITION register() { blockEntry = block().register(); - var blockEntityBuilder = registrate - .>blockEntity(this, name, + var blockEntityBuilder = getOwner() + .>blockEntity(this, getName(), (type, pos, state) -> instanceFactory .buildMachine(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) @@ -772,11 +776,12 @@ public DEFINITION register() { blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); } blockEntityEntry = blockEntityBuilder.register(); + return (MachineEntry) super.register(); + } - // TODO remove once this is a registrate builder - var definition = createEntry(); - GTRegistries.register(GTRegistries.MACHINES, definition.getId(), definition); - return definition; + @Override + protected MachineEntry createEntryWrapper(DeferredHolder delegate) { + return new MachineEntry<>(getOwner(), delegate); } @FunctionalInterface diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index f6e91e34a25..ef79051c217 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -7,6 +7,7 @@ import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; import net.minecraft.MethodsReturnNonnullByDefault; @@ -18,7 +19,7 @@ import brachy.modularui.api.widget.IWidget; import brachy.modularui.value.sync.PanelSyncManager; -import dev.latvian.mods.rhino.util.HideFromJS; +import com.tterrag.registrate.builders.BuilderCallback; import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; import lombok.Getter; import lombok.experimental.Accessors; @@ -52,8 +53,9 @@ public class MultiblockMachineBuilder< .emptyList(); public MultiblockMachineBuilder(GTRegistrate registrate, String name, + BuilderCallback callback, MachineInstanceFactory blockEntityFactory) { - super(registrate, name, (MultiblockMachineDefinition::new), blockEntityFactory); + super(registrate, name, callback, MultiblockMachineDefinition::new, blockEntityFactory); patterns = new Object2ReferenceOpenHashMap<>(); allowExtendedFacing(true); allowCoverOnFront(true); @@ -118,7 +120,7 @@ protected MultiblockMachineDefinition createEntry() { var definition = super.createEntry(); definition.setGenerator(generator); if (patterns.isEmpty()) { - throw new IllegalStateException("Missing default structure pattern for " + name); + throw new IllegalStateException("Missing default structure pattern for " + getName()); } for (Map.Entry> entry : patterns.entrySet()) { definition.setPattern(entry.getKey(), GTMemoizer.memoize(() -> entry.getValue().apply(definition))); @@ -137,4 +139,9 @@ protected MultiblockMachineDefinition createEntry() { definition.setAdditionalDisplay(additionalDisplay); return definition; } + + @Override + public MachineEntry register() { + return super.register(); + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java new file mode 100644 index 00000000000..c148d94555d --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/MachineEntry.java @@ -0,0 +1,51 @@ +package com.gregtechceu.gtceu.api.registry.registrate.entry; + +import com.gregtechceu.gtceu.api.block.MetaMachineBlock; +import com.gregtechceu.gtceu.api.item.MetaMachineItem; +import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.machine.MetaMachine; +import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.neoforged.neoforge.registries.DeferredHolder; + +import com.tterrag.registrate.util.entry.RegistryEntry; + +public class MachineEntry extends RegistryEntry implements ItemLike { + + public MachineEntry(GTRegistrate owner, DeferredHolder key) { + super(owner, key); + } + + public int getTier() { + return value().getTier(); + } + + public MetaMachineBlock getBlock() { + return value().getBlock(); + } + + public MetaMachineItem getItem() { + return value().getItem(); + } + + public BlockEntityType getBlockEntityType() { + return value().getBlockEntityType(); + } + + @Override + public Item asItem() { + return getItem(); + } + + public ItemStack asStack() { + return new ItemStack(getItem()); + } + + public ItemStack asStack(int count) { + return new ItemStack(getItem(), count); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/package-info.java new file mode 100644 index 00000000000..690da38992c --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/entry/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.api.registry.registrate.entry; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index 012f738ab84..7373f28ad09 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -17,7 +17,6 @@ import com.gregtechceu.gtceu.api.data.worldgen.bedrockore.BedrockOreDefinition; import com.gregtechceu.gtceu.api.data.worldgen.generator.IndicatorGenerators; import com.gregtechceu.gtceu.api.data.worldgen.generator.VeinGenerators; -import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; import com.gregtechceu.gtceu.api.events.ModifyMachineEvent; import com.gregtechceu.gtceu.api.events.RegisterSpoilablesEvent; import com.gregtechceu.gtceu.api.item.IComponentItem; @@ -42,10 +41,12 @@ import com.gregtechceu.gtceu.api.recipe.lookup.ingredient.item.*; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.common.block.*; import com.gregtechceu.gtceu.common.data.*; import com.gregtechceu.gtceu.common.data.GTBlocks; +import com.gregtechceu.gtceu.common.data.GTPlacementModifierTypes; import com.gregtechceu.gtceu.common.data.item.*; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.data.materials.GTFoods; @@ -412,7 +413,7 @@ public static void loadComplete(FMLLoadCompleteEvent event) {} public static void registerCapabilities(RegisterCapabilitiesEvent event) { event.registerItem(FluidHandler.ITEM, BottleItemFluidHandler::new, Items.GLASS_BOTTLE); - Stream quantumTanks = Stream.of(GTMachines.SUPER_TANK, GTMachines.QUANTUM_TANK) + Stream> quantumTanks = Stream.of(GTMachines.SUPER_TANK, GTMachines.QUANTUM_TANK) .flatMap(Arrays::stream); quantumTanks = Stream.concat(quantumTanks, Stream.of(GTMachines.CREATIVE_FLUID)); event.registerItem(FluidHandler.ITEM, (stack, ctx) -> { @@ -424,7 +425,7 @@ public static void registerCapabilities(RegisterCapabilitiesEvent event) { return null; } return new QuantumFluidHandlerItemStack(stack, capacity); - }, quantumTanks.filter(Objects::nonNull).map(MachineDefinition::getItem).toArray(Item[]::new)); + }, quantumTanks.filter(Objects::nonNull).map(MachineEntry::getItem).toArray(Item[]::new)); for (Block block : BuiltInRegistries.BLOCK) { if (ConfigHolder.INSTANCE.compat.energy.nativeEUToFE && diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java index 193f406ba61..fb3fc94b80b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMachines.java @@ -16,6 +16,7 @@ import com.gregtechceu.gtceu.api.machine.steam.SteamBoilerMachine; import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.DynamicRenderHelper; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.data.item.GTDataComponents; @@ -74,7 +75,7 @@ public class GTMachines { ////////////////////////////////////// // ****** Steam Machine ******// ////////////////////////////////////// - public static final Pair STEAM_SOLID_BOILER = registerSteamMachines( + public static final Pair, MachineEntry> STEAM_SOLID_BOILER = registerSteamMachines( REGISTRATE, "steam_solid_boiler", SteamSolidBoilerMachine::new, @@ -89,7 +90,7 @@ public class GTMachines { FluidType.BUCKET_VOLUME / 20000)) .register()); - public static final Pair STEAM_LIQUID_BOILER = registerSteamMachines( + public static final Pair, MachineEntry> STEAM_LIQUID_BOILER = registerSteamMachines( REGISTRATE, "steam_liquid_boiler", SteamLiquidBoilerMachine::new, @@ -104,7 +105,7 @@ public class GTMachines { FluidType.BUCKET_VOLUME / 20000)) .register()); - public static final Pair STEAM_SOLAR_BOILER = registerSteamMachines( + public static final Pair, MachineEntry> STEAM_SOLAR_BOILER = registerSteamMachines( REGISTRATE, "steam_solar_boiler", SteamSolarBoiler::new, @@ -119,11 +120,12 @@ public class GTMachines { FluidType.BUCKET_VOLUME / 20000)) .register()); - public static final Pair STEAM_EXTRACTOR = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_EXTRACTOR = registerSimpleSteamMachines( REGISTRATE, "extractor", GTRecipeTypes.EXTRACTOR_RECIPES); - public static final Pair STEAM_MACERATOR = registerSteamMachines(REGISTRATE, + public static final Pair, MachineEntry> STEAM_MACERATOR = registerSteamMachines( + REGISTRATE, "steam_macerator", SimpleSteamMachine::new, (pressure, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.MACERATOR_RECIPES) @@ -135,22 +137,23 @@ public class GTMachines { .workableSteamHullModel(pressure, GTCEu.id("block/machines/macerator")) .register()); - public static final Pair STEAM_COMPRESSOR = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_COMPRESSOR = registerSimpleSteamMachines( REGISTRATE, "compressor", GTRecipeTypes.COMPRESSOR_RECIPES); - public static final Pair STEAM_HAMMER = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_HAMMER = registerSimpleSteamMachines( REGISTRATE, "forge_hammer", GTRecipeTypes.FORGE_HAMMER_RECIPES); - public static final Pair STEAM_FURNACE = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_FURNACE = registerSimpleSteamMachines( REGISTRATE, "furnace", GTRecipeTypes.FURNACE_RECIPES); - public static final Pair STEAM_ALLOY_SMELTER = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_ALLOY_SMELTER = registerSimpleSteamMachines( REGISTRATE, "alloy_smelter", GTRecipeTypes.ALLOY_SMELTER_RECIPES); - public static final Pair STEAM_ROCK_CRUSHER = registerSimpleSteamMachines( + public static final Pair, MachineEntry> STEAM_ROCK_CRUSHER = registerSimpleSteamMachines( REGISTRATE, "rock_crusher", GTRecipeTypes.ROCK_BREAKER_RECIPES); - public static final Pair STEAM_MINER = registerSteamMachines(REGISTRATE, + public static final Pair, MachineEntry> STEAM_MINER = registerSteamMachines( + REGISTRATE, "steam_miner", (holder, isHP) -> isHP ? new SteamMinerMachine(holder, true, 240, 6, 0, 32) : new SteamMinerMachine(holder, false, 320, 4, 0, 16), @@ -175,7 +178,8 @@ public class GTMachines { ////////////////////////////////////// // *** SimpleTieredMachine ***// ////////////////////////////////////// - public static final MachineDefinition[] HULL = GTMachineUtils.registerTieredMachines(REGISTRATE, "machine_hull", + public static final MachineEntry[] HULL = GTMachineUtils.registerTieredMachines(REGISTRATE, + "machine_hull", HullMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) @@ -187,12 +191,15 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ELECTRIC_FURNACE = new SimpleMachineBuilder(REGISTRATE, "electric_furnace", + public static final MachineEntry[] ELECTRIC_FURNACE = new SimpleMachineBuilder(REGISTRATE, + "electric_furnace", GTRecipeTypes.FURNACE_RECIPES).register(); - public static final MachineDefinition[] ALLOY_SMELTER = new SimpleMachineBuilder(REGISTRATE, "alloy_smelter", + public static final MachineEntry[] ALLOY_SMELTER = new SimpleMachineBuilder(REGISTRATE, + "alloy_smelter", GTRecipeTypes.ALLOY_SMELTER_RECIPES).register(); - public static final MachineDefinition[] ARC_FURNACE = registerTieredMachines(REGISTRATE, "arc_furnace", + public static final MachineEntry[] ARC_FURNACE = registerTieredMachines(REGISTRATE, + "arc_furnace", SimpleTieredMachine::new, (tier, builder) -> builder .langValue("%s Arc Furnace %s".formatted(VLVH[tier], VLVT[tier])) .rotationState(RotationState.NON_Y_AXIS) @@ -204,106 +211,119 @@ public class GTMachines { GTRecipeTypes.ARC_FURNACE_RECIPES, defaultTankSizeFunction.applyAsInt(tier), true)) .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, "assembler", + public static final MachineEntry[] ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, "assembler", GTRecipeTypes.ASSEMBLER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] AUTOCLAVE = new SimpleMachineBuilder(REGISTRATE, "autoclave", + public static final MachineEntry[] AUTOCLAVE = new SimpleMachineBuilder(REGISTRATE, "autoclave", GTRecipeTypes.AUTOCLAVE_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] BENDER = new SimpleMachineBuilder(REGISTRATE, "bender", + public static final MachineEntry[] BENDER = new SimpleMachineBuilder(REGISTRATE, "bender", GTRecipeTypes.BENDER_RECIPES) .register(); - public static final MachineDefinition[] BREWERY = new SimpleMachineBuilder(REGISTRATE, "brewery", + public static final MachineEntry[] BREWERY = new SimpleMachineBuilder(REGISTRATE, "brewery", GTRecipeTypes.BREWING_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] CANNER = new SimpleMachineBuilder(REGISTRATE, "canner", + public static final MachineEntry[] CANNER = new SimpleMachineBuilder(REGISTRATE, "canner", GTRecipeTypes.CANNER_RECIPES) .register(); - public static final MachineDefinition[] CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, "centrifuge", + public static final MachineEntry[] CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, + "centrifuge", GTRecipeTypes.CENTRIFUGE_RECIPES).tankScalingFunction(largeTankSizeFunction).register(); - public static final MachineDefinition[] CHEMICAL_BATH = new SimpleMachineBuilder(REGISTRATE, "chemical_bath", + public static final MachineEntry[] CHEMICAL_BATH = new SimpleMachineBuilder(REGISTRATE, + "chemical_bath", GTRecipeTypes.CHEMICAL_BATH_RECIPES).tankScalingFunction(hvCappedTankSizeFunction).register(); - public static final MachineDefinition[] CHEMICAL_REACTOR = new SimpleMachineBuilder(REGISTRATE, "chemical_reactor", + public static final MachineEntry[] CHEMICAL_REACTOR = new SimpleMachineBuilder(REGISTRATE, + "chemical_reactor", GTRecipeTypes.CHEMICAL_RECIPES) .tankScalingFunction(tier -> 16 * FluidType.BUCKET_VOLUME) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] COMPRESSOR = new SimpleMachineBuilder(REGISTRATE, "compressor", + public static final MachineEntry[] COMPRESSOR = new SimpleMachineBuilder(REGISTRATE, + "compressor", GTRecipeTypes.COMPRESSOR_RECIPES).register(); - public static final MachineDefinition[] CUTTER = new SimpleMachineBuilder(REGISTRATE, "cutter", + public static final MachineEntry[] CUTTER = new SimpleMachineBuilder(REGISTRATE, "cutter", GTRecipeTypes.CUTTER_RECIPES) .register(); - public static final MachineDefinition[] DISTILLERY = new SimpleMachineBuilder(REGISTRATE, "distillery", + public static final MachineEntry[] DISTILLERY = new SimpleMachineBuilder(REGISTRATE, + "distillery", GTRecipeTypes.DISTILLERY_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] ELECTROLYZER = new SimpleMachineBuilder(REGISTRATE, "electrolyzer", + public static final MachineEntry[] ELECTROLYZER = new SimpleMachineBuilder(REGISTRATE, + "electrolyzer", GTRecipeTypes.ELECTROLYZER_RECIPES) .tankScalingFunction(largeTankSizeFunction) .register(); - public static final MachineDefinition[] ELECTROMAGNETIC_SEPARATOR = new SimpleMachineBuilder(REGISTRATE, + public static final MachineEntry[] ELECTROMAGNETIC_SEPARATOR = new SimpleMachineBuilder( + REGISTRATE, "electromagnetic_separator", GTRecipeTypes.ELECTROMAGNETIC_SEPARATOR_RECIPES).register(); - public static final MachineDefinition[] EXTRACTOR = new SimpleMachineBuilder(REGISTRATE, "extractor", + public static final MachineEntry[] EXTRACTOR = new SimpleMachineBuilder(REGISTRATE, "extractor", GTRecipeTypes.EXTRACTOR_RECIPES).register(); - public static final MachineDefinition[] EXTRUDER = new SimpleMachineBuilder(REGISTRATE, "extruder", + public static final MachineEntry[] EXTRUDER = new SimpleMachineBuilder(REGISTRATE, "extruder", GTRecipeTypes.EXTRUDER_RECIPES).register(); - public static final MachineDefinition[] FERMENTER = new SimpleMachineBuilder(REGISTRATE, "fermenter", + public static final MachineEntry[] FERMENTER = new SimpleMachineBuilder(REGISTRATE, "fermenter", GTRecipeTypes.FERMENTING_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] FLUID_HEATER = new SimpleMachineBuilder(REGISTRATE, "fluid_heater", + public static final MachineEntry[] FLUID_HEATER = new SimpleMachineBuilder(REGISTRATE, + "fluid_heater", GTRecipeTypes.FLUID_HEATER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] FLUID_SOLIDIFIER = new SimpleMachineBuilder(REGISTRATE, "fluid_solidifier", + public static final MachineEntry[] FLUID_SOLIDIFIER = new SimpleMachineBuilder(REGISTRATE, + "fluid_solidifier", GTRecipeTypes.FLUID_SOLIDFICATION_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] FORGE_HAMMER = new SimpleMachineBuilder(REGISTRATE, "forge_hammer", + public static final MachineEntry[] FORGE_HAMMER = new SimpleMachineBuilder(REGISTRATE, + "forge_hammer", GTRecipeTypes.FORGE_HAMMER_RECIPES).register(); - public static final MachineDefinition[] FORMING_PRESS = new SimpleMachineBuilder(REGISTRATE, "forming_press", + public static final MachineEntry[] FORMING_PRESS = new SimpleMachineBuilder(REGISTRATE, + "forming_press", GTRecipeTypes.FORMING_PRESS_RECIPES).register(); - public static final MachineDefinition[] LATHE = new SimpleMachineBuilder(REGISTRATE, "lathe", + public static final MachineEntry[] LATHE = new SimpleMachineBuilder(REGISTRATE, "lathe", GTRecipeTypes.LATHE_RECIPES) .register(); - public static final MachineDefinition[] SCANNER = new SimpleMachineBuilder(REGISTRATE, "scanner", + public static final MachineEntry[] SCANNER = new SimpleMachineBuilder(REGISTRATE, "scanner", GTRecipeTypes.SCANNER_RECIPES) .register(); - public static final MachineDefinition[] MIXER = new SimpleMachineBuilder(REGISTRATE, "mixer", + public static final MachineEntry[] MIXER = new SimpleMachineBuilder(REGISTRATE, "mixer", GTRecipeTypes.MIXER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .register(); - public static final MachineDefinition[] ORE_WASHER = new SimpleMachineBuilder(REGISTRATE, "ore_washer", + public static final MachineEntry[] ORE_WASHER = new SimpleMachineBuilder(REGISTRATE, + "ore_washer", GTRecipeTypes.ORE_WASHER_RECIPES).register(); - public static final MachineDefinition[] PACKER = new SimpleMachineBuilder(REGISTRATE, "packer", + public static final MachineEntry[] PACKER = new SimpleMachineBuilder(REGISTRATE, "packer", GTRecipeTypes.PACKER_RECIPES) .register(); - public static final MachineDefinition[] POLARIZER = new SimpleMachineBuilder(REGISTRATE, "polarizer", + public static final MachineEntry[] POLARIZER = new SimpleMachineBuilder(REGISTRATE, "polarizer", GTRecipeTypes.POLARIZER_RECIPES).register(); - public static final MachineDefinition[] LASER_ENGRAVER = new SimpleMachineBuilder(REGISTRATE, "laser_engraver", + public static final MachineEntry[] LASER_ENGRAVER = new SimpleMachineBuilder(REGISTRATE, + "laser_engraver", GTRecipeTypes.LASER_ENGRAVER_RECIPES) .tankScalingFunction(defaultTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] SIFTER = new SimpleMachineBuilder(REGISTRATE, "sifter", + public static final MachineEntry[] SIFTER = new SimpleMachineBuilder(REGISTRATE, "sifter", GTRecipeTypes.SIFTER_RECIPES) .register(); - public static final MachineDefinition[] THERMAL_CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, + public static final MachineEntry[] THERMAL_CENTRIFUGE = new SimpleMachineBuilder(REGISTRATE, "thermal_centrifuge", GTRecipeTypes.THERMAL_CENTRIFUGE_RECIPES).register(); - public static final MachineDefinition[] WIREMILL = new SimpleMachineBuilder(REGISTRATE, "wiremill", + public static final MachineEntry[] WIREMILL = new SimpleMachineBuilder(REGISTRATE, "wiremill", GTRecipeTypes.WIREMILL_RECIPES).register(); - public static final MachineDefinition[] CIRCUIT_ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, + public static final MachineEntry[] CIRCUIT_ASSEMBLER = new SimpleMachineBuilder(REGISTRATE, "circuit_assembler", GTRecipeTypes.CIRCUIT_ASSEMBLER_RECIPES) .tankScalingFunction(hvCappedTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] MACERATOR = registerTieredMachines(REGISTRATE, "macerator", + public static final MachineEntry[] MACERATOR = registerTieredMachines(REGISTRATE, "macerator", SimpleTieredMachine::new, (tier, builder) -> builder .langValue("%s Macerator %s".formatted(VLVH[tier], VLVT[tier])) .rotationState(RotationState.NON_Y_AXIS) @@ -320,13 +340,15 @@ public class GTMachines { GTRecipeTypes.MACERATOR_RECIPES, defaultTankSizeFunction.applyAsInt(tier), true)) .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] GAS_COLLECTOR = new SimpleMachineBuilder(REGISTRATE, "gas_collector", + public static final MachineEntry[] GAS_COLLECTOR = new SimpleMachineBuilder(REGISTRATE, + "gas_collector", GTRecipeTypes.GAS_COLLECTOR_RECIPES) .tankScalingFunction(largeTankSizeFunction) .hasPollutionDebuff(true) .register(); - public static final MachineDefinition[] ROCK_CRUSHER = registerTieredMachines(REGISTRATE, "rock_crusher", + public static final MachineEntry[] ROCK_CRUSHER = registerTieredMachines(REGISTRATE, + "rock_crusher", GTMachineInstanceFactories.ROCK_CRUSHER, (tier, builder) -> builder .langValue("%s Rock Crusher %s".formatted(VLVH[tier], VLVT[tier])) .ui(GTSingleblockMachinePanels.GENERAL_MACHINE) @@ -339,7 +361,8 @@ public class GTMachines { .tooltips(explosion()) .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] AIR_SCRUBBER = registerTieredMachines(REGISTRATE, "air_scrubber", + public static final MachineEntry[] AIR_SCRUBBER = registerTieredMachines(REGISTRATE, + "air_scrubber", AirScrubberMachine::new, (tier, builder) -> builder .langValue("%s Air Scrubber %s".formatted(VLVH[tier], VLVT[tier])) .ui(GTSingleblockMachinePanels.GENERAL_MACHINE) @@ -356,32 +379,37 @@ public class GTMachines { ////////////////////////////////////// // **** Simple Generator ****// ////////////////////////////////////// - public static final MachineDefinition[] COMBUSTION = registerSimpleGenerator(REGISTRATE, "combustion", + public static final MachineEntry[] COMBUSTION = registerSimpleGenerator(REGISTRATE, "combustion", GTRecipeTypes.COMBUSTION_GENERATOR_FUELS, genericGeneratorTankSizeFunction, 0.1f, GTValues.LV, GTValues.MV, GTValues.HV); - public static final MachineDefinition[] STEAM_TURBINE = registerSimpleGenerator(REGISTRATE, "steam_turbine", + public static final MachineEntry[] STEAM_TURBINE = registerSimpleGenerator(REGISTRATE, + "steam_turbine", GTRecipeTypes.STEAM_TURBINE_FUELS, steamGeneratorTankSizeFunction, 0.0f, GTValues.LV, GTValues.MV, GTValues.HV); - public static final MachineDefinition[] GAS_TURBINE = registerSimpleGenerator(REGISTRATE, "gas_turbine", + public static final MachineEntry[] GAS_TURBINE = registerSimpleGenerator(REGISTRATE, + "gas_turbine", GTRecipeTypes.GAS_TURBINE_FUELS, genericGeneratorTankSizeFunction, 0.1f, GTValues.LV, GTValues.MV, GTValues.HV); ////////////////////////////////////// // ******** Electric ********// ////////////////////////////////////// - public static final MachineDefinition[] TRANSFORMER = registerTransformerMachines(REGISTRATE, "", 1); - public static final MachineDefinition[] HI_AMP_TRANSFORMER_2A = registerTransformerMachines(REGISTRATE, + public static final MachineEntry[] TRANSFORMER = registerTransformerMachines(REGISTRATE, "", 1); + public static final MachineEntry[] HI_AMP_TRANSFORMER_2A = registerTransformerMachines( + REGISTRATE, "Hi-Amp (2x)", 2); - public static final MachineDefinition[] HI_AMP_TRANSFORMER_4A = registerTransformerMachines(REGISTRATE, + public static final MachineEntry[] HI_AMP_TRANSFORMER_4A = registerTransformerMachines( + REGISTRATE, "Hi-Amp (4x)", 4); - public static final MachineDefinition[] POWER_TRANSFORMER = registerTransformerMachines(REGISTRATE, "Power", 16); + public static final MachineEntry[] POWER_TRANSFORMER = registerTransformerMachines(REGISTRATE, + "Power", 16); - public static final MachineDefinition[] ENERGY_CONVERTER_1A = registerConverter(REGISTRATE, 1); - public static final MachineDefinition[] ENERGY_CONVERTER_4A = registerConverter(REGISTRATE, 4); - public static final MachineDefinition[] ENERGY_CONVERTER_8A = registerConverter(REGISTRATE, 8); - public static final MachineDefinition[] ENERGY_CONVERTER_16A = registerConverter(REGISTRATE, 16); + public static final MachineEntry[] ENERGY_CONVERTER_1A = registerConverter(REGISTRATE, 1); + public static final MachineEntry[] ENERGY_CONVERTER_4A = registerConverter(REGISTRATE, 4); + public static final MachineEntry[] ENERGY_CONVERTER_8A = registerConverter(REGISTRATE, 8); + public static final MachineEntry[] ENERGY_CONVERTER_16A = registerConverter(REGISTRATE, 16); - public static final MachineDefinition LONG_DIST_ITEM_ENDPOINT = REGISTRATE + public static final MachineEntry LONG_DIST_ITEM_ENDPOINT = REGISTRATE .machine("long_distance_item_pipeline_endpoint", LDItemEndpointMachine::new) .langValue("Long Distance Item Pipeline Endpoint") .rotationState(RotationState.ALL) @@ -397,7 +425,7 @@ public class GTMachines { }) .register(); - public static final MachineDefinition LONG_DIST_FLUID_ENDPOINT = REGISTRATE + public static final MachineEntry LONG_DIST_FLUID_ENDPOINT = REGISTRATE .machine("long_distance_fluid_pipeline_endpoint", LDFluidEndpointMachine::new) .langValue("Long Distance Fluid Pipeline Endpoint") .rotationState(RotationState.ALL) @@ -415,15 +443,16 @@ public class GTMachines { }) .register(); - public static final MachineDefinition[] BATTERY_BUFFER_4 = registerBatteryBuffer(REGISTRATE, 4); + public static final MachineEntry[] BATTERY_BUFFER_4 = registerBatteryBuffer(REGISTRATE, 4); - public static final MachineDefinition[] BATTERY_BUFFER_8 = registerBatteryBuffer(REGISTRATE, 8); + public static final MachineEntry[] BATTERY_BUFFER_8 = registerBatteryBuffer(REGISTRATE, 8); - public static final MachineDefinition[] BATTERY_BUFFER_16 = registerBatteryBuffer(REGISTRATE, 16); + public static final MachineEntry[] BATTERY_BUFFER_16 = registerBatteryBuffer(REGISTRATE, 16); - public static final MachineDefinition[] CHARGER_4 = registerCharger(REGISTRATE, 4); + public static final MachineEntry[] CHARGER_4 = registerCharger(REGISTRATE, 4); - public static final MachineDefinition[] PUMP = registerTieredMachines(REGISTRATE, "pump", PumpMachine::new, + public static final MachineEntry[] PUMP = registerTieredMachines(REGISTRATE, "pump", + PumpMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) .tieredHullModel(GTCEu.id("block/machine/template/pump_machine")) @@ -442,7 +471,8 @@ public class GTMachines { .register(), LV, MV, HV, EV); - public static final MachineDefinition[] FISHER = registerTieredMachines(REGISTRATE, "fisher", FisherMachine::new, + public static final MachineEntry[] FISHER = registerTieredMachines(REGISTRATE, "fisher", + FisherMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) // .editableUI(FisherMachine.EDITABLE_UI_CREATOR.apply(GTCEu.id("fisher"), (tier + 1) * (tier + 1))) @@ -460,7 +490,8 @@ public class GTMachines { .register(), LV, MV, HV, EV, IV, LuV); - public static final MachineDefinition[] BLOCK_BREAKER = registerTieredMachines(REGISTRATE, "block_breaker", + public static final MachineEntry[] BLOCK_BREAKER = registerTieredMachines(REGISTRATE, + "block_breaker", BlockBreakerMachine::new, (tier, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) @@ -477,7 +508,7 @@ public class GTMachines { .register(), LV, MV, HV, EV); - public static final MachineDefinition[] MINER = registerTieredMachines(REGISTRATE, "miner", + public static final MachineEntry[] MINER = registerTieredMachines(REGISTRATE, "miner", (holder, tier) -> new MinerMachine(holder, tier, ConfigHolder.INSTANCE.machines.minerSpeed / (tier * 2), tier * 8, tier), (tier, builder) -> builder @@ -505,7 +536,8 @@ public class GTMachines { .register(), LV, MV, HV); - public static final MachineDefinition[] WORLD_ACCELERATOR = registerTieredMachines(REGISTRATE, "world_accelerator", + public static final MachineEntry[] WORLD_ACCELERATOR = registerTieredMachines(REGISTRATE, + "world_accelerator", WorldAcceleratorMachine::new, (tier, builder) -> builder .rotationState(RotationState.NONE) @@ -534,7 +566,8 @@ public class GTMachines { .register(), LV, MV, HV, EV, IV, LuV, ZPM, UV); - public static final MachineDefinition[] ITEM_COLLECTOR = registerTieredMachines(REGISTRATE, "item_collector", + public static final MachineEntry[] ITEM_COLLECTOR = registerTieredMachines(REGISTRATE, + "item_collector", ItemCollectorMachine::new, (tier, builder) -> builder .rotationState(RotationState.NONE) @@ -559,7 +592,7 @@ public class GTMachines { // ********* Storage *********// ////////////////////////////////////// - public static final MachineDefinition[] BUFFER = registerTieredMachines(REGISTRATE, "buffer", + public static final MachineEntry[] BUFFER = registerTieredMachines(REGISTRATE, "buffer", BufferMachine::new, (tier, builder) -> builder .langValue("%s Buffer %s".formatted(VLVH[tier], VLVT[tier])) @@ -583,7 +616,7 @@ public class GTMachines { .withStyle(TooltipHelper.RAINBOW_HSL_SLOW)) .append(Component.translatable("gtceu.creative_tooltip.3"))); - public static final MachineDefinition CREATIVE_ENERGY = REGISTRATE + public static final MachineEntry CREATIVE_ENERGY = REGISTRATE .machine("creative_energy", CreativeEnergyContainerMachine::new) .rotationState(RotationState.NONE) .model(createSingleOverlayTieredHullMachineModel(GTModels.BLANK_TEXTURE, @@ -592,7 +625,7 @@ public class GTMachines { .tier(MAX) .register(); - public static final MachineDefinition CREATIVE_COMPUTATION_PROVIDER = REGISTRATE + public static final MachineEntry CREATIVE_COMPUTATION_PROVIDER = REGISTRATE .machine("creative_computation_provider", CreativeComputationProviderMachine::new) .rotationState(RotationState.NONE) .model(createSingleOverlayTieredHullMachineModel( @@ -602,7 +635,7 @@ public class GTMachines { .tier(MAX) .register(); - public static final MachineDefinition CREATIVE_FLUID = REGISTRATE + public static final MachineEntry CREATIVE_FLUID = REGISTRATE .machine("creative_tank", CreativeTankMachine::new) .rotationState(RotationState.ALL) .allowExtendedFacing(true) @@ -622,7 +655,7 @@ public class GTMachines { .hasBER(true) .register(); - public static final MachineDefinition CREATIVE_ITEM = REGISTRATE + public static final MachineEntry CREATIVE_ITEM = REGISTRATE .machine("creative_chest", CreativeChestMachine::new) .rotationState(RotationState.ALL) .allowExtendedFacing(true) @@ -642,51 +675,65 @@ public class GTMachines { .hasBER(true) .register(); - public static final MachineDefinition[] SUPER_CHEST = registerQuantumChests(REGISTRATE, "super_chest", LOW_TIERS); - public static final MachineDefinition[] QUANTUM_CHEST = registerQuantumChests(REGISTRATE, "quantum_chest", + public static final MachineEntry[] SUPER_CHEST = registerQuantumChests(REGISTRATE, "super_chest", + LOW_TIERS); + public static final MachineEntry[] QUANTUM_CHEST = registerQuantumChests(REGISTRATE, + "quantum_chest", HIGH_TIERS); - public static final MachineDefinition[] SUPER_TANK = registerQuantumTanks(REGISTRATE, "super_tank", LOW_TIERS); - public static final MachineDefinition[] QUANTUM_TANK = registerQuantumTanks(REGISTRATE, "quantum_tank", HIGH_TIERS); - - public static MachineDefinition WOODEN_CRATE = registerCrate(REGISTRATE, GTMaterials.Wood, 27, 9, "Wooden Crate"); - public static MachineDefinition BRONZE_CRATE = registerCrate(REGISTRATE, GTMaterials.Bronze, 54, 9, "Bronze Crate"); - public static MachineDefinition STEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.Steel, 72, 9, "Steel Crate"); - public static MachineDefinition ALUMINIUM_CRATE = registerCrate(REGISTRATE, GTMaterials.Aluminium, 90, 10, + public static final MachineEntry[] SUPER_TANK = registerQuantumTanks(REGISTRATE, "super_tank", + LOW_TIERS); + public static final MachineEntry[] QUANTUM_TANK = registerQuantumTanks(REGISTRATE, + "quantum_tank", HIGH_TIERS); + + public static final MachineEntry WOODEN_CRATE = registerCrate(REGISTRATE, GTMaterials.Wood, 27, + 9, "Wooden Crate"); + public static final MachineEntry BRONZE_CRATE = registerCrate(REGISTRATE, GTMaterials.Bronze, 54, + 9, "Bronze Crate"); + public static final MachineEntry STEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.Steel, 72, + 9, "Steel Crate"); + public static final MachineEntry ALUMINIUM_CRATE = registerCrate(REGISTRATE, + GTMaterials.Aluminium, 90, 10, "Aluminium Crate"); - public static MachineDefinition STAINLESS_STEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.StainlessSteel, 108, + public static final MachineEntry STAINLESS_STEEL_CRATE = registerCrate(REGISTRATE, + GTMaterials.StainlessSteel, 108, 12, "Stainless Steel Crate"); - public static MachineDefinition TITANIUM_CRATE = registerCrate(REGISTRATE, GTMaterials.Titanium, 126, 14, + public static final MachineEntry TITANIUM_CRATE = registerCrate(REGISTRATE, GTMaterials.Titanium, + 126, 14, "Titanium Crate"); - public static MachineDefinition TUNGSTENSTEEL_CRATE = registerCrate(REGISTRATE, GTMaterials.TungstenSteel, 144, 16, + public static final MachineEntry TUNGSTENSTEEL_CRATE = registerCrate(REGISTRATE, + GTMaterials.TungstenSteel, 144, 16, "Tungstensteel Crate"); - public static MachineDefinition WOODEN_DRUM = registerDrum(REGISTRATE, GTMaterials.Wood, + public static final MachineEntry WOODEN_DRUM = registerDrum(REGISTRATE, GTMaterials.Wood, (16 * FluidType.BUCKET_VOLUME), "Wooden Barrel"); - public static MachineDefinition BRONZE_DRUM = registerDrum(REGISTRATE, GTMaterials.Bronze, + public static final MachineEntry BRONZE_DRUM = registerDrum(REGISTRATE, GTMaterials.Bronze, (32 * FluidType.BUCKET_VOLUME), "Bronze Drum"); - public static MachineDefinition STEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.Steel, + public static final MachineEntry STEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.Steel, (64 * FluidType.BUCKET_VOLUME), "Steel Drum"); - public static MachineDefinition ALUMINIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Aluminium, + public static final MachineEntry ALUMINIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Aluminium, (128 * FluidType.BUCKET_VOLUME), "Aluminium Drum"); - public static MachineDefinition STAINLESS_STEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.StainlessSteel, + public static final MachineEntry STAINLESS_STEEL_DRUM = registerDrum(REGISTRATE, + GTMaterials.StainlessSteel, (256 * FluidType.BUCKET_VOLUME), "Stainless Steel Drum"); - public static MachineDefinition GOLD_DRUM = registerDrum(REGISTRATE, GTMaterials.Gold, + public static final MachineEntry GOLD_DRUM = registerDrum(REGISTRATE, GTMaterials.Gold, (32 * FluidType.BUCKET_VOLUME), "Gold Drum"); - public static MachineDefinition TITANIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Titanium, + public static final MachineEntry TITANIUM_DRUM = registerDrum(REGISTRATE, GTMaterials.Titanium, (512 * FluidType.BUCKET_VOLUME), "Titanium Drum"); - public static MachineDefinition TUNGSTENSTEEL_DRUM = registerDrum(REGISTRATE, GTMaterials.TungstenSteel, + public static final MachineEntry TUNGSTENSTEEL_DRUM = registerDrum(REGISTRATE, + GTMaterials.TungstenSteel, (1024 * FluidType.BUCKET_VOLUME), "Tungstensteel Drum"); ////////////////////////////////////// // ********** Part **********// ////////////////////////////////////// - public static final MachineDefinition[] ITEM_IMPORT_BUS = registerTieredMachines(REGISTRATE, "input_bus", + public static final MachineEntry[] ITEM_IMPORT_BUS = registerTieredMachines(REGISTRATE, + "input_bus", (holder, tier) -> new ItemBusPartMachine(holder, tier, IN), (tier, builder) -> builder .langValue(VNF[tier] + " Input Bus") @@ -701,7 +748,8 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ITEM_EXPORT_BUS = registerTieredMachines(REGISTRATE, "output_bus", + public static final MachineEntry[] ITEM_EXPORT_BUS = registerTieredMachines(REGISTRATE, + "output_bus", (holder, tier) -> new ItemBusPartMachine(holder, tier, OUT), (tier, builder) -> builder .langValue(VNF[tier] + " Output Bus") @@ -716,43 +764,43 @@ public class GTMachines { .register(), ALL_TIERS); - public final static MachineDefinition[] FLUID_IMPORT_HATCH = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_IMPORT_HATCH = registerFluidHatches(REGISTRATE, "input_hatch", "Input Hatch", "fluid_hatch.import", IN, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, 1, ALL_TIERS, PartAbility.IMPORT_FLUIDS, PartAbility.IMPORT_FLUIDS_1X); - public final static MachineDefinition[] FLUID_IMPORT_HATCH_4X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_IMPORT_HATCH_4X = registerFluidHatches(REGISTRATE, "input_hatch_4x", "Quadruple Input Hatch", "fluid_hatch.import", IN, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_4X, 4, MULTI_HATCH_TIERS, PartAbility.IMPORT_FLUIDS, PartAbility.IMPORT_FLUIDS_4X); - public final static MachineDefinition[] FLUID_IMPORT_HATCH_9X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_IMPORT_HATCH_9X = registerFluidHatches(REGISTRATE, "input_hatch_9x", "Nonuple Input Hatch", "fluid_hatch.import", IN, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_9X, 9, MULTI_HATCH_TIERS, PartAbility.IMPORT_FLUIDS, PartAbility.IMPORT_FLUIDS_9X); - public final static MachineDefinition[] FLUID_EXPORT_HATCH = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_EXPORT_HATCH = registerFluidHatches(REGISTRATE, "output_hatch", "Output Hatch", "fluid_hatch.export", OUT, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, 1, ALL_TIERS, PartAbility.EXPORT_FLUIDS, PartAbility.EXPORT_FLUIDS_1X); - public final static MachineDefinition[] FLUID_EXPORT_HATCH_4X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_EXPORT_HATCH_4X = registerFluidHatches(REGISTRATE, "output_hatch_4x", "Quadruple Output Hatch", "fluid_hatch.export", OUT, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_4X, 4, MULTI_HATCH_TIERS, PartAbility.EXPORT_FLUIDS, PartAbility.EXPORT_FLUIDS_4X); - public final static MachineDefinition[] FLUID_EXPORT_HATCH_9X = registerFluidHatches(REGISTRATE, + public static final MachineEntry[] FLUID_EXPORT_HATCH_9X = registerFluidHatches(REGISTRATE, "output_hatch_9x", "Nonuple Output Hatch", "fluid_hatch.export", OUT, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_9X, 9, MULTI_HATCH_TIERS, PartAbility.EXPORT_FLUIDS, PartAbility.EXPORT_FLUIDS_9X); - public static final MachineDefinition[] ENERGY_INPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_INPUT_HATCH = registerTieredMachines(REGISTRATE, "energy_input_hatch", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 2), (tier, builder) -> builder @@ -771,7 +819,7 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ENERGY_OUTPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_OUTPUT_HATCH = registerTieredMachines(REGISTRATE, "energy_output_hatch", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 2), (tier, builder) -> builder @@ -790,7 +838,7 @@ public class GTMachines { .register(), ALL_TIERS); - public static final MachineDefinition[] ENERGY_INPUT_HATCH_4A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_INPUT_HATCH_4A = registerTieredMachines(REGISTRATE, "energy_input_hatch_4a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 4), (tier, builder) -> builder @@ -809,7 +857,7 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] ENERGY_OUTPUT_HATCH_4A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_OUTPUT_HATCH_4A = registerTieredMachines(REGISTRATE, "energy_output_hatch_4a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 4), (tier, builder) -> builder @@ -828,7 +876,7 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] ENERGY_INPUT_HATCH_16A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_INPUT_HATCH_16A = registerTieredMachines(REGISTRATE, "energy_input_hatch_16a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 16), (tier, builder) -> builder @@ -847,7 +895,7 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] ENERGY_OUTPUT_HATCH_16A = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ENERGY_OUTPUT_HATCH_16A = registerTieredMachines(REGISTRATE, "energy_output_hatch_16a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 16), (tier, builder) -> builder @@ -866,7 +914,8 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] SUBSTATION_ENERGY_INPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] SUBSTATION_ENERGY_INPUT_HATCH = registerTieredMachines( + REGISTRATE, "substation_input_hatch_64a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, IN, 64), (tier, builder) -> builder @@ -885,7 +934,8 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] SUBSTATION_ENERGY_OUTPUT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] SUBSTATION_ENERGY_OUTPUT_HATCH = registerTieredMachines( + REGISTRATE, "substation_output_hatch_64a", (holder, tier) -> new EnergyHatchPartMachine(holder, tier, OUT, 64), (tier, builder) -> builder @@ -904,7 +954,8 @@ public class GTMachines { .register(), GTValues.tiersBetween(EV, GTCEuAPI.isHighTier() ? MAX : UHV)); - public static final MachineDefinition[] MUFFLER_HATCH = registerTieredMachines(REGISTRATE, "muffler_hatch", + public static final MachineEntry[] MUFFLER_HATCH = registerTieredMachines(REGISTRATE, + "muffler_hatch", MufflerPartMachine::new, (tier, builder) -> builder .langValue("Muffler Hatch " + VNF[tier]) @@ -920,7 +971,7 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition STEAM_IMPORT_BUS = REGISTRATE + public static final MachineEntry STEAM_IMPORT_BUS = REGISTRATE .machine("steam_input_bus", holder -> new SteamItemBusPartMachine(holder, IN)) .rotationState(RotationState.ALL) .abilities(PartAbility.STEAM_IMPORT_ITEMS) @@ -934,7 +985,7 @@ public class GTMachines { .allowCoverOnFront(true) .register(); - public static final MachineDefinition STEAM_EXPORT_BUS = REGISTRATE + public static final MachineEntry STEAM_EXPORT_BUS = REGISTRATE .machine("steam_output_bus", holder -> new SteamItemBusPartMachine(holder, OUT)) .rotationState(RotationState.ALL) .abilities(PartAbility.STEAM_EXPORT_ITEMS) @@ -948,7 +999,7 @@ public class GTMachines { .allowCoverOnFront(true) .register(); - public static final MachineDefinition STEAM_HATCH = REGISTRATE + public static final MachineEntry STEAM_HATCH = REGISTRATE .machine("steam_input_hatch", SteamHatchPartMachine::new) .rotationState(RotationState.ALL) .abilities(PartAbility.STEAM) @@ -961,7 +1012,8 @@ public class GTMachines { .allowCoverOnFront(true) .register(); - public static final MachineDefinition COKE_OVEN_HATCH = REGISTRATE.machine("coke_oven_hatch", CokeOvenHatch::new) + public static final MachineEntry COKE_OVEN_HATCH = REGISTRATE + .machine("coke_oven_hatch", CokeOvenHatch::new) .rotationState(RotationState.ALL) .modelProperty(IS_FORMED, false) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) @@ -969,7 +1021,8 @@ public class GTMachines { .themeId(GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MachineDefinition PUMP_HATCH = REGISTRATE.machine("pump_hatch", PumpHatchPartMachine::new) + public static final MachineEntry PUMP_HATCH = REGISTRATE + .machine("pump_hatch", PumpHatchPartMachine::new) .rotationState(RotationState.ALL) .abilities(PartAbility.PUMP_FLUID_HATCH) .modelProperty(IS_FORMED, false) @@ -988,7 +1041,7 @@ public class GTMachines { .themeId(GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MachineDefinition MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry MAINTENANCE_HATCH = REGISTRATE .machine("maintenance_hatch", (blockEntity) -> new MaintenanceHatchPartMachine(blockEntity, false)) .rotationState(RotationState.ALL) .abilities(PartAbility.MAINTENANCE) @@ -999,7 +1052,7 @@ public class GTMachines { .tier(LV) .register(); - public static final MachineDefinition CONFIGURABLE_MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry CONFIGURABLE_MAINTENANCE_HATCH = REGISTRATE .machine("configurable_maintenance_hatch", (blockEntity) -> new MaintenanceHatchPartMachine(blockEntity, true)) .rotationState(RotationState.ALL) @@ -1011,7 +1064,7 @@ public class GTMachines { .tier(HV) .register(); - public static final MachineDefinition CLEANING_MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry CLEANING_MAINTENANCE_HATCH = REGISTRATE .machine("cleaning_maintenance_hatch", holder -> new CleaningMaintenanceHatchPartMachine(holder, CleanroomType.CLEANROOM)) .rotationState(RotationState.ALL) @@ -1028,7 +1081,7 @@ public class GTMachines { .tier(HV) .register(); - public static final MachineDefinition AUTO_MAINTENANCE_HATCH = REGISTRATE + public static final MachineEntry AUTO_MAINTENANCE_HATCH = REGISTRATE .machine("auto_maintenance_hatch", AutoMaintenanceHatchPartMachine::new) .rotationState(RotationState.ALL) .abilities(PartAbility.MAINTENANCE) @@ -1038,7 +1091,7 @@ public class GTMachines { .tier(HV) .register(); - public static final MachineDefinition[] ITEM_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] ITEM_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, "item_passthrough_hatch", (holder, tier) -> new ItemBusPartMachine(holder, tier, IO.BOTH), (tier, builder) -> builder @@ -1054,7 +1107,7 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] FLUID_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] FLUID_PASSTHROUGH_HATCH = registerTieredMachines(REGISTRATE, "fluid_passthrough_hatch", (holder, tier) -> new FluidHatchPartMachine(holder, tier, IO.BOTH, FluidHatchPartMachine.INITIAL_TANK_CAPACITY_1X, 1), @@ -1071,7 +1124,7 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition RESERVOIR_HATCH = REGISTRATE + public static final MachineEntry RESERVOIR_HATCH = REGISTRATE .machine("reservoir_hatch", ReservoirHatchPartMachine::new) .langValue("Reservoir Hatch") .tier(EV) @@ -1085,7 +1138,7 @@ public class GTMachines { .overlayTieredHullModel("reservoir_hatch") .register(); - public static final MachineDefinition[] DUAL_IMPORT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] DUAL_IMPORT_HATCH = registerTieredMachines(REGISTRATE, "dual_input_hatch", (holder, tier) -> new DualHatchPartMachine(holder, tier, IN), (tier, builder) -> builder @@ -1108,7 +1161,7 @@ public class GTMachines { .register(), DUAL_HATCH_TIERS); - public static final MachineDefinition[] DUAL_EXPORT_HATCH = registerTieredMachines(REGISTRATE, + public static final MachineEntry[] DUAL_EXPORT_HATCH = registerTieredMachines(REGISTRATE, "dual_output_hatch", (holder, tier) -> new DualHatchPartMachine(holder, tier, OUT), (tier, builder) -> builder @@ -1131,7 +1184,7 @@ public class GTMachines { .register(), DUAL_HATCH_TIERS); - public static final MachineDefinition[] DIODE = registerTieredMachines(REGISTRATE, "diode", + public static final MachineEntry[] DIODE = registerTieredMachines(REGISTRATE, "diode", DiodePartMachine::new, (tier, builder) -> builder .langValue("%s Diode".formatted(VNF[tier])) @@ -1150,7 +1203,8 @@ public class GTMachines { .register(), ELECTRIC_TIERS); - public static final MachineDefinition[] ROTOR_HOLDER = registerTieredMachines(REGISTRATE, "rotor_holder", + public static final MachineEntry[] ROTOR_HOLDER = registerTieredMachines(REGISTRATE, + "rotor_holder", RotorHolderPartMachine::new, (tier, builder) -> builder .langValue("%s Rotor Holder".formatted(VNF[tier])) @@ -1166,25 +1220,31 @@ public class GTMachines { .register(), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); - public static final MachineDefinition[] LASER_INPUT_HATCH_256 = registerLaserHatch(REGISTRATE, IN, 256, + public static final MachineEntry[] LASER_INPUT_HATCH_256 = registerLaserHatch(REGISTRATE, IN, + 256, PartAbility.INPUT_LASER); - public static final MachineDefinition[] LASER_OUTPUT_HATCH_256 = registerLaserHatch(REGISTRATE, OUT, 256, + public static final MachineEntry[] LASER_OUTPUT_HATCH_256 = registerLaserHatch(REGISTRATE, OUT, + 256, PartAbility.OUTPUT_LASER); - public static final MachineDefinition[] LASER_INPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, IN, 1024, + public static final MachineEntry[] LASER_INPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, IN, + 1024, PartAbility.INPUT_LASER); - public static final MachineDefinition[] LASER_OUTPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, OUT, 1024, + public static final MachineEntry[] LASER_OUTPUT_HATCH_1024 = registerLaserHatch(REGISTRATE, OUT, + 1024, PartAbility.OUTPUT_LASER); - public static final MachineDefinition[] LASER_INPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, IN, 4096, + public static final MachineEntry[] LASER_INPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, IN, + 4096, PartAbility.INPUT_LASER); - public static final MachineDefinition[] LASER_OUTPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, OUT, 4096, + public static final MachineEntry[] LASER_OUTPUT_HATCH_4096 = registerLaserHatch(REGISTRATE, OUT, + 4096, PartAbility.OUTPUT_LASER); - public static final MachineDefinition MONITOR = REGISTRATE.machine("monitor", MonitorPartMachine::new) + public static final MachineEntry MONITOR = REGISTRATE.machine("monitor", MonitorPartMachine::new) .rotationState(RotationState.ALL) .model(createOverlayCasingMachineModel(GTCEu.id("block/casings/solid/machine_casing_frost_proof"), GTCEu.id("block/machine/part/computer_monitor"))) .tier(MV) .register(); - public static final MachineDefinition ADVANCED_MONITOR = REGISTRATE + public static final MachineEntry ADVANCED_MONITOR = REGISTRATE .machine("advanced_monitor", AdvancedMonitorPartMachine::new) .rotationState(RotationState.ALL) .model(createOverlayCasingMachineModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), @@ -1193,7 +1253,7 @@ public class GTMachines { .allowExtendedFacing(true) .register(); - public static final MachineDefinition MUI_TEST = REGISTRATE + public static final MachineEntry MUI_TEST = REGISTRATE .machine("test_mui", TestMuiMachine::new) .rotationState(RotationState.ALL) .model(createOverlayCasingMachineModel(GTCEu.id("block/casings/solid/machine_casing_clean_stainless_steel"), diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java index 4d44549f7a3..51ae5c23c3b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.multiblock.MultiPredicate; import com.gregtechceu.gtceu.api.multiblock.Predicates; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.DynamicRenderHelper; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; @@ -54,7 +55,8 @@ public class GCYMMachines { public static void init() {} - public static final MachineDefinition[] PARALLEL_HATCH = registerTieredMachines(REGISTRATE, "parallel_hatch", + public static final MachineEntry[] PARALLEL_HATCH = registerTieredMachines(REGISTRATE, + "parallel_hatch", ParallelHatchPartMachine::new, (tier, builder) -> builder .langValue(switch (tier) { @@ -78,7 +80,7 @@ public static void init() {} .register(), IV, LuV, ZPM, UV); - public final static MultiblockMachineDefinition LARGE_MACERATION_TOWER = REGISTRATE + public static final MachineEntry LARGE_MACERATION_TOWER = REGISTRATE .multiblock("large_maceration_tower", LargeMacerationTowerMachine::new) .langValue("Large Maceration Tower") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -105,7 +107,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_maceration_tower")) .register(); - public final static MultiblockMachineDefinition LARGE_CHEMICAL_BATH = REGISTRATE + public static final MachineEntry LARGE_CHEMICAL_BATH = REGISTRATE .multiblock("large_chemical_bath", GTMachineInstanceFactories.LARGE_CHEM_BATH) .langValue("Large Chemical Bath") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -137,7 +139,7 @@ public static void init() {} .andThen(b -> b.addDynamicRenderer(DynamicRenderHelper::makeRecipeFluidAreaRender))) .register(); - public final static MultiblockMachineDefinition LARGE_CENTRIFUGE = REGISTRATE + public static final MachineEntry LARGE_CENTRIFUGE = REGISTRATE .multiblock("large_centrifuge", WorkableElectricMultiblockMachine::new) .langValue("Large Centrifugal Unit") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -165,7 +167,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_centrifuge")) .register(); - public final static MultiblockMachineDefinition LARGE_MIXER = REGISTRATE + public static final MachineEntry LARGE_MIXER = REGISTRATE .multiblock("large_mixer", GTMachineInstanceFactories.LARGE_MIXER) .langValue("Large Mixing Vessel") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -198,7 +200,7 @@ public static void init() {} .andThen(b -> b.addDynamicRenderer(DynamicRenderHelper::makeRecipeFluidAreaRender))) .register(); - public final static MultiblockMachineDefinition LARGE_ELECTROLYZER = REGISTRATE + public static final MachineEntry LARGE_ELECTROLYZER = REGISTRATE .multiblock("large_electrolyzer", WorkableElectricMultiblockMachine::new) .langValue("Large Electrolysis Chamber") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -223,7 +225,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_electrolyzer")) .register(); - public final static MultiblockMachineDefinition LARGE_ELECTROMAGNET = REGISTRATE + public static final MachineEntry LARGE_ELECTROMAGNET = REGISTRATE .multiblock("large_electromagnet", WorkableElectricMultiblockMachine::new) .langValue("Large Electromagnet") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -249,7 +251,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_electrolyzer")) .register(); - public final static MultiblockMachineDefinition LARGE_PACKER = REGISTRATE + public static final MachineEntry LARGE_PACKER = REGISTRATE .multiblock("large_packer", WorkableElectricMultiblockMachine::new) .langValue("Large Packaging Machine") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -276,7 +278,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_packer")) .register(); - public final static MultiblockMachineDefinition LARGE_ASSEMBLER = REGISTRATE + public static final MachineEntry LARGE_ASSEMBLER = REGISTRATE .multiblock("large_assembler", WorkableElectricMultiblockMachine::new) .langValue("Large Assembling Factory") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -308,7 +310,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_assembler")) .register(); - public final static MultiblockMachineDefinition LARGE_CIRCUIT_ASSEMBLER = REGISTRATE + public static final MachineEntry LARGE_CIRCUIT_ASSEMBLER = REGISTRATE .multiblock("large_circuit_assembler", WorkableElectricMultiblockMachine::new) .langValue("Large Circuit Assembling Facility") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -344,7 +346,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_circuit_assembler")) .register(); - public final static MultiblockMachineDefinition LARGE_ARC_SMELTER = REGISTRATE + public static final MachineEntry LARGE_ARC_SMELTER = REGISTRATE .multiblock("large_arc_smelter", WorkableElectricMultiblockMachine::new) .langValue("Large Arc Smelter") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -373,7 +375,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_arc_smelter")) .register(); - public final static MultiblockMachineDefinition LARGE_ENGRAVING_LASER = REGISTRATE + public static final MachineEntry LARGE_ENGRAVING_LASER = REGISTRATE .multiblock("large_engraving_laser", WorkableElectricMultiblockMachine::new) .langValue("Large Engraving Laser") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -405,7 +407,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_engraving_laser")) .register(); - public final static MultiblockMachineDefinition LARGE_SIFTING_FUNNEL = REGISTRATE + public static final MachineEntry LARGE_SIFTING_FUNNEL = REGISTRATE .multiblock("large_sifting_funnel", WorkableElectricMultiblockMachine::new) .langValue("Large Sifting Funnel") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -433,7 +435,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_sifting_funnel")) .register(); - public final static MultiblockMachineDefinition BLAST_ALLOY_SMELTER = REGISTRATE + public static final MachineEntry BLAST_ALLOY_SMELTER = REGISTRATE .multiblock("alloy_blast_smelter", CoilWorkableElectricMultiblockMachine::new) .langValue("Alloy Blast Smelter") .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", @@ -471,7 +473,7 @@ public static void init() {} IntSyncValue coilTemperature = syncManager.getOrCreateSyncHandler("coilTemperature", IntSyncValue.class, () -> new IntSyncValue(() -> coilMachine.getCoilType().getCoilTemperature())); IntSyncValue machineTier = syncManager.getOrCreateSyncHandler("machineTier", IntSyncValue.class, - () -> new IntSyncValue(() -> coilMachine.getTier())); + () -> new IntSyncValue(coilMachine::getTier)); return Collections.singletonList(Text .dynamic(() -> Component.translatable("gtceu.multiblock.blast_furnace.max_temperature", @@ -483,7 +485,7 @@ public static void init() {} }) .register(); - public final static MultiblockMachineDefinition LARGE_AUTOCLAVE = REGISTRATE + public static final MachineEntry LARGE_AUTOCLAVE = REGISTRATE .multiblock("large_autoclave", WorkableElectricMultiblockMachine::new) .langValue("Large Crystallization Chamber") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -510,7 +512,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_autoclave")) .register(); - public final static MultiblockMachineDefinition LARGE_MATERIAL_PRESS = REGISTRATE + public static final MachineEntry LARGE_MATERIAL_PRESS = REGISTRATE .multiblock("large_material_press", WorkableElectricMultiblockMachine::new) .langValue("Large Material Press") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -537,7 +539,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_material_press")) .register(); - public final static MultiblockMachineDefinition LARGE_BREWER = REGISTRATE + public static final MachineEntry LARGE_BREWER = REGISTRATE .multiblock("large_brewer", WorkableElectricMultiblockMachine::new) .langValue("Large Brewing Vat") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -567,7 +569,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_brewer")) .register(); - public final static MultiblockMachineDefinition LARGE_CUTTER = REGISTRATE + public static final MachineEntry LARGE_CUTTER = REGISTRATE .multiblock("large_cutter", WorkableElectricMultiblockMachine::new) .langValue("Large Cutting Saw") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -595,7 +597,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_cutter")) .register(); - public final static MultiblockMachineDefinition LARGE_DISTILLERY = REGISTRATE + public static final MachineEntry LARGE_DISTILLERY = REGISTRATE .multiblock("large_distillery", DistillationTowerMachine::new) .langValue("Large Fractionating Distillery") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -635,7 +637,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_distillery")) .register(); - public final static MultiblockMachineDefinition LARGE_EXTRACTOR = REGISTRATE + public static final MachineEntry LARGE_EXTRACTOR = REGISTRATE .multiblock("large_extractor", WorkableElectricMultiblockMachine::new) .langValue("Large Extraction Machine") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -660,7 +662,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_extractor")) .register(); - public final static MultiblockMachineDefinition LARGE_EXTRUDER = REGISTRATE + public static final MachineEntry LARGE_EXTRUDER = REGISTRATE .multiblock("large_extruder", WorkableElectricMultiblockMachine::new) .langValue("Large Extrusion Machine") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -689,7 +691,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_extruder")) .register(); - public final static MultiblockMachineDefinition LARGE_SOLIDIFIER = REGISTRATE + public static final MachineEntry LARGE_SOLIDIFIER = REGISTRATE .multiblock("large_solidifier", WorkableElectricMultiblockMachine::new) .langValue("Large Solidification Array") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -717,7 +719,7 @@ public static void init() {} GTCEu.id("block/multiblock/gcym/large_solidifier")) .register(); - public final static MultiblockMachineDefinition LARGE_WIREMILL = REGISTRATE + public static final MachineEntry LARGE_WIREMILL = REGISTRATE .multiblock("large_wiremill", WorkableElectricMultiblockMachine::new) .langValue("Large Wire Factory") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -743,7 +745,7 @@ public static void init() {} .register(); // spotless:off - public static final MultiblockMachineDefinition ROTARY_HEARTH_FURNACE = REGISTRATE + public static final MachineEntry ROTARY_HEARTH_FURNACE = REGISTRATE .multiblock("rotary_hearth_furnace", CoilWorkableElectricMultiblockMachine::new) .langValue("Rotary Hearth Furnace") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) @@ -800,7 +802,7 @@ public static void init() {} IntSyncValue coilTemperature = syncManager.getOrCreateSyncHandler("coilTemperature", IntSyncValue.class, () -> new IntSyncValue(() -> coilMachine.getCoilType().getCoilTemperature())); IntSyncValue machineTier = syncManager.getOrCreateSyncHandler("machineTier", IntSyncValue.class, - () -> new IntSyncValue(() -> coilMachine.getTier())); + () -> new IntSyncValue(coilMachine::getTier)); return Collections.singletonList(Text .dynamic(() -> Component.translatable("gtceu.multiblock.blast_furnace.max_temperature", @@ -812,7 +814,7 @@ public static void init() {} }) .register(); - public final static MultiblockMachineDefinition MEGA_VACUUM_FREEZER = REGISTRATE + public static final MachineEntry MEGA_VACUUM_FREEZER = REGISTRATE .multiblock("mega_vacuum_freezer", WorkableElectricMultiblockMachine::new) .langValue("Bulk Blast Chiller") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java index 58e86286821..434e9d79d30 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTAEMachines.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.integration.ae2.machine.*; import net.minecraft.network.chat.Component; @@ -16,7 +17,7 @@ @SuppressWarnings("unused") public class GTAEMachines { - public final static MachineDefinition ITEM_IMPORT_BUS_ME = REGISTRATE + public final static MachineEntry ITEM_IMPORT_BUS_ME = REGISTRATE .machine("me_input_bus", MEInputBusPartMachine::new) .langValue("ME Input Bus") .tier(EV) @@ -30,7 +31,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition STOCKING_IMPORT_BUS_ME = REGISTRATE + public final static MachineEntry STOCKING_IMPORT_BUS_ME = REGISTRATE .machine("me_stocking_input_bus", MEStockingBusPartMachine::new) .langValue("ME Stocking Input Bus") .tier(IV) @@ -46,7 +47,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition ITEM_EXPORT_BUS_ME = REGISTRATE + public final static MachineEntry ITEM_EXPORT_BUS_ME = REGISTRATE .machine("me_output_bus", MEOutputBusPartMachine::new) .langValue("ME Output Bus") .tier(EV) @@ -60,7 +61,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition FLUID_IMPORT_HATCH_ME = REGISTRATE + public final static MachineEntry FLUID_IMPORT_HATCH_ME = REGISTRATE .machine("me_input_hatch", MEInputHatchPartMachine::new) .langValue("ME Input Hatch") .tier(EV) @@ -74,7 +75,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition STOCKING_IMPORT_HATCH_ME = REGISTRATE + public final static MachineEntry STOCKING_IMPORT_HATCH_ME = REGISTRATE .machine("me_stocking_input_hatch", MEStockingHatchPartMachine::new) .langValue("ME Stocking Input Hatch") .tier(IV) @@ -90,7 +91,7 @@ public class GTAEMachines { Component.translatable("gtceu.part_sharing.enabled")) .register(); - public final static MachineDefinition FLUID_EXPORT_HATCH_ME = REGISTRATE + public final static MachineEntry FLUID_EXPORT_HATCH_ME = REGISTRATE .machine("me_output_hatch", MEOutputHatchPartMachine::new) .langValue("ME Output Hatch") .tier(EV) @@ -103,7 +104,7 @@ public class GTAEMachines { Component.translatable("gtceu.machine.me.export.tooltip"), Component.translatable("gtceu.part_sharing.enabled")) .register(); - public static final MachineDefinition ME_PATTERN_BUFFER = REGISTRATE + public static final MachineEntry ME_PATTERN_BUFFER = REGISTRATE .machine("me_pattern_buffer", MEPatternBufferPartMachine::new) .tier(LuV) .rotationState(RotationState.ALL) @@ -117,7 +118,7 @@ public class GTAEMachines { Component.translatable("block.gtceu.pattern_buffer.desc.2"), Component.translatable("gtceu.part_sharing.enabled")) .register(); - public static final MachineDefinition ME_PATTERN_BUFFER_PROXY = REGISTRATE + public static final MachineEntry ME_PATTERN_BUFFER_PROXY = REGISTRATE .machine("me_pattern_buffer_proxy", MEPatternBufferProxyPartMachine::new) .tier(LuV) .rotationState(RotationState.ALL) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java index a13350d7613..e9065009ce6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMachineUtils.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.data.machines; -import brachy.modularui.api.drawable.Text; import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; @@ -32,6 +31,7 @@ import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.*; import com.gregtechceu.gtceu.common.block.BoilerFireboxType; import com.gregtechceu.gtceu.common.data.GTMaterialItems; @@ -72,6 +72,7 @@ import net.neoforged.neoforge.fluids.FluidType; import net.neoforged.neoforge.fluids.SimpleFluidContent; +import brachy.modularui.api.drawable.Text; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.Int2IntFunction; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; @@ -130,71 +131,14 @@ public class GTMachineUtils { PartAbility.EXPORT_ITEMS, PartAbility.EXPORT_FLUIDS, }; - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - boolean hasPollutionDebuff, PanelFactory panelFactory) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .tankScalingFunction(tankScalingFunction) - .hasPollutionDebuff(hasPollutionDebuff) - .panelFactory(panelFactory) - .register(); - } - - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - PanelFactory panelFactory) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .panelFactory(panelFactory) - .tankScalingFunction(tankScalingFunction) - .register(); - } - - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, String name, - GTRecipeType recipeType, PanelFactory panelFactory) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .panelFactory(panelFactory) - .register(); - } - - /** - * @deprecated Use {@link SimpleMachineBuilder} - */ - @Deprecated(since = "8.0.0") - public static MachineDefinition[] registerSimpleMachines(GTRegistrate registrate, - String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - boolean hasPollutionDebuff, - PanelFactory panelFactory, - int... tiers) { - return new SimpleMachineBuilder(registrate, name, recipeType) - .tankScalingFunction(tankScalingFunction) - .hasPollutionDebuff(hasPollutionDebuff) - .panelFactory(panelFactory) - .tiers(tiers) - .register(); - } - - public static MachineDefinition[] registerTieredMachines(GTRegistrate registrate, - String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MachineDefinition> builder, - int... tiers) { - MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; + @SuppressWarnings("unchecked") + public static < + MACHINE extends MetaMachine> MachineEntry[] registerTieredMachines(GTRegistrate registrate, + String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MachineEntry> builder, + int... tiers) { + MachineEntry[] definitions = new MachineEntry[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate .machine(GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, @@ -206,25 +150,26 @@ public static MachineDefinition[] registerTieredMa } public static < - MACHINE extends MetaMachine> Pair registerSteamMachines(GTRegistrate registrate, - String name, - MachineInstanceFactory.Steam factory, - BiFunction, MachineDefinition> builder) { - MachineDefinition lowTier = builder.apply(false, + MACHINE extends MetaMachine> Pair, MachineEntry> registerSteamMachines(GTRegistrate registrate, + String name, + MachineInstanceFactory.Steam factory, + BiFunction, MachineEntry> builder) { + MachineEntry lowTier = builder.apply(false, registrate.machine("lp_%s".formatted(name), holder -> factory.buildMachine(holder, false)) .langValue("Low Pressure " + FormattingUtil.toEnglishName(name)) .tier(0)); - MachineDefinition highTier = builder.apply(true, + MachineEntry highTier = builder.apply(true, registrate.machine("hp_%s".formatted(name), holder -> factory.buildMachine(holder, true)) .langValue("High Pressure " + FormattingUtil.toEnglishName(name)) .tier(1)); return Pair.of(lowTier, highTier); } - public static MachineDefinition[] registerFluidHatches(GTRegistrate registrate, String name, String displayName, - String tooltip, - IO io, int initialCapacity, int slots, - int[] tiers, PartAbility... abilities) { + public static MachineEntry[] registerFluidHatches(GTRegistrate registrate, String name, + String displayName, + String tooltip, + IO io, int initialCapacity, int slots, + int[] tiers, PartAbility... abilities) { final String pipeOverlay; if (slots >= 9) { pipeOverlay = "overlay_pipe_9x"; @@ -260,8 +205,9 @@ public static MachineDefinition[] registerFluidHatches(GTRegistrate registrate, tiers); } - public static MachineDefinition[] registerTransformerMachines(GTRegistrate registrate, String langName, - int baseAmp) { + public static MachineEntry[] registerTransformerMachines(GTRegistrate registrate, + String langName, + int baseAmp) { return registerTieredMachines(registrate, "transformer_%da".formatted(baseAmp), (holder, tier) -> new TransformerMachine(holder, tier, baseAmp), (tier, builder) -> builder @@ -292,11 +238,11 @@ public static MachineDefinition[] registerTransformerMachines(GTRegistrate regis // UHV not needed, as a UV transformer transforms up to UHV } - public static MachineDefinition[] registerSimpleGenerator(GTRegistrate registrate, String name, - GTRecipeType recipeType, - Int2IntFunction tankScalingFunction, - float hazardStrengthPerOperation, - int... tiers) { + public static MachineEntry[] registerSimpleGenerator(GTRegistrate registrate, String name, + GTRecipeType recipeType, + Int2IntFunction tankScalingFunction, + float hazardStrengthPerOperation, + int... tiers) { return registerTieredMachines(registrate, name, (holder, tier) -> new SimpleGeneratorMachine(holder, tier, hazardStrengthPerOperation * tier, tankScalingFunction), @@ -315,9 +261,9 @@ public static MachineDefinition[] registerSimpleGenerator(GTRegistrate registrat tiers); } - public static Pair registerSimpleSteamMachines(GTRegistrate registrate, - String name, - GTRecipeType recipeType) { + public static Pair, MachineEntry> registerSimpleSteamMachines(GTRegistrate registrate, + String name, + GTRecipeType recipeType) { return registerSteamMachines(registrate, "steam_" + name, SimpleSteamMachine::new, (pressure, builder) -> builder .rotationState(RotationState.ALL) @@ -330,7 +276,8 @@ public static Pair registerSimpleSteamMach .register()); } - public static MachineDefinition[] registerBatteryBuffer(GTRegistrate registrate, int batterySlotSize) { + public static MachineEntry[] registerBatteryBuffer(GTRegistrate registrate, + int batterySlotSize) { return registerTieredMachines(registrate, "battery_buffer_" + batterySlotSize + "x", (holder, tier) -> new BatteryBufferMachine(holder, tier, batterySlotSize, AMPS_PER_BATTERY_NORMAL, batterySlotSize), @@ -353,7 +300,7 @@ public static MachineDefinition[] registerBatteryBuffer(GTRegistrate registrate, ALL_TIERS); } - public static MachineDefinition[] registerCharger(GTRegistrate registrate, int itemSlotSize) { + public static MachineEntry[] registerCharger(GTRegistrate registrate, int itemSlotSize) { return registerTieredMachines(registrate, "charger_" + itemSlotSize + "x", (holder, tier) -> new BatteryBufferMachine(holder, tier, itemSlotSize, BatteryBufferMachine.AMPS_PER_BATTERY_CHARGER, 0), @@ -374,14 +321,15 @@ public static MachineDefinition[] registerCharger(GTRegistrate registrate, int i ALL_TIERS); } - public static MachineDefinition[] registerConverter(GTRegistrate registrate, int amperage) { + public static MachineEntry[] registerConverter(GTRegistrate registrate, int amperage) { final var tab = registrate.creativeModeTab(); if (!ConfigHolder.INSTANCE.compat.energy.enableFEConverters) { registrate.creativeModeTab(() -> null); } - MachineDefinition[] converters = registerTieredMachines(registrate, amperage + "a_energy_converter", + MachineEntry[] converters = registerTieredMachines(registrate, + amperage + "a_energy_converter", (holder, tier) -> new ConverterMachine(holder, tier, amperage), (tier, builder) -> builder .rotationState(RotationState.ALL) @@ -408,8 +356,8 @@ public static MachineDefinition[] registerConverter(GTRegistrate registrate, int return converters; } - public static MachineDefinition[] registerLaserHatch(GTRegistrate registrate, IO io, int amperage, - PartAbility ability) { + public static MachineEntry[] registerLaserHatch(GTRegistrate registrate, IO io, int amperage, + PartAbility ability) { String name = io == IN ? "target" : "source"; return registerTieredMachines(registrate, amperage + "a_laser_" + name + "_hatch", (holder, tier) -> new LaserHatchPartMachine(holder, io, tier, amperage), (tier, builder) -> builder @@ -433,8 +381,9 @@ public static MachineDefinition[] registerLaserHatch(GTRegistrate registrate, IO HIGH_TIERS); } - public static MachineDefinition registerCrate(GTRegistrate registrate, Material material, int capacity, - int rowLength, String lang) { + public static MachineEntry registerCrate(GTRegistrate registrate, Material material, + int capacity, + int rowLength, String lang) { final boolean wooden = material.hasProperty(PropertyKey.WOOD); return registrate @@ -450,8 +399,8 @@ public static MachineDefinition registerCrate(GTRegistrate registrate, Material .register(); } - public static MachineDefinition registerDrum(GTRegistrate registrate, Material material, int capacity, - String lang) { + public static MachineEntry registerDrum(GTRegistrate registrate, Material material, int capacity, + String lang) { boolean wooden = material.hasProperty(PropertyKey.WOOD); var definition = registrate .machine(material.getName() + "_drum", info -> new DrumMachine(info, material, capacity)) @@ -471,13 +420,15 @@ public static MachineDefinition registerDrum(GTRegistrate registrate, Material m FormattingUtil.formatNumbers(capacity))) .paintingColor(wooden ? 0xFFFFFF : material.getMaterialRGB()) .item().color(() -> () -> (s, i) -> wooden ? 0xFFFFFF : material.getMaterialRGB()).build() + .onRegister(d -> DRUM_CAPACITY.put(d, capacity)) .register(); - DRUM_CAPACITY.put(definition, capacity); return definition; } - public static MachineDefinition[] registerQuantumTanks(GTRegistrate registrate, String name, int... tiers) { - MachineDefinition[] definitions = new MachineDefinition[GTValues.TIER_COUNT]; + @SuppressWarnings("unchecked") + public static MachineEntry[] registerQuantumTanks(GTRegistrate registrate, String name, + int... tiers) { + MachineEntry[] definitions = new MachineEntry[GTValues.TIER_COUNT]; for (int tier : tiers) { long maxAmount = 4000 * FluidType.BUCKET_VOLUME * (long) Math.pow(2, tier - 1); var register = registrate.machine( @@ -496,14 +447,15 @@ public static MachineDefinition[] registerQuantumTanks(GTRegistrate registrate, Component.translatable("gtceu.universal.tooltip.fluid_storage_capacity", FormattingUtil.formatNumbers(maxAmount))) .tier(tier) + .onRegister(d -> QuantumTankMachine.TANK_CAPACITY.put(d, maxAmount)) .register(); - QuantumTankMachine.TANK_CAPACITY.put(register, maxAmount); definitions[tier] = register; } return definitions; } - public static MachineDefinition[] registerQuantumChests(GTRegistrate registrate, String name, int... tiers) { + public static MachineEntry[] registerQuantumChests(GTRegistrate registrate, String name, + int... tiers) { return registerTieredMachines(registrate, name, (holder, tier) -> new QuantumChestMachine(holder, tier, tier == MAX ? Long.MAX_VALUE : 4_000_000 * (long) Math.pow(2, tier - 1)), @@ -529,12 +481,12 @@ public static MachineDefinition[] registerQuantumChests(GTRegistrate registrate, ////////////////////////////////////// // multi register helpers - public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate registrate, String name, - String displayName, int capacity, - Supplier casing, - MachineDefinition valve, - @Nullable PropertyFluidFilter filter, - BiConsumer, ResourceLocation> rendererSetup) { + public static MachineEntry registerMultiblockTank(GTRegistrate registrate, String name, + String displayName, int capacity, + Supplier casing, + MachineEntry valve, + @Nullable PropertyFluidFilter filter, + BiConsumer, ResourceLocation> rendererSetup) { MultiblockMachineBuilder builder = registrate .multiblock(name, holder -> new MultiblockTankMachine(holder, capacity, filter)) .langValue(displayName) @@ -559,9 +511,10 @@ public static MultiblockMachineDefinition registerMultiblockTank(GTRegistrate re return builder.register(); } - public static MachineDefinition registerTankValve(GTRegistrate registrate, String name, String displayName, - boolean isMetal, - BiConsumer, ResourceLocation> rendererSetup) { + public static MachineEntry registerTankValve(GTRegistrate registrate, String name, + String displayName, + boolean isMetal, + BiConsumer, ResourceLocation> rendererSetup) { MachineBuilder builder = registrate .machine(name, holder -> new TankValvePartMachine(holder, isMetal)) .langValue(displayName) @@ -572,13 +525,14 @@ public static MachineDefinition registerTankValve(GTRegistrate registrate, Strin return builder.register(); } + @SuppressWarnings("unchecked") public static < - MACHINE extends MultiblockControllerMachine> MultiblockMachineDefinition[] registerTieredMultis(GTRegistrate registrate, - String name, - MachineInstanceFactory.Tiered factory, - BiFunction, MultiblockMachineDefinition> builder, - int... tiers) { - MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[GTValues.TIER_COUNT]; + MACHINE extends MultiblockControllerMachine> MachineEntry[] registerTieredMultis(GTRegistrate registrate, + String name, + MachineInstanceFactory.Tiered factory, + BiFunction, MachineEntry> builder, + int... tiers) { + MachineEntry[] definitions = new MachineEntry[GTValues.TIER_COUNT]; for (int tier : tiers) { var register = registrate .multiblock(GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, @@ -589,12 +543,13 @@ MACHINE extends MultiblockControllerMachine> MultiblockMachineDefinition[] regis return definitions; } - public static MultiblockMachineDefinition registerLargeBoiler(GTRegistrate registrate, String name, - Supplier casing, - Supplier pipe, - Supplier fireBox, - ResourceLocation texture, BoilerFireboxType firebox, - int maxTemperature, int heatSpeed) { + public static MachineEntry registerLargeBoiler(GTRegistrate registrate, String name, + Supplier casing, + Supplier pipe, + Supplier fireBox, + ResourceLocation texture, + BoilerFireboxType firebox, + int maxTemperature, int heatSpeed) { // spotless:off return registrate .multiblock("%s_large_boiler".formatted(name), @@ -650,13 +605,13 @@ public static MultiblockMachineDefinition registerLargeBoiler(GTRegistrate regis // spotless:on } - public static MultiblockMachineDefinition registerLargeCombustionEngine(GTRegistrate registrate, - String name, int tier, - Supplier casing, - Supplier gear, - Supplier intake, - ResourceLocation casingTexture, - ResourceLocation overlayModel) { + public static MachineEntry registerLargeCombustionEngine(GTRegistrate registrate, + String name, int tier, + Supplier casing, + Supplier gear, + Supplier intake, + ResourceLocation casingTexture, + ResourceLocation overlayModel) { return registrate.multiblock(name, holder -> new LargeCombustionEngineMachine(holder, tier)) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.COMBUSTION_GENERATOR_FUELS) @@ -701,23 +656,25 @@ public static MultiblockMachineDefinition registerLargeCombustionEngine(GTRegist .register(); } - public static MultiblockMachineDefinition registerLargeTurbine(GTRegistrate registrate, - String name, int tier, GTRecipeType recipeType, - Supplier casing, - Supplier gear, - ResourceLocation casingTexture, - ResourceLocation overlayModel) { + public static MachineEntry registerLargeTurbine(GTRegistrate registrate, + String name, int tier, + GTRecipeType recipeType, + Supplier casing, + Supplier gear, + ResourceLocation casingTexture, + ResourceLocation overlayModel) { return registerLargeTurbine(registrate, name, tier, recipeType, casing, gear, casingTexture, overlayModel, true); } - public static MultiblockMachineDefinition registerLargeTurbine(GTRegistrate registrate, - String name, int tier, GTRecipeType recipeType, - Supplier casing, - Supplier gear, - ResourceLocation casingTexture, - ResourceLocation overlayModel, - boolean needsMuffler) { + public static MachineEntry registerLargeTurbine(GTRegistrate registrate, + String name, int tier, + GTRecipeType recipeType, + Supplier casing, + Supplier gear, + ResourceLocation casingTexture, + ResourceLocation overlayModel, + boolean needsMuffler) { return registrate.multiblock(name, holder -> new LargeTurbineMachine(holder, tier)) .rotationState(RotationState.ALL) .recipeType(recipeType) @@ -774,7 +731,8 @@ public static Component explosion() { public static Component environmentRequirement(Holder condition) { // Dynamic to avoid resolving the medical condition holder until the component is actually used. - return Text.dynamic(() -> Component.translatable("gtceu.recipe.environmental_hazard.reverse", condition.value().getTranslatableName())); + return Text.dynamic(() -> Component.translatable("gtceu.recipe.environmental_hazard.reverse", + condition.value().getTranslatableName())); } public static Component defaultEnvironmentRequirement() { @@ -856,7 +814,7 @@ public SimpleMachineBuilder tiers(int... tiers) { return this; } - public MachineDefinition[] register() { + public MachineEntry[] register() { if (panelFactory == null) { panelFactory = GTSingleblockMachinePanels.GENERAL_MACHINE; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java index 4da383fce7e..8427f870d25 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java @@ -16,6 +16,7 @@ import com.gregtechceu.gtceu.api.multiblock.MultiPredicate; import com.gregtechceu.gtceu.api.multiblock.Predicates; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.renderer.machine.DynamicRenderHelper; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.block.BoilerFireboxType; @@ -75,22 +76,26 @@ public class GTMultiMachines { ////////////////////////////////////// // ******* Multiblock *******// ////////////////////////////////////// - public static final MultiblockMachineDefinition LARGE_BOILER_BRONZE = registerLargeBoiler(REGISTRATE, "bronze", + public static final MachineEntry LARGE_BOILER_BRONZE = registerLargeBoiler(REGISTRATE, + "bronze", CASING_BRONZE_BRICKS, CASING_BRONZE_PIPE, FIREBOX_BRONZE, GTCEu.id("block/casings/solid/machine_casing_bronze_plated_bricks"), BoilerFireboxType.BRONZE_FIREBOX, ConfigHolder.INSTANCE.machines.largeBoilers.bronzeBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.bronzeBoilerHeatSpeed); - public static final MultiblockMachineDefinition LARGE_BOILER_STEEL = registerLargeBoiler(REGISTRATE, "steel", + public static final MachineEntry LARGE_BOILER_STEEL = registerLargeBoiler(REGISTRATE, + "steel", CASING_STEEL_SOLID, CASING_STEEL_PIPE, FIREBOX_STEEL, GTCEu.id("block/casings/solid/machine_casing_solid_steel"), BoilerFireboxType.STEEL_FIREBOX, ConfigHolder.INSTANCE.machines.largeBoilers.steelBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.steelBoilerHeatSpeed); - public static final MultiblockMachineDefinition LARGE_BOILER_TITANIUM = registerLargeBoiler(REGISTRATE, "titanium", + public static final MachineEntry LARGE_BOILER_TITANIUM = registerLargeBoiler( + REGISTRATE, "titanium", CASING_TITANIUM_STABLE, CASING_TITANIUM_PIPE, FIREBOX_TITANIUM, GTCEu.id("block/casings/solid/machine_casing_stable_titanium"), BoilerFireboxType.TITANIUM_FIREBOX, ConfigHolder.INSTANCE.machines.largeBoilers.titaniumBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.titaniumBoilerHeatSpeed); - public static final MultiblockMachineDefinition LARGE_BOILER_TUNGSTENSTEEL = registerLargeBoiler(REGISTRATE, + public static final MachineEntry LARGE_BOILER_TUNGSTENSTEEL = registerLargeBoiler( + REGISTRATE, "tungstensteel", CASING_TUNGSTENSTEEL_ROBUST, CASING_TUNGSTENSTEEL_PIPE, FIREBOX_TUNGSTENSTEEL, GTCEu.id("block/casings/solid/machine_casing_robust_tungstensteel"), @@ -98,7 +103,8 @@ public class GTMultiMachines { ConfigHolder.INSTANCE.machines.largeBoilers.tungstensteelBoilerMaxTemperature, ConfigHolder.INSTANCE.machines.largeBoilers.tungstensteelBoilerHeatSpeed); - public static final MultiblockMachineDefinition COKE_OVEN = REGISTRATE.multiblock("coke_oven", CokeOvenMachine::new) + public static final MachineEntry COKE_OVEN = REGISTRATE + .multiblock("coke_oven", CokeOvenMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.COKE_OVEN_RECIPES) .appearanceBlock(CASING_COKE_BRICKS) @@ -116,7 +122,7 @@ public class GTMultiMachines { .themeId((i) -> GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MultiblockMachineDefinition PRIMITIVE_BLAST_FURNACE = REGISTRATE + public static final MachineEntry PRIMITIVE_BLAST_FURNACE = REGISTRATE .multiblock("primitive_blast_furnace", PrimitiveBlastFurnaceMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.PRIMITIVE_BLAST_FURNACE_RECIPES) @@ -142,7 +148,7 @@ public class GTMultiMachines { .themeId((i) -> GTGuiTheme.PRIMITIVE.getId()) .register(); - public static final MultiblockMachineDefinition ELECTRIC_BLAST_FURNACE = REGISTRATE + public static final MachineEntry ELECTRIC_BLAST_FURNACE = REGISTRATE .multiblock("electric_blast_furnace", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.BLAST_RECIPES) @@ -188,7 +194,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition LARGE_CHEMICAL_REACTOR = REGISTRATE + public static final MachineEntry LARGE_CHEMICAL_REACTOR = REGISTRATE .multiblock("large_chemical_reactor", WorkableElectricMultiblockMachine::new) .conditionalTooltip(defaultEnvironmentRequirement(), ConfigHolder.INSTANCE.gameplay.environmentalHazards) @@ -216,7 +222,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/large_chemical_reactor")) .register(); - public static final MultiblockMachineDefinition IMPLOSION_COMPRESSOR = REGISTRATE + public static final MachineEntry IMPLOSION_COMPRESSOR = REGISTRATE .multiblock("implosion_compressor", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.IMPLOSION_RECIPES) @@ -236,7 +242,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/implosion_compressor")) .register(); - public static final MultiblockMachineDefinition PYROLYSE_OVEN = REGISTRATE + public static final MachineEntry PYROLYSE_OVEN = REGISTRATE .multiblock("pyrolyse_oven", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.PYROLYSE_RECIPES) @@ -273,7 +279,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition MULTI_SMELTER = REGISTRATE + public static final MachineEntry MULTI_SMELTER = REGISTRATE .multiblock("multi_smelter", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeTypes(GTRecipeTypes.FURNACE_RECIPES, GTRecipeTypes.ALLOY_SMELTER_RECIPES) @@ -318,7 +324,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition CRACKER = REGISTRATE + public static final MachineEntry CRACKER = REGISTRATE .multiblock("cracker", CoilWorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.CRACKING_RECIPES) @@ -353,7 +359,7 @@ public class GTMultiMachines { }) .register(); - public static final MultiblockMachineDefinition DISTILLATION_TOWER = REGISTRATE + public static final MachineEntry DISTILLATION_TOWER = REGISTRATE .multiblock("distillation_tower", DistillationTowerMachine::new) .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.DISTILLATION_RECIPES) @@ -392,7 +398,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/distillation_tower")) .register(); - public static final MultiblockMachineDefinition VACUUM_FREEZER = REGISTRATE + public static final MachineEntry VACUUM_FREEZER = REGISTRATE .multiblock("vacuum_freezer", WorkableElectricMultiblockMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.VACUUM_RECIPES) @@ -412,7 +418,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/vacuum_freezer")) .register(); - public static final MultiblockMachineDefinition ASSEMBLY_LINE = REGISTRATE + public static final MachineEntry ASSEMBLY_LINE = REGISTRATE .multiblock("assembly_line", AssemblyLineMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.ASSEMBLY_LINE_RECIPES) @@ -423,7 +429,7 @@ public class GTMultiMachines { .slice("FIF", "RTR", "SAG", "#Y#") .sliceRepeatable(3, 15, "FIF", "RTR", "DAG", "#Y#") .slice("FOF", "RTR", "DAG", "#Y#") - .where('S', Predicates.controller(blocks(definition.getBlock()))) + .where('S', Predicates.controller(definition)) .where('F', blocks(CASING_STEEL_SOLID.get()) .and(!ConfigHolder.INSTANCE.machines.orderedAssemblyLineFluids ? Predicates.abilities(PartAbility.IMPORT_FLUIDS_1X, @@ -451,7 +457,7 @@ public class GTMultiMachines { .hasBER(true) .register(); - public static final MultiblockMachineDefinition PRIMITIVE_PUMP = REGISTRATE + public static final MachineEntry PRIMITIVE_PUMP = REGISTRATE .multiblock("primitive_pump", PrimitivePumpMachine::new) .rotationState(RotationState.NON_Y_AXIS) .appearanceBlock(CASING_PUMP_DECK) @@ -485,7 +491,7 @@ public class GTMultiMachines { })) .register(); - public static final MultiblockMachineDefinition STEAM_GRINDER = REGISTRATE + public static final MachineEntry STEAM_GRINDER = REGISTRATE .multiblock("steam_grinder", SteamParallelMultiblockMachine::new) .rotationState(RotationState.ALL) .appearanceBlock(CASING_BRONZE_BRICKS) @@ -509,7 +515,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/steam_grinder")) .register(); - public static final MultiblockMachineDefinition STEAM_OVEN = REGISTRATE + public static final MachineEntry STEAM_OVEN = REGISTRATE .multiblock("steam_oven", SteamParallelMultiblockMachine::new) .rotationState(RotationState.ALL) .appearanceBlock(CASING_BRONZE_BRICKS) @@ -539,7 +545,7 @@ public class GTMultiMachines { BoilerFireboxType.BRONZE_FIREBOX, CASING_BRONZE_BRICKS)))) .register(); - public static final MultiblockMachineDefinition[] FUSION_REACTOR = registerTieredMultis(REGISTRATE, + public static final MachineEntry[] FUSION_REACTOR = registerTieredMultis(REGISTRATE, "fusion_reactor", FusionReactorMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) @@ -593,7 +599,8 @@ public class GTMultiMachines { .register(), LuV, ZPM, UV); - public static final MultiblockMachineDefinition[] FLUID_DRILLING_RIG = registerTieredMultis(REGISTRATE, + public static final MachineEntry[] FLUID_DRILLING_RIG = registerTieredMultis( + REGISTRATE, "fluid_drilling_rig", FluidDrillMachine::new, (tier, builder) -> builder .rotationState(RotationState.ALL) .langValue("%s Fluid Drilling Rig %s".formatted(VLVH[tier], VLVT[tier])) @@ -626,7 +633,8 @@ public class GTMultiMachines { .register(), MV, HV, EV); - public static final MultiblockMachineDefinition[] LARGE_MINER = registerTieredMultis(REGISTRATE, "large_miner", + public static final MachineEntry[] LARGE_MINER = registerTieredMultis(REGISTRATE, + "large_miner", (holder, tier) -> new LargeMinerMachine(holder, tier, 64 / tier, 2 * tier - 5, tier, 8 - (tier - 5)), (tier, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) @@ -685,7 +693,7 @@ public class GTMultiMachines { .register(), EV, IV, LuV); - public static final MultiblockMachineDefinition CLEANROOM = REGISTRATE + public static final MachineEntry CLEANROOM = REGISTRATE .multiblock("cleanroom", CleanroomMachine::new) .rotationState(RotationState.NONE) .recipeType(DUMMY_RECIPES) @@ -720,20 +728,21 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/cleanroom")) .register(); - public static final MultiblockMachineDefinition LARGE_COMBUSTION_ENGINE = registerLargeCombustionEngine(REGISTRATE, + public static final MachineEntry LARGE_COMBUSTION_ENGINE = registerLargeCombustionEngine( + REGISTRATE, "large_combustion_engine", EV, CASING_TITANIUM_STABLE, CASING_TITANIUM_GEARBOX, CASING_ENGINE_INTAKE, GTCEu.id("block/casings/solid/machine_casing_stable_titanium"), GTCEu.id("block/multiblock/generator/large_combustion_engine")); - public static final MultiblockMachineDefinition EXTREME_COMBUSTION_ENGINE = registerLargeCombustionEngine( + public static final MachineEntry EXTREME_COMBUSTION_ENGINE = registerLargeCombustionEngine( REGISTRATE, "extreme_combustion_engine", IV, CASING_TUNGSTENSTEEL_ROBUST, CASING_TUNGSTENSTEEL_GEARBOX, CASING_EXTREME_ENGINE_INTAKE, GTCEu.id("block/casings/solid/machine_casing_robust_tungstensteel"), GTCEu.id("block/multiblock/generator/extreme_combustion_engine")); - public static final MultiblockMachineDefinition LARGE_STEAM_TURBINE = registerLargeTurbine(REGISTRATE, + public static final MachineEntry LARGE_STEAM_TURBINE = registerLargeTurbine(REGISTRATE, "steam_large_turbine", HV, GTRecipeTypes.STEAM_TURBINE_FUELS, @@ -742,7 +751,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/generator/large_steam_turbine"), false); - public static final MultiblockMachineDefinition LARGE_GAS_TURBINE = registerLargeTurbine(REGISTRATE, + public static final MachineEntry LARGE_GAS_TURBINE = registerLargeTurbine(REGISTRATE, "gas_large_turbine", EV, GTRecipeTypes.GAS_TURBINE_FUELS, @@ -751,7 +760,8 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/generator/large_gas_turbine"), true); - public static final MultiblockMachineDefinition LARGE_PLASMA_TURBINE = registerLargeTurbine(REGISTRATE, + public static final MachineEntry LARGE_PLASMA_TURBINE = registerLargeTurbine( + REGISTRATE, "plasma_large_turbine", IV, GTRecipeTypes.PLASMA_GENERATOR_FUELS, @@ -760,7 +770,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/generator/large_plasma_turbine"), false); - public static final MultiblockMachineDefinition ACTIVE_TRANSFORMER = REGISTRATE + public static final MachineEntry ACTIVE_TRANSFORMER = REGISTRATE .multiblock("active_transformer", ActiveTransformerMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.DUMMY_RECIPES) @@ -785,7 +795,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/data_bank")) .register(); - public static final MultiblockMachineDefinition POWER_SUBSTATION = REGISTRATE + public static final MachineEntry POWER_SUBSTATION = REGISTRATE .multiblock("power_substation", PowerSubstationMachine::new) .rotationState(RotationState.ALL) .recipeType(GTRecipeTypes.DUMMY_RECIPES) @@ -825,7 +835,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/power_substation")) .register(); - public static final MultiblockMachineDefinition CHARCOAL_PILE_IGNITER = REGISTRATE + public static final MachineEntry CHARCOAL_PILE_IGNITER = REGISTRATE .multiblock("charcoal_pile_igniter", CharcoalPileIgniterMachine::new) .rotationState(RotationState.NONE) .recipeType(DUMMY_RECIPES) @@ -841,7 +851,7 @@ public class GTMultiMachines { GTCEu.id("block/multiblock/charcoal_pile_igniter")) .register(); - public static MultiblockMachineDefinition[] BEDROCK_ORE_MINER = registerTieredMultis(REGISTRATE, + public static final MachineEntry[] BEDROCK_ORE_MINER = registerTieredMultis(REGISTRATE, "bedrock_ore_miner", BedrockOreMinerMachine::new, (tier, builder) -> builder .rotationState(RotationState.NON_Y_AXIS) .langValue("%s Bedrock Ore Miner %s".formatted(VLVH[tier], VLVT[tier])) @@ -878,38 +888,41 @@ public class GTMultiMachines { MV, HV, EV); // Multiblock Tanks - public static final MachineDefinition WOODEN_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, + public static final MachineEntry WOODEN_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, "wooden_tank_valve", "Wooden Tank Valve", false, (builder, overlay) -> builder.sidedWorkableCasingModel(GTCEu.id("block/casings/wood_wall"), overlay)); - public static final MultiblockMachineDefinition WOODEN_MULTIBLOCK_TANK = registerMultiblockTank(REGISTRATE, + public static final MachineEntry WOODEN_MULTIBLOCK_TANK = registerMultiblockTank( + REGISTRATE, "wooden_multiblock_tank", "Wooden Multiblock Tank", 250 * 1000, CASING_WOOD_WALL, WOODEN_TANK_VALVE, new PropertyFluidFilter(340, false, false, false, false), (builder, overlay) -> builder.sidedWorkableCasingModel(GTCEu.id("block/casings/wood_wall"), overlay)); - public static final MachineDefinition BRONZE_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, + public static final MachineEntry BRONZE_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, "bronze_tank_valve", "Bronze Tank Valve", true, (builder, overlay) -> builder .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_bronze_plated_bricks"), overlay)); - public static final MultiblockMachineDefinition BRONZE_MULTIBLOCK_TANK = registerMultiblockTank(REGISTRATE, + public static final MachineEntry BRONZE_MULTIBLOCK_TANK = registerMultiblockTank( + REGISTRATE, "bronze_multiblock_tank", "Bronze Multiblock Tank", 500 * 1000, CASING_BRONZE_BRICKS, BRONZE_TANK_VALVE, new PropertyFluidFilter(1696, true, false, false, false), (builder, overlay) -> builder .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_bronze_plated_bricks"), overlay)); - public static final MachineDefinition STEEL_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, + public static final MachineEntry STEEL_TANK_VALVE = GTMachineUtils.registerTankValve(REGISTRATE, "steel_tank_valve", "Steel Tank Valve", true, (builder, overlay) -> builder.workableCasingModel( GTCEu.id("block/casings/solid/machine_casing_solid_steel"), overlay)); - public static final MultiblockMachineDefinition STEEL_MULTIBLOCK_TANK = registerMultiblockTank(REGISTRATE, + public static final MachineEntry STEEL_MULTIBLOCK_TANK = registerMultiblockTank( + REGISTRATE, "steel_multiblock_tank", "Steel Multiblock Tank", 1000 * 1000, CASING_STEEL_SOLID, STEEL_TANK_VALVE, null, (builder, overlay) -> builder.workableCasingModel( GTCEu.id("block/casings/solid/machine_casing_solid_steel"), overlay)); - public static final MultiblockMachineDefinition CENTRAL_MONITOR = REGISTRATE + public static final MachineEntry CENTRAL_MONITOR = REGISTRATE .multiblock("central_monitor", CentralMonitorMachine::new) .rotationState(RotationState.ALL) .recipeType(DUMMY_RECIPES) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java index a3bf02a1c22..7d6b04d1170 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTResearchMachines.java @@ -12,6 +12,7 @@ import com.gregtechceu.gtceu.api.machine.trait.recipe.RecipeLogic; import com.gregtechceu.gtceu.api.multiblock.pattern.MultiblockPatternBuilder; import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; @@ -50,7 +51,7 @@ @ParametersAreNonnullByDefault public class GTResearchMachines { - public static final MultiblockMachineDefinition RESEARCH_STATION = REGISTRATE + public static final MachineEntry RESEARCH_STATION = REGISTRATE .multiblock("research_station", ResearchStationMachine::new) .rotationState(RotationState.NON_Y_AXIS) .recipeType(GTRecipeTypes.RESEARCH_STATION_RECIPES) @@ -64,7 +65,7 @@ public class GTResearchMachines { .slice(" X ", "XAX", "---", "---", "---", "XAX", " X ") .slice(" X ", "XAX", "-A-", "-H-", "-A-", "XAX", " X ") .slice(" ", "XXX", "---", "---", "---", "XXX", " ") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('X', blocks(COMPUTER_CASING.get())) .where(' ', any()) .where('-', air()) @@ -80,7 +81,8 @@ public class GTResearchMachines { GTCEu.id("block/multiblock/research_station")) .register(); - public static final MachineDefinition OBJECT_HOLDER = REGISTRATE.machine("object_holder", ObjectHolderMachine::new) + public static final MachineEntry OBJECT_HOLDER = REGISTRATE + .machine("object_holder", ObjectHolderMachine::new) .langValue("Object Holder") .tier(ZPM) .rotationState(RotationState.ALL) @@ -91,7 +93,8 @@ public class GTResearchMachines { .andThen((ctx, prov, model) -> model.addReplaceableTextures("bottom", "top", "side"))) .register(); - public static final MultiblockMachineDefinition DATA_BANK = REGISTRATE.multiblock("data_bank", DataBankMachine::new) + public static final MachineEntry DATA_BANK = REGISTRATE + .multiblock("data_bank", DataBankMachine::new) .langValue("Data Bank") .rotationState(RotationState.NON_Y_AXIS) .appearanceBlock(COMPUTER_CASING) @@ -107,7 +110,7 @@ public class GTResearchMachines { .slice("XDDDX", "XDDDX", "XDDDX") .slice("XDDDX", "XAAAX", "XDDDX") .slice("XCCCX", "XCSCX", "XCCCX") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('X', blocks(COMPUTER_HEAT_VENT.get())) .where('D', blocks(COMPUTER_CASING.get()).setMinGlobalLimited(3) .and(abilities(PartAbility.DATA_ACCESS).setPreviewCount(3)) @@ -122,7 +125,7 @@ public class GTResearchMachines { GTCEu.id("block/multiblock/data_bank")) .register(); - public static final MultiblockMachineDefinition NETWORK_SWITCH = REGISTRATE + public static final MachineEntry NETWORK_SWITCH = REGISTRATE .multiblock("network_switch", NetworkSwitchMachine::new) .langValue("Network Switch") .rotationState(RotationState.NON_Y_AXIS) @@ -137,7 +140,7 @@ public class GTResearchMachines { .slice("XXX", "XXX", "XXX") .slice("XXX", "XAX", "XXX") .slice("XXX", "XSX", "XXX") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('A', blocks(ADVANCED_COMPUTER_CASING.get())) .where('X', blocks(COMPUTER_CASING.get()).setMinGlobalLimited(7) .and(abilities(PartAbility.INPUT_ENERGY).setMinGlobalLimited(1).setMaxGlobalLimited(2, 1)) @@ -149,7 +152,7 @@ public class GTResearchMachines { GTCEu.id("block/multiblock/network_switch")) .register(); - public static final MultiblockMachineDefinition HIGH_PERFORMANCE_COMPUTING_ARRAY = REGISTRATE + public static final MachineEntry HIGH_PERFORMANCE_COMPUTING_ARRAY = REGISTRATE .multiblock("high_performance_computation_array", HPCAMachine::new) .langValue("High Performance Computation Array (HPCA)") .rotationState(RotationState.NON_Y_AXIS) @@ -164,7 +167,7 @@ public class GTResearchMachines { .slice("VA", "XV", "XV", "XV", "VA") .slice("VA", "XV", "XV", "XV", "VA") .slice("SA", "CC", "CC", "CC", "AA") - .where('S', controller(blocks(definition.getBlock()))) + .where('S', controller(definition)) .where('A', blocks(ADVANCED_COMPUTER_CASING.get())) .where('V', blocks(COMPUTER_HEAT_VENT.get())) .where('X', abilities(PartAbility.HPCA_COMPONENT)) @@ -182,35 +185,35 @@ public class GTResearchMachines { // ******** MULTIBLOCK PARTS ********// //////////////////////////////////////////// - public static final MachineDefinition COMPUTATION_HATCH_TRANSMITTER = registerDataHatch( + public static final MachineEntry COMPUTATION_HATCH_TRANSMITTER = registerDataHatch( "computation_transmitter_hatch", "Computation Data Transmission Hatch", ZPM, (holder) -> new OpticalComputationHatchMachine(holder, true), "computation_data_hatch", PartAbility.COMPUTATION_DATA_TRANSMISSION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition COMPUTATION_HATCH_RECEIVER = registerDataHatch( + public static final MachineEntry COMPUTATION_HATCH_RECEIVER = registerDataHatch( "computation_receiver_hatch", "Computation Data Reception Hatch", ZPM, (holder) -> new OpticalComputationHatchMachine(holder, false), "computation_data_hatch", PartAbility.COMPUTATION_DATA_RECEPTION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition DATA_HATCH_TRANSMITTER = registerDataHatch( + public static final MachineEntry DATA_HATCH_TRANSMITTER = registerDataHatch( "data_transmitter_hatch", "Optical Data Transmission Hatch", LuV, (holder) -> new OpticalDataHatchMachine(holder, true), "optical_data_hatch", PartAbility.OPTICAL_DATA_TRANSMISSION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition DATA_HATCH_RECEIVER = registerDataHatch( + public static final MachineEntry DATA_HATCH_RECEIVER = registerDataHatch( "data_receiver_hatch", "Optical Data Reception Hatch", LuV, (holder) -> new OpticalDataHatchMachine(holder, false), "optical_data_hatch", PartAbility.OPTICAL_DATA_RECEPTION) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition BASIC_DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry BASIC_DATA_ACCESS_HATCH = REGISTRATE .machine("basic_data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, HV, false)) .langValue("Basic Data Access Hatch") .tier(HV) @@ -222,7 +225,7 @@ public class GTResearchMachines { .overlayTieredHullModel("data_access_hatch") .register(); - public static final MachineDefinition DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry DATA_ACCESS_HATCH = REGISTRATE .machine("data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, EV, false)) .langValue("Data Access Hatch") .tier(EV) @@ -234,7 +237,7 @@ public class GTResearchMachines { .overlayTieredHullModel("data_access_hatch") .register(); - public static final MachineDefinition ADVANCED_DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry ADVANCED_DATA_ACCESS_HATCH = REGISTRATE .machine("advanced_data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, LuV, false)) .langValue("Advanced Data Access Hatch") .tier(LuV) @@ -246,7 +249,7 @@ public class GTResearchMachines { .overlayTieredHullModel("data_access_hatch") .register(); - public static final MachineDefinition CREATIVE_DATA_ACCESS_HATCH = REGISTRATE + public static final MachineEntry CREATIVE_DATA_ACCESS_HATCH = REGISTRATE .machine("creative_data_access_hatch", (holder) -> new DataAccessHatchMachine(holder, MAX, true)) .langValue("Creative Data Access Hatch") .tier(MAX) @@ -269,13 +272,13 @@ public class GTResearchMachines { .add(Component.translatable("gtceu.machine.hpca.component_type.damaged") .withStyle(style -> style.withColor(TooltipHelper.BLINKING_ORANGE.getCurrent()))); - public static final MachineDefinition HPCA_EMPTY_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_EMPTY_COMPONENT = registerHPCAPart( "hpca_empty_component", "Empty HPCA Component", GTMachineInstanceFactories.HPCA_EMPTY, "empty", false) .tooltips(Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition HPCA_COMPUTATION_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_COMPUTATION_COMPONENT = registerHPCAPart( "hpca_computation_component", "HPCA Computation Component", GTMachineInstanceFactories.HPCA_COMPUTATION, "computation", false) .tooltips( @@ -286,7 +289,7 @@ public class GTResearchMachines { Component.translatable("gtceu.part_sharing.disabled")) .tooltipBuilder(OVERHEAT_TOOLTIPS) .register(); - public static final MachineDefinition HPCA_ADVANCED_COMPUTATION_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_ADVANCED_COMPUTATION_COMPONENT = registerHPCAPart( "hpca_advanced_computation_component", "HPCA Advanced Computation Component", GTMachineInstanceFactories.HPCA_COMPUTATION_ADVANCED, "advanced_computation", true) .tooltips( @@ -297,14 +300,14 @@ public class GTResearchMachines { Component.translatable("gtceu.part_sharing.disabled")) .tooltipBuilder(OVERHEAT_TOOLTIPS) .register(); - public static final MachineDefinition HPCA_HEAT_SINK_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_HEAT_SINK_COMPONENT = registerHPCAPart( "hpca_heat_sink_component", "HPCA Heat Sink Component", GTMachineInstanceFactories.HPCA_HEAT_SINK, "heat_sink", false) .tooltips(Component.translatable("gtceu.machine.hpca.component_type.cooler_passive"), Component.translatable("gtceu.machine.hpca.component_type.cooler_cooling", 1), Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition HPCA_ACTIVE_COOLER_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_ACTIVE_COOLER_COMPONENT = registerHPCAPart( "hpca_active_cooler_component", "HPCA Active Cooling Component", GTMachineInstanceFactories.HPCA_COOLER_ADVANCED, "active_cooler", true) .tooltips(Component.translatable("gtceu.machine.hpca.component_general.max_eut", GTValues.VA[GTValues.IV]), @@ -314,7 +317,7 @@ public class GTResearchMachines { Component.translatable("gtceu.machine.hpca.component_type.cooler_cooling", 2), Component.translatable("gtceu.part_sharing.disabled")) .register(); - public static final MachineDefinition HPCA_BRIDGE_COMPONENT = registerHPCAPart( + public static final MachineEntry HPCA_BRIDGE_COMPONENT = registerHPCAPart( "hpca_bridge_component", "HPCA Bridge Component", GTMachineInstanceFactories.HPCA_BRIDGE, "bridge", false) .tooltips(Component.translatable("gtceu.machine.hpca.component_type.bridge"), diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java index dc6fc000ccf..e95592bca86 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/DualHatchPartMachine.java @@ -136,9 +136,9 @@ public boolean swapIO() { MachineDefinition newDefinition = null; if (io == IO.IN) { - newDefinition = GTMachines.DUAL_EXPORT_HATCH[this.getTier()]; + newDefinition = GTMachines.DUAL_EXPORT_HATCH[this.getTier()].value(); } else if (io == IO.OUT) { - newDefinition = GTMachines.DUAL_IMPORT_HATCH[this.getTier()]; + newDefinition = GTMachines.DUAL_IMPORT_HATCH[this.getTier()].value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java index bcf468dc184..2ff4534f9b4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java @@ -204,13 +204,13 @@ public boolean swapIO() { MachineDefinition newDefinition = null; if (io == IO.IN) { - if (this.slots == 1) newDefinition = GTMachines.FLUID_EXPORT_HATCH[this.getTier()]; - else if (this.slots == 4) newDefinition = GTMachines.FLUID_EXPORT_HATCH_4X[this.getTier()]; - else if (this.slots == 9) newDefinition = GTMachines.FLUID_EXPORT_HATCH_9X[this.getTier()]; + if (this.slots == 1) newDefinition = GTMachines.FLUID_EXPORT_HATCH[this.getTier()].value(); + else if (this.slots == 4) newDefinition = GTMachines.FLUID_EXPORT_HATCH_4X[this.getTier()].value(); + else if (this.slots == 9) newDefinition = GTMachines.FLUID_EXPORT_HATCH_9X[this.getTier()].value(); } else if (io == IO.OUT) { - if (this.slots == 1) newDefinition = GTMachines.FLUID_IMPORT_HATCH[this.getTier()]; - else if (this.slots == 4) newDefinition = GTMachines.FLUID_IMPORT_HATCH_4X[this.getTier()]; - else if (this.slots == 9) newDefinition = GTMachines.FLUID_IMPORT_HATCH_9X[this.getTier()]; + if (this.slots == 1) newDefinition = GTMachines.FLUID_IMPORT_HATCH[this.getTier()].value(); + else if (this.slots == 4) newDefinition = GTMachines.FLUID_IMPORT_HATCH_4X[this.getTier()].value(); + else if (this.slots == 9) newDefinition = GTMachines.FLUID_IMPORT_HATCH_9X[this.getTier()].value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java index 3fb59e7d275..5f63ddd168a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/ItemBusPartMachine.java @@ -221,9 +221,9 @@ public boolean swapIO() { BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { - newDefinition = GTMachines.ITEM_EXPORT_BUS[this.getTier()]; + newDefinition = GTMachines.ITEM_EXPORT_BUS[this.getTier()].value(); } else if (io == IO.OUT) { - newDefinition = GTMachines.ITEM_IMPORT_BUS[this.getTier()]; + newDefinition = GTMachines.ITEM_IMPORT_BUS[this.getTier()].value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java index c0075572bc8..0bfd5f89402 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/SteamItemBusPartMachine.java @@ -20,9 +20,9 @@ public boolean swapIO() { BlockPos blockPos = getBlockPos(); MachineDefinition newDefinition = null; if (io == IO.IN) { - newDefinition = GTMachines.STEAM_EXPORT_BUS; + newDefinition = GTMachines.STEAM_EXPORT_BUS.value(); } else if (io == IO.OUT) { - newDefinition = GTMachines.STEAM_IMPORT_BUS; + newDefinition = GTMachines.STEAM_IMPORT_BUS.value(); } if (newDefinition == null) return false; diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java b/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java index a617403ec80..a98e66b7267 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/factory/CentralMonitorUIFactory.java @@ -136,7 +136,7 @@ public ModularPanel buildUIFunction(PosGuiData data, PanelSyncManager syncMan .draggable(true) .padding(5) .excludeAreaInRecipeViewer() - .child(GTMuiWidgets.createTitleBar(GTMultiMachines.CENTRAL_MONITOR, 176)) + .child(GTMuiWidgets.createTitleBar(GTMultiMachines.CENTRAL_MONITOR.value(), 176)) .child(new Flow(GuiAxis.Y) .heightRel(1) .widthRel(1) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java index 4328cf8b804..17e727b6ed6 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/GTRecipeBuilder.java @@ -303,7 +303,7 @@ public GTRecipeBuilder outputCWU(int cwu) { public GTRecipeBuilder inputItems(Object input) { return switch (input) { - case Item item -> inputItems(item); + case ItemLike item -> inputItems(item); case Supplier supplier when supplier.get() instanceof ItemLike item -> inputItems(item.asItem()); case ItemStack stack -> inputItems(stack); case Ingredient ingredient -> inputItems(ingredient); @@ -327,7 +327,7 @@ public GTRecipeBuilder inputItems(Object input) { public GTRecipeBuilder inputItems(Object input, int count) { return switch (input) { - case Item item -> inputItems(item, count); + case ItemLike item -> inputItems(item, count); case Supplier supplier when supplier.get() instanceof ItemLike item -> inputItems(item.asItem(), count); case ItemStack stack -> inputItems(stack.copyWithCount(count)); case Ingredient ingredient -> inputItems(ingredient, count); @@ -426,22 +426,14 @@ public GTRecipeBuilder inputItems(TagKey tag) { return inputItems(tag, 1); } - public GTRecipeBuilder inputItems(Item input, int amount) { + public GTRecipeBuilder inputItems(ItemLike input, int amount) { return inputItems(new ItemStack(input, amount)); } - public GTRecipeBuilder inputItems(Item input) { + public GTRecipeBuilder inputItems(ItemLike input) { return inputItems(input, 1); } - public GTRecipeBuilder inputItems(Supplier input) { - return inputItems(input.get()); - } - - public GTRecipeBuilder inputItems(Supplier input, int amount) { - return inputItems(input.get(), amount); - } - public GTRecipeBuilder inputItems(TagPrefix orePrefix, Material material) { return inputItems(orePrefix, material, 1); } @@ -525,7 +517,7 @@ public GTRecipeBuilder inputItemsRanged(MachineDefinition machine, IntProvider i public GTRecipeBuilder outputItems(Object output) { return switch (output) { - case Item item -> outputItems(item); + case ItemLike item -> outputItems(item); case Ingredient ingredient -> outputItems(ingredient); case Supplier supplier when supplier.get() instanceof ItemLike item -> outputItems(item.asItem()); case ItemStack stack -> outputItems(stack); @@ -545,7 +537,7 @@ public GTRecipeBuilder outputItems(Object output) { public GTRecipeBuilder outputItems(Object output, int count) { return switch (output) { - case Item item -> outputItems(item, count); + case ItemLike item -> outputItems(item, count); case Ingredient ingredient -> outputItems(ingredient, count); case Supplier supplier when supplier.get() instanceof ItemLike item -> outputItems(item.asItem(), count); case ItemStack stack -> outputItems(stack.copyWithCount(count)); @@ -591,22 +583,14 @@ public GTRecipeBuilder outputItems(ItemStack... outputs) { return output(ItemRecipeCapability.CAP, ingredients.toArray(SizedIngredient[]::new)); } - public GTRecipeBuilder outputItems(Item output, int amount) { + public GTRecipeBuilder outputItems(ItemLike output, int amount) { return outputItems(new ItemStack(output, amount)); } - public GTRecipeBuilder outputItems(Item output) { + public GTRecipeBuilder outputItems(ItemLike output) { return outputItems(new ItemStack(output)); } - public GTRecipeBuilder outputItems(Supplier input) { - return outputItems(new ItemStack(input.get().asItem())); - } - - public GTRecipeBuilder outputItems(Supplier input, int amount) { - return outputItems(new ItemStack(input.get().asItem(), amount)); - } - public GTRecipeBuilder outputItems(TagPrefix orePrefix, Material material) { return outputItems(orePrefix, material, 1); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java index acbd0ef3d7b..b0a16d89c2e 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialStack; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.CleanroomType; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.block.LampBlock; import com.gregtechceu.gtceu.common.block.StoneBlockType; import com.gregtechceu.gtceu.common.data.GTBlocks; @@ -1471,28 +1472,28 @@ private static void registerMossRecipe(RecipeOutput provider, List re } private static void registerNBTRemoval(RecipeOutput provider) { - for (MachineDefinition chest : GTMachines.SUPER_CHEST) { + for (MachineEntry chest : GTMachines.SUPER_CHEST) { if (chest != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "super_chest_nbt_" + chest.getTier(), chest.asStack(), chest.asStack()); } } - for (MachineDefinition tank : GTMachines.SUPER_TANK) { + for (MachineEntry tank : GTMachines.SUPER_TANK) { if (tank != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "super_tank_nbt_" + tank.getTier(), tank.asStack(), tank.asStack()); } } - for (MachineDefinition chest : GTMachines.QUANTUM_CHEST) { + for (MachineEntry chest : GTMachines.QUANTUM_CHEST) { if (chest != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "quantum_chest_nbt_" + chest.getTier(), chest.asStack(), chest.asStack()); } } - for (MachineDefinition tank : GTMachines.QUANTUM_TANK) { + for (MachineEntry tank : GTMachines.QUANTUM_TANK) { if (tank != null) { VanillaRecipeHelper.addShapelessNBTClearingRecipe(provider, "quantum_tank_nbt_" + tank.getTier(), tank.asStack(), tank.asStack()); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java index 0e0cf5e26f3..8d648f7310a 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMachines; @@ -18,6 +19,7 @@ import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; +import net.minecraft.core.Holder; import net.minecraft.data.recipes.RecipeOutput; import net.minecraft.tags.ItemTags; import net.minecraft.world.item.Item; @@ -32,6 +34,7 @@ import java.util.Arrays; import java.util.Locale; +import java.util.Objects; import static com.gregtechceu.gtceu.api.GTValues.*; import static com.gregtechceu.gtceu.data.recipe.GTCraftingComponents.*; @@ -1241,6 +1244,21 @@ public static void registerMachineRecipe(RecipeOutput provider, MachineDefinitio registerMachineRecipe(provider, true, machines, recipe); } + public static void registerMachineRecipe(RecipeOutput provider, boolean setMaterialInfoData, + MachineEntry[] machines, Object... recipe) { + registerMachineRecipe(provider, setMaterialInfoData, + Arrays.stream(machines).filter(Objects::nonNull).map(Holder::value).toArray(MachineDefinition[]::new), + recipe); + } + + public static void registerMachineRecipe(RecipeOutput provider, + MachineEntry[] machines, + Object... recipe) { + registerMachineRecipe(provider, true, + Arrays.stream(machines).filter(Objects::nonNull).map(Holder::value).toArray(MachineDefinition[]::new), + recipe); + } + private static Object[] prepareRecipe(int tier, Object... recipe) { for (int i = 3; i < recipe.length; i++) { if (recipe[i] instanceof CraftingComponent) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java index 3b307662ba7..d878ff3421b 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityMachineRecipeLoader.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.machines.GTAEMachines; import com.gregtechceu.gtceu.common.data.machines.GTMultiMachines; import com.gregtechceu.gtceu.data.recipe.CustomTags; @@ -414,7 +415,7 @@ public static void init(RecipeOutput provider) { var hatch = ENERGY_INPUT_HATCH_16A[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = HI_AMP_TRANSFORMER_4A[tier - 1]; } else { @@ -436,7 +437,7 @@ public static void init(RecipeOutput provider) { var hatch = SUBSTATION_ENERGY_INPUT_HATCH[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = POWER_TRANSFORMER[tier - 1]; } else { @@ -472,7 +473,7 @@ public static void init(RecipeOutput provider) { var hatch = ENERGY_OUTPUT_HATCH_16A[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = HI_AMP_TRANSFORMER_4A[tier - 1]; } else { @@ -494,7 +495,7 @@ public static void init(RecipeOutput provider) { var hatch = SUBSTATION_ENERGY_OUTPUT_HATCH[tier]; if (hatch == null) continue; - MachineDefinition transformer; + MachineEntry transformer; if (tier == (GTCEuAPI.isHighTier() ? MAX : UHV)) { transformer = POWER_TRANSFORMER[tier - 1]; } else { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java index cf1759f4236..365dd9c07c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSSteamMachineBuilder.java @@ -9,6 +9,7 @@ import com.gregtechceu.gtceu.api.multiblock.util.RelativeDirection; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.utils.FormattingUtil; import net.minecraft.resources.ResourceLocation; @@ -20,6 +21,8 @@ import lombok.experimental.Accessors; import org.jetbrains.annotations.Nullable; +import java.util.Objects; + @Accessors(fluent = true, chain = true) public class KJSSteamMachineBuilder extends BuilderBase implements IMachineBuilderKJS { @@ -30,9 +33,9 @@ public class KJSSteamMachineBuilder extends BuilderBase imple @Setter public transient SteamDefinitionFunction definition = (isHP, def) -> def.tier(isHP ? 1 : 0); - private @Nullable MachineBuilder lowPressureBuilder = null, highPressureBuilder = null; + private @Nullable MachineBuilder lowPressureBuilder = null, highPressureBuilder = null; @Nullable - private MachineDefinition lpObject = null, hpObject = null; + private MachineEntry lpObject = null, hpObject = null; public KJSSteamMachineBuilder(ResourceLocation id) { super(id); @@ -40,8 +43,7 @@ public KJSSteamMachineBuilder(ResourceLocation id) { } @Override - public MachineDefinition createObject() { - MachineDefinition value = null; + public @Nullable MachineDefinition createObject() { if (hasLowPressure) { this.lowPressureBuilder = GTRegistrate.createIgnoringListenerErrors(this.id.getNamespace()) .machine(String.format("lp_%s", this.id.getPath()), @@ -54,7 +56,6 @@ public MachineDefinition createObject() { definition.apply(false, lowPressureBuilder); this.lpObject = lowPressureBuilder.register(); - value = lpObject; } if (hasHighPressure) { @@ -69,16 +70,15 @@ public MachineDefinition createObject() { definition.apply(true, highPressureBuilder); this.hpObject = highPressureBuilder.register(); - if (value == null) value = hpObject; } - return value; + return null; } @Override public void generateMachineModels() { - generateMachineModel(lowPressureBuilder, lpObject); - generateMachineModel(highPressureBuilder, hpObject); + generateMachineModel(lowPressureBuilder, Objects.requireNonNull(lpObject).value()); + generateMachineModel(highPressureBuilder, Objects.requireNonNull(hpObject).value()); } @Override @@ -100,10 +100,10 @@ public String getTranslationKeyGroup() { @Override public void generateLang(LangKubeEvent lang) { if (lpObject != null) { - lang.add(GTCEu.MOD_ID, lpObject.getDescriptionId(), lpObject.getLangValue()); + lang.add(GTCEu.MOD_ID, lpObject.value().getDescriptionId(), lpObject.value().getLangValue()); } if (hpObject != null) { - lang.add(GTCEu.MOD_ID, hpObject.getDescriptionId(), hpObject.getLangValue()); + lang.add(GTCEu.MOD_ID, hpObject.value().getDescriptionId(), hpObject.value().getLangValue()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java index caf8cdb2c85..28faf7a991e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.mui.GTSingleblockMachinePanels; @@ -20,7 +21,6 @@ import it.unimi.dsi.fastutil.ints.Int2IntFunction; import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -29,11 +29,14 @@ import static com.gregtechceu.gtceu.utils.FormattingUtil.toEnglishName; @Accessors(fluent = true, chain = true) -public class KJSTieredMachineBuilder extends BuilderBase<@Nullable MachineDefinition @NotNull []> +public class KJSTieredMachineBuilder extends BuilderBase implements IMachineBuilderKJS { private final MachineBuilder[] builders = new MachineBuilder[TIER_COUNT]; + @SuppressWarnings("unchecked") + public final MachineEntry[] machines = new MachineEntry[TIER_COUNT]; + @Setter public transient int[] tiers = GTMachineUtils.ELECTRIC_TIERS; @Setter @@ -67,14 +70,14 @@ public KJSTieredMachineBuilder(ResourceLocation id, TieredCreationFunction machi @Override public void generateMachineModels() { for (int tier : this.tiers) { - generateMachineModel(this.builders[tier], this.object[tier]); + generateMachineModel(this.builders[tier], this.machines[tier].value()); } } @Override public void generateAssets(KubeAssetGenerator generator) { for (int tier : this.tiers) { - MachineDefinition definition = this.object[tier]; + MachineEntry definition = this.machines[tier]; if (definition == null) continue; final ResourceLocation id = definition.getId(); @@ -86,29 +89,30 @@ public void generateAssets(KubeAssetGenerator generator) { public void generateLang(LangKubeEvent lang) { super.generateLang(lang); for (int tier : this.tiers) { - MachineDefinition def = this.object[tier]; - if (def != null && def.getLangValue() != null) { - lang.add(GTCEu.MOD_ID, def.getDescriptionId(), def.getLangValue()); + MachineEntry definition = this.machines[tier]; + if (definition == null) continue; + if (definition.value().getLangValue() != null) { + lang.add(GTCEu.MOD_ID, definition.value().getDescriptionId(), definition.value().getLangValue()); } } } @Override - public @Nullable MachineDefinition @NotNull [] createObject() { + public @org.jspecify.annotations.Nullable MachineDefinition createObject() { Preconditions.checkNotNull(tiers, "Tiers can't be null!"); Preconditions.checkArgument(tiers.length > 0, "tiers must have at least one tier!"); Preconditions.checkNotNull(machine, "You must set a machine creation function! " + "example: `builder.machine((holder, tier) => new SimpleTieredMachine(holder, tier, t => t * 3200)`"); Preconditions.checkNotNull(definition, "You must set a definition function! " + "See GTMachines for examples"); - @Nullable - MachineDefinition @NotNull [] definitions = new MachineDefinition[TIER_COUNT]; + for (final int tier : tiers) { String tierName = VN[tier].toLowerCase(Locale.ROOT); final Int2IntFunction tankFunction = Objects.requireNonNullElse(tankScalingFunction, GTMachineUtils.defaultTankSizeFunction); - MachineBuilder builder = GTRegistrate.createIgnoringListenerErrors(this.id.getNamespace()) + MachineBuilder builder = GTRegistrate + .createIgnoringListenerErrors(this.id.getNamespace()) .machine(String.format("%s_%s", tierName, this.id.getPath()), holder -> machine.create(holder, tier, tankFunction)); @@ -132,9 +136,9 @@ public void generateLang(LangKubeEvent lang) { } this.builders[tier] = builder; - definitions[tier] = builder.register(); + machines[tier] = builder.register(); } - return definitions; + return null; } @FunctionalInterface @@ -143,12 +147,6 @@ public interface TieredCreationFunction { MetaMachine create(BlockEntityCreationInfo info, int tier, Int2IntFunction tankScaling); } - @FunctionalInterface - public interface CreationFunction { - - T create(BlockEntityCreationInfo info); - } - @FunctionalInterface public interface DefinitionFunction { diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java index c809d1ccaf0..33e1a923d1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMultiblockBuilder.java @@ -1,12 +1,12 @@ package com.gregtechceu.gtceu.integration.kjs.builders.machine; import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; -import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; import com.gregtechceu.gtceu.api.registry.registrate.builder.MultiblockMachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import net.minecraft.resources.ResourceLocation; @@ -17,7 +17,6 @@ import dev.latvian.mods.kubejs.registry.BuilderBase; import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Locale; @@ -25,11 +24,12 @@ import static com.gregtechceu.gtceu.api.GTValues.*; @Accessors(fluent = true, chain = true) -public class KJSTieredMultiblockBuilder extends BuilderBase<@Nullable MultiblockMachineDefinition @NotNull []> +public class KJSTieredMultiblockBuilder extends BuilderBase implements IMachineBuilderKJS { private final MultiblockMachineBuilder[] builders = new MultiblockMachineBuilder[TIER_COUNT]; - + @SuppressWarnings("unchecked") + private final MachineEntry[] machines = new MachineEntry[TIER_COUNT]; @Setter public transient int[] tiers = GTMachineUtils.ELECTRIC_TIERS; @Setter @@ -51,14 +51,14 @@ public KJSTieredMultiblockBuilder(ResourceLocation id, TieredCreationFunction ma @Override public void generateMachineModels() { for (int tier : this.tiers) { - generateMachineModel(this.builders[tier], this.object[tier]); + generateMachineModel(this.builders[tier], this.machines[tier].value()); } } @Override public void generateAssets(KubeAssetGenerator generator) { for (int tier : this.tiers) { - MachineDefinition definition = this.object[tier]; + MachineEntry definition = this.machines[tier]; if (definition == null) continue; final ResourceLocation id = definition.getId(); @@ -74,22 +74,21 @@ public String getTranslationKeyGroup() { @Override public void generateLang(LangKubeEvent lang) { for (int tier : tiers) { - MachineDefinition def = object[tier]; - if (def != null && def.getLangValue() != null) { - lang.add(def.getId().getNamespace(), def.getDescriptionId(), def.getLangValue()); + var def = this.machines[tier]; + if (def != null && def.value().getLangValue() != null) { + lang.add(def.getId().getNamespace(), def.value().getDescriptionId(), def.value().getLangValue()); } } } @Override - public @Nullable MultiblockMachineDefinition @NotNull [] createObject() { + public @Nullable MultiblockMachineDefinition createObject() { Preconditions.checkNotNull(tiers, "Tiers can't be null!"); Preconditions.checkArgument(tiers.length > 0, "tiers must have at least one tier!"); Preconditions.checkNotNull(machine, "You must set a machine creation function! " + "example: `builder.machine((holder, tier) => new SimpleTieredMachine(holder, tier, t => t * 3200)`"); Preconditions.checkNotNull(definition, "You must set a definition function! " + "See GTMachines for examples"); - MultiblockMachineDefinition[] definitions = new MultiblockMachineDefinition[TIER_COUNT]; for (final int tier : tiers) { String tierName = VN[tier].toLowerCase(Locale.ROOT); MultiblockMachineBuilder builder = GTRegistrate @@ -101,9 +100,9 @@ public void generateLang(LangKubeEvent lang) { .tier(tier); this.definition.apply(tier, builder); this.builders[tier] = builder; - definitions[tier] = builder.register(); + this.machines[tier] = builder.register(); } - return definitions; + return null; } @FunctionalInterface diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java index 32c43732985..519a783859f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMachineBuilder.java @@ -11,8 +11,7 @@ import dev.latvian.mods.rhino.util.HideFromJS; import it.unimi.dsi.fastutil.ints.Int2IntFunction; import lombok.Getter; - -import java.util.Arrays; +import org.jspecify.annotations.Nullable; @SuppressWarnings("unused") public class KJSWrappingMachineBuilder extends BuilderBase implements IMachineBuilderKJS { @@ -83,14 +82,7 @@ public void generateLang(LangKubeEvent lang) { } @Override - public MachineDefinition createObject() { - for (var def : tieredBuilder.createTransformedObject()) { - if (def != null) { - return def; - } - } - // should never happen. - throw new IllegalStateException("Empty tiered machine builder " + Arrays.toString(tieredBuilder.get()) + - " With id " + tieredBuilder.id); + public @Nullable MachineDefinition createObject() { + return null; } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java index f13138e7cad..199e3c23a3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSWrappingMultiblockBuilder.java @@ -10,8 +10,7 @@ import dev.latvian.mods.kubejs.registry.BuilderBase; import dev.latvian.mods.rhino.util.HideFromJS; import lombok.Getter; - -import java.util.Arrays; +import org.jspecify.annotations.Nullable; public class KJSWrappingMultiblockBuilder extends BuilderBase implements IMachineBuilderKJS { @@ -62,14 +61,7 @@ public void generateLang(LangKubeEvent lang) { } @Override - public MultiblockMachineDefinition createObject() { - for (var def : tieredBuilder.createTransformedObject()) { - if (def != null) { - return def; - } - } - // should never happen. - throw new IllegalStateException("Empty tiered multiblock builder " + Arrays.toString(tieredBuilder.get()) + - " With id " + tieredBuilder.id); + public @Nullable MultiblockMachineDefinition createObject() { + return null; } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java index aadef71e7f8..5916a74cfa8 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/MultiblockMachineBuilderWrapper.java @@ -356,21 +356,21 @@ public void generateLang(LangKubeEvent lang) { } } - public MultiblockMachineDefinition createObject() { - return internal.register(); + public @Nullable MultiblockMachineDefinition createObject() { + internal.register(); + return null; } public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id) { - var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), - id.getPath(), + var baseBuilder = GTRegistrate.createIgnoringListenerErrors(id.getNamespace()).multiblock(id.getPath(), WorkableElectricMultiblockMachine::new); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } public static MultiblockMachineBuilderWrapper createKJSMulti(ResourceLocation id, - KJSTieredMachineBuilder.CreationFunction machine) { - var baseBuilder = new MultiblockMachineBuilder<>(GTRegistrate.createIgnoringListenerErrors(id.getNamespace()), - id.getPath(), machine::create); + MachineInstanceFactory machine) { + var baseBuilder = GTRegistrate.createIgnoringListenerErrors(id.getNamespace()).multiblock(id.getPath(), + machine); return new MultiblockMachineBuilderWrapper(id, baseBuilder); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java index 9726b20f906..8ca3d9ee81b 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/material/MaterialBuilderWrapper.java @@ -20,7 +20,6 @@ import dev.latvian.mods.kubejs.registry.BuilderBase; import dev.latvian.mods.kubejs.typings.Info; import dev.latvian.mods.kubejs.typings.Param; -import org.checkerframework.checker.units.qual.C; import java.util.Collection; import java.util.function.UnaryOperator; @@ -552,7 +551,8 @@ public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, Medic public MaterialBuilderWrapper hazard(HazardProperty.HazardTrigger trigger, MedicalCondition condition, float progressionMultiplier, boolean applyToDerivatives) { - internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), progressionMultiplier, applyToDerivatives); + internal.hazard(trigger, GTRegistries.MEDICAL_CONDITIONS.wrapAsHolder(condition), progressionMultiplier, + applyToDerivatives); return this; } diff --git a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java index 47785acc9b3..6f2cfc718b0 100644 --- a/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java +++ b/src/test/java/com/gregtechceu/gtceu/gametest/util/TestUtils.java @@ -18,6 +18,7 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.common.item.behavior.CoverPlaceBehavior; import com.gregtechceu.gtceu.utils.fakeplayer.FakeServerGamePacketListenerImpl; @@ -284,9 +285,14 @@ public static CoverBehavior placeCover(GameTestHelper helper, MetaMachine machin return machine.getCoverContainer().getCoverAtSide(direction); } + public static MetaMachine setMachine(GameTestHelper helper, BlockPos pos, MachineEntry entry) { + helper.setBlock(pos, entry.getBlock()); + return Objects.requireNonNull(helper.getBlockEntity(pos)); + } + public static MetaMachine setMachine(GameTestHelper helper, BlockPos pos, MachineDefinition machineDefinition) { helper.setBlock(pos, machineDefinition.getBlock()); - return ((MetaMachine) Objects.requireNonNull(helper.getBlockEntity(pos))); + return Objects.requireNonNull(helper.getBlockEntity(pos)); } public static void assertEqual(GameTestHelper helper, List text, String s) { From 968750268449776ed1b2d93fcceec784f0b70979 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Mon, 31 Aug 2026 21:00:12 +1000 Subject: [PATCH 43/45] move multiblock creation properties to creation subclass --- .../gtceu/api/machine/MachineDefinition.java | 13 ++- .../machine/MultiblockMachineDefinition.java | 68 +++++++++----- .../api/registry/registrate/GTRegistrate.java | 2 +- .../registrate/builder/MachineBuilder.java | 42 +++------ .../builder/MultiblockMachineBuilder.java | 92 ++++++++----------- 5 files changed, 106 insertions(+), 111 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index c2047acfc89..eec055cebae 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -101,12 +101,6 @@ public class MachineDefinition { private RotationState rotationState; @Setter private VoxelShape shape; - @Getter - @Setter - private boolean renderWorldPreview; - @Getter - @Setter - private boolean renderXEIPreview; private final Map cache = new EnumMap<>(Direction.class); @Getter @Setter @@ -135,7 +129,7 @@ public class MachineDefinition { @Getter private MachineRenderState defaultRenderState; - public MachineDefinition(ResourceLocation id) { + public MachineDefinition(ResourceLocation id, Properties properties) { this.id = id; } @@ -240,4 +234,9 @@ public int getOutputSize(RecipeCapability cap, GTRecipeType... recipeTypes) { int machineTypeOutputLimit = this.getRecipeOutputLimits().getOrDefault(cap, recipeTypeOutputSize); return Math.min(recipeTypeOutputSize, machineTypeOutputLimit); } + + @Accessors(fluent = true) + @Getter + @Setter + public static class Properties {} } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java index 56039fa6a82..3d86f380b2b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java @@ -4,6 +4,10 @@ import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; +import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; +import lombok.experimental.Accessors; import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -14,7 +18,6 @@ import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.function.TriFunction; -import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.BiFunction; @@ -24,35 +27,58 @@ public class MultiblockMachineDefinition extends MachineDefinition { @Getter - @Setter - private boolean generator; + private final boolean generator; @Getter - private final Map> structurePatterns = new HashMap<>(); + private final Map> structurePatterns; @Getter - @Setter - private boolean allowFlip; + private final boolean allowFlip; @Getter - @Setter - private boolean renderXEIPreview; - @Setter + private final boolean renderXEIPreview; @Getter - @Nullable - private Supplier recoveryItems; - @Setter + private final boolean renderWorldPreview; @Getter - private Function> partSorter; + private final Supplier recoveryItems; @Getter - @Setter - private TriFunction partAppearance; + private final Function> partSorter; @Getter - @Setter - private BiFunction> additionalDisplay; + private final TriFunction partAppearance; + @Getter + private final BiFunction> additionalDisplay; + + public MultiblockMachineDefinition(ResourceLocation id, Properties properties) { + super(id, properties); + this.generator = properties.generator; - public MultiblockMachineDefinition(ResourceLocation id) { - super(id); + Map> structurePatterns = new Object2ObjectOpenHashMap<>(); + if (properties.patterns().isEmpty()) { + throw new IllegalStateException("Missing default structure pattern for " + getName()); + } + for (Map.Entry> entry : properties.patterns.entrySet()) { + structurePatterns.put(entry.getKey(), GTMemoizer.memoize(() -> entry.getValue().apply(this))); + } + this.structurePatterns = Collections.unmodifiableMap(structurePatterns); + this.allowFlip = properties.allowFlip(); + this.renderXEIPreview = properties.renderMultiblockXEIPreview; + this.renderWorldPreview = properties.renderMultiblockWorldPreview; + this.recoveryItems = () -> properties.recoveryItems.stream().map(Supplier::get).flatMap(Arrays::stream).toArray(ItemStack[]::new); + this.partSorter = GTMemoizer.memoizeFunctionWeakIdent(properties.partSorter()); + this.partAppearance = properties.partAppearance(); + this.additionalDisplay = properties.additionalDisplay(); } - public void setPattern(String structureName, Supplier pattern) { - structurePatterns.put(structureName, pattern); + @Accessors(fluent = true) + @Getter + @Setter + public static class Properties extends MachineDefinition.Properties { + private boolean generator = false; + private final Map> patterns = new Object2ReferenceOpenHashMap<>(); + private boolean allowFlip = true; + private final List> recoveryItems = new ArrayList<>(); + private Function> partSorter = (c) -> (a, b) -> 0; + private TriFunction partAppearance = + (controller, part, side) -> controller.getDefinition().getAppearance().get(); + private boolean renderMultiblockWorldPreview = true; + private boolean renderMultiblockXEIPreview = true; + private BiFunction> additionalDisplay = (m, sm) -> Collections.emptyList(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java index 85651ca96f8..c8e3aa36c29 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/GTRegistrate.java @@ -169,7 +169,7 @@ public GTRegistrate registerEventListeners(IEventBus bus) { public > S machine(String name, MachineInstanceFactory blockEntityFactory) { return entry(name, - callback -> (S) new MachineBuilder<>(this, name, callback, MachineDefinition::new, blockEntityFactory)); + callback -> (S) new MachineBuilder<>(this, name, callback, blockEntityFactory)); } @SuppressWarnings("unchecked") diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 889c32e02d1..62593c13508 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -70,12 +70,10 @@ import it.unimi.dsi.fastutil.objects.Reference2IntMap; import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; import lombok.Getter; -import lombok.Setter; import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.Validate; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import org.jspecify.annotations.NonNull; @@ -91,8 +89,8 @@ public class MachineBuilder { protected MachineInstanceFactory instanceFactory; - @Setter(onMethod_ = @ApiStatus.Internal) - public Function definitionFactory; + + private final MachineDefinition.Properties properties; private @Nullable BlockBuilder> blockBuilder; private @Nullable BlockEntry blockEntry; @@ -116,8 +114,6 @@ public class MachineBuilder> onBlockEntityRegister = NonNullConsumer.noop(); @Getter // getter for KJS private GTRecipeType[] recipeTypes = new GTRecipeType[0]; @@ -153,15 +149,21 @@ public class MachineBuilder definitionFactory, MachineInstanceFactory instanceFactory) { super(registrate, registrate, name, callback, GTRegistries.Keys.MACHINE); this.instanceFactory = instanceFactory; - this.definitionFactory = definitionFactory; - + this.properties = createProperties(); this.defaultLang(); } + protected MachineDefinition.Properties createProperties() { + return new MachineDefinition.Properties(); + } + + protected MachineDefinition.Properties getProperties() { + return properties; + } + @Override public GTRegistrate getOwner() { return (GTRegistrate) super.getOwner(); @@ -206,16 +208,6 @@ public SELF hasBER(boolean hasBER) { return getThis(); } - public SELF renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { - this.renderMultiblockWorldPreview = renderMultiblockWorldPreview; - return getThis(); - } - - public SELF renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { - this.renderMultiblockXEIPreview = renderMultiblockXEIPreview; - return getThis(); - } - /** * Gets the {@link MetaMachineBlock} builder for this machine so that further customization can be done.
    * If the {@link BlockBuilder} has not been created yet, then the default one is created. @@ -682,15 +674,9 @@ public SELF addOutputLimit(RecipeCapability capability, int limit) { return getThis(); } - public SELF multiblockPreviewRenderer(boolean multiBlockWorldPreview, - boolean multiBlockXEIPreview) { - this.renderMultiblockWorldPreview = multiBlockWorldPreview; - this.renderMultiblockXEIPreview = multiBlockXEIPreview; - return getThis(); - } - + @SuppressWarnings("unchecked") protected DEFINITION createDefinition() { - return definitionFactory.apply(getOwner().makeResourceLocation(getName())); + return (DEFINITION)new MachineDefinition(getOwner().makeResourceLocation(getName()), properties); } @SuppressWarnings({ "unchecked", "rawtypes" }) @@ -754,8 +740,6 @@ protected void setupStateDefinition(MachineDefinition definition) { definition.setAllowExtendedFacing(allowExtendedFacing); definition.setShape(shape); definition.setDefaultPaintingColor(paintingColor); - definition.setRenderXEIPreview(renderMultiblockXEIPreview); - definition.setRenderWorldPreview(renderMultiblockWorldPreview); return definition; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index ef79051c217..98cdb343bcf 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.api.registry.registrate.builder; +import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.machine.MachineInstanceFactory; import com.gregtechceu.gtceu.api.machine.MultiblockMachineDefinition; import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; @@ -7,8 +8,6 @@ import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties; import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; -import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; -import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; @@ -20,12 +19,9 @@ import brachy.modularui.api.widget.IWidget; import brachy.modularui.value.sync.PanelSyncManager; import com.tterrag.registrate.builders.BuilderCallback; -import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; -import lombok.Getter; import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.function.TriFunction; -import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.*; @@ -40,23 +36,11 @@ public class MultiblockMachineBuilder< SELF extends MultiblockMachineBuilder> extends MachineBuilder { - private boolean generator; - private final Map> patterns; - private boolean allowFlip = true; - private final List> recoveryItems = new ArrayList<>(); - private Function> partSorter = (c) -> (a, b) -> 0; - private @Nullable TriFunction partAppearance; - - @Getter - private BiFunction> additionalDisplay = (m, - sm) -> Collections - .emptyList(); public MultiblockMachineBuilder(GTRegistrate registrate, String name, BuilderCallback callback, MachineInstanceFactory blockEntityFactory) { - super(registrate, name, callback, MultiblockMachineDefinition::new, blockEntityFactory); - patterns = new Object2ReferenceOpenHashMap<>(); + super(registrate, name, callback, blockEntityFactory); allowExtendedFacing(true); allowCoverOnFront(true); // always add the formed property to multi controllers @@ -64,84 +48,86 @@ public MultiblockMachineBuilder(GTRegistrate registrate, String name, } public SELF generator(boolean generator) { - this.generator = generator; + getProperties().generator(generator); return getThis(); } public SELF pattern(Function pattern) { - this.patterns.put(MultiblockControllerMachine.DEFAULT_STRUCTURE, pattern); + getProperties().patterns().put(MultiblockControllerMachine.DEFAULT_STRUCTURE, pattern); return getThis(); } public SELF pattern(String structureName, Function pattern) { - this.patterns.put(structureName, pattern); + getProperties().patterns().put(structureName, pattern); return getThis(); } public SELF allowFlip(boolean allowFlip) { - this.allowFlip = allowFlip; + getProperties().allowFlip(allowFlip); return getThis(); } public SELF partSorter(Function> partSorter) { - this.partSorter = partSorter; + getProperties().partSorter(partSorter); return getThis(); } - public SELF partAppearance(@Nullable TriFunction partAppearance) { - this.partAppearance = partAppearance; + public SELF partAppearance(TriFunction partAppearance) { + getProperties().partAppearance(partAppearance); return getThis(); } public SELF additionalDisplay(BiFunction> additionalDisplay) { - this.additionalDisplay = additionalDisplay; + getProperties().additionalDisplay(additionalDisplay); return getThis(); } public SELF recoveryItems(Supplier items) { - this.recoveryItems.add(() -> Arrays.stream(items.get()).map(ItemLike::asItem).map(Item::getDefaultInstance) + getProperties().recoveryItems().add(() -> Arrays.stream(items.get()).map(ItemLike::asItem).map(Item::getDefaultInstance) .toArray(ItemStack[]::new)); return getThis(); } public SELF recoveryStacks(Supplier stacks) { - this.recoveryItems.add(stacks); + getProperties().recoveryItems().add(stacks); return getThis(); } @Tolerate public SELF partSorter(Comparator sorter) { - this.partSorter = $ -> sorter; + getProperties().partSorter($ -> sorter); + return getThis(); + } + + public SELF renderMultiblockWorldPreview(boolean renderMultiblockWorldPreview) { + getProperties().renderMultiblockWorldPreview(renderMultiblockWorldPreview); + return getThis(); + } + + public SELF renderMultiblockXEIPreview(boolean renderMultiblockXEIPreview) { + getProperties().renderMultiblockXEIPreview(renderMultiblockXEIPreview); return getThis(); } + public SELF multiblockPreviewRenderer(boolean multiblockWorldPreview, + boolean multiblockXEIPreview) { + renderMultiblockWorldPreview(multiblockWorldPreview); + renderMultiblockXEIPreview(multiblockXEIPreview); + return getThis(); + } + + @Override + protected MachineDefinition.Properties createProperties() { + return new MultiblockMachineDefinition.Properties(); + } + @Override - protected MultiblockMachineDefinition createEntry() { - var definition = super.createEntry(); - definition.setGenerator(generator); - if (patterns.isEmpty()) { - throw new IllegalStateException("Missing default structure pattern for " + getName()); - } - for (Map.Entry> entry : patterns.entrySet()) { - definition.setPattern(entry.getKey(), GTMemoizer.memoize(() -> entry.getValue().apply(definition))); - } - - definition.setAllowFlip(allowFlip); - if (!recoveryItems.isEmpty()) { - definition.setRecoveryItems( - () -> recoveryItems.stream().map(Supplier::get).flatMap(Arrays::stream).toArray(ItemStack[]::new)); - } - definition.setPartSorter(GTMemoizer.memoizeFunctionWeakIdent(partSorter)); - if (partAppearance == null) { - partAppearance = (controller, part, side) -> definition.getAppearance().get(); - } - definition.setPartAppearance(partAppearance); - definition.setAdditionalDisplay(additionalDisplay); - return definition; + public MultiblockMachineDefinition.Properties getProperties() { + return (MultiblockMachineDefinition.Properties)super.getProperties(); } @Override - public MachineEntry register() { - return super.register(); + protected MultiblockMachineDefinition createDefinition() { + return new MultiblockMachineDefinition(getOwner().makeResourceLocation(getName()), getProperties()); } } From 1bac40ffabab35331faa05ebe2984c6d1f6142dc Mon Sep 17 00:00:00 2001 From: Gustavo Date: Mon, 31 Aug 2026 21:42:32 +1000 Subject: [PATCH 44/45] move all machine properties to properties obj --- .../gtceu/api/machine/MachineDefinition.java | 183 ++++++++----- .../machine/MultiblockMachineDefinition.java | 30 +- .../registrate/builder/MachineBuilder.java | 257 +++++------------- .../builder/MultiblockMachineBuilder.java | 12 +- .../builders/machine/IMachineBuilderKJS.java | 9 +- .../machine/KJSTieredMachineBuilder.java | 6 +- 6 files changed, 228 insertions(+), 269 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index eec055cebae..a7218cd41ac 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -5,11 +5,17 @@ import com.gregtechceu.gtceu.api.data.RotationState; import com.gregtechceu.gtceu.api.item.MetaMachineItem; import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine; +import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility; import com.gregtechceu.gtceu.api.mui.factory.PanelFactory; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; +import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifierList; +import com.gregtechceu.gtceu.api.registry.registrate.builder.MachineBuilder; +import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; +import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; +import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.core.Direction; @@ -22,23 +28,22 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.neoforge.registries.DeferredHolder; import brachy.modularui.theme.ThemeAPI; +import com.tterrag.registrate.providers.DataGenContext; +import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import it.unimi.dsi.fastutil.objects.Reference2IntMap; import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import java.util.EnumMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.*; /** @@ -52,95 +57,116 @@ public class MachineDefinition { private final ResourceLocation id; // This is only stored here for KJS use. @Getter - @Setter @Nullable - private String langValue; - @Setter(onMethod_ = @ApiStatus.Internal) - private DeferredHolder blockHolder; - @Setter(onMethod_ = @ApiStatus.Internal) - private DeferredHolder itemHolder; - @Setter - private Supplier> blockEntityTypeSupplier; + private final String langValue; + private final DeferredHolder blockHolder; + private final DeferredHolder itemHolder; + private final Supplier> blockEntityTypeSupplier; @Getter - @Setter - private GTRecipeType[] recipeTypes; + private final GTRecipeType[] recipeTypes; @Getter - @Setter - private int tier = -1; + private final int tier; @Getter - @Setter - private int defaultPaintingColor; + private final int defaultPaintingColor; @Getter - @Setter - private RecipeModifier recipeModifier; + private final RecipeModifier recipeModifier; @Getter - @Setter - private boolean alwaysTryModifyRecipe; + private final boolean alwaysTryModifyRecipe; @Getter - @Setter - private BiPredicate beforeWorking = (machine, recipe) -> true; + private final BiPredicate beforeWorking; @Getter - @Setter - private Predicate onWorking = (machine) -> true; + private final Predicate onWorking; @Getter - @Setter - private Consumer onWaiting = (machine) -> {}; + private final Consumer onWaiting; @Getter - @Setter - private Consumer afterWorking = (machine) -> {}; + private final Consumer afterWorking; @Getter - @Setter - private boolean regressWhenWaiting = true; + private final boolean regressWhenWaiting; /** Whether this machine can be rotated or face upwards. */ @Getter - @Setter - private boolean allowExtendedFacing; - + private final boolean allowExtendedFacing; @Getter - @Setter - private RotationState rotationState; - @Setter - private VoxelShape shape; + private final RotationState rotationState; + private final VoxelShape shape; private final Map cache = new EnumMap<>(Direction.class); @Getter - @Setter - private BiConsumer> tooltipBuilder; + private final BiConsumer> tooltipBuilder; @Getter - @Setter - private Supplier appearance; + private final Supplier appearance; @Getter - @Setter - private boolean allowCoverOnFront; + private final boolean allowCoverOnFront; @Getter - @Setter @Nullable - private PanelFactory UI; + private final PanelFactory UI; @Getter - @Setter - private String themeId = ThemeAPI.DEFAULT_ID; + private final String themeId; @Getter - @Setter - private Reference2IntMap> recipeOutputLimits = new Reference2IntOpenHashMap<>(); - + private final Reference2IntMap> recipeOutputLimits; @Getter - @Setter(onMethod_ = @ApiStatus.Internal) - private StateDefinition stateDefinition; + private final StateDefinition stateDefinition; @Accessors(fluent = true) @Getter - private MachineRenderState defaultRenderState; + private final MachineRenderState defaultRenderState; + @SuppressWarnings({ "unchecked", "rawtypes" }) public MachineDefinition(ResourceLocation id, Properties properties) { this.id = id; + + this.rotationState = properties.rotationState(); + this.langValue = properties.langValue(); + this.UI = properties.ui(); + this.themeId = properties.themeId(); + this.recipeTypes = properties.recipeTypes(); + this.blockHolder = properties.blockHolder(); + this.itemHolder = properties.itemHolder(); + this.tier = properties.tier(); + this.recipeOutputLimits = properties.recipeOutputLimits(); + this.blockEntityTypeSupplier = properties.blockEntityTypeSupplier(); + this.tooltipBuilder = (itemStack, components) -> { + components.addAll(properties.tooltips()); + if (properties.tooltipBuilder() != null) properties.tooltipBuilder().accept(itemStack, components); + }; + this.recipeModifier = properties.recipeModifier(); + this.alwaysTryModifyRecipe = properties.alwaysTryModifyRecipe(); + this.beforeWorking = properties.beforeWorking(); + this.onWorking = properties.onWorking(); + this.onWaiting = properties.onWaiting(); + this.afterWorking = properties.afterWorking(); + this.regressWhenWaiting = properties.regressWhenWaiting(); + this.allowCoverOnFront = properties.allowCoverOnFront(); + + for (GTRecipeType type : recipeTypes) { + if (type.getIconSupplier() == null) { + type.setIconSupplier(this::asStack); + } + } + if (properties.appearance() == null) { + properties.appearance(() -> blockHolder.value().defaultBlockState()); + } + this.appearance = properties.appearance(); + this.allowExtendedFacing = properties.allowExtendedFacing(); + this.shape = properties.shape(); + this.defaultPaintingColor = properties.paintingColor(); + + // Initialise render state + + StateDefinition.Builder builder = new StateDefinition.Builder<>( + this); + properties.modelProperties().keySet().forEach(builder::add); + stateDefinition = builder.create(MachineDefinition::defaultRenderState, MachineRenderState::new); + + MachineRenderState defaultState = getStateDefinition().any(); + for (var entry : properties.modelProperties().entrySet()) { + if (entry.getValue() == null) continue; + defaultState = defaultState.setValue((Property) entry.getKey(), (Comparable) entry.getValue()); + } + this.defaultRenderState = defaultState; } public boolean isTiered() { return tier != -1; } - public final void registerDefaultState(MachineRenderState state) { - this.defaultRenderState = state; - } - public MetaMachineBlock getBlock() { return blockHolder.get(); } @@ -238,5 +264,40 @@ public int getOutputSize(RecipeCapability cap, GTRecipeType... recipeTypes) { @Accessors(fluent = true) @Getter @Setter - public static class Properties {} + public static class Properties { + + private DeferredHolder blockHolder; + private DeferredHolder itemHolder; + private Supplier> blockEntityTypeSupplier; + + @Nullable + private MachineBuilder.ModelInitializer model = null; + private @Nullable NonNullBiConsumer, GTBlockstateProvider> blockModel = null; + protected final Map, @Nullable Comparable> modelProperties = new IdentityHashMap<>(); + private VoxelShape shape = Shapes.block(); + private RotationState rotationState = RotationState.NON_Y_AXIS; + private boolean allowExtendedFacing = false; + private boolean hasBER = ConfigHolder.INSTANCE.client.machinesHaveBERsByDefault; + private GTRecipeType[] recipeTypes = new GTRecipeType[0]; + private int tier = -1; + private Reference2IntMap> recipeOutputLimits = new Reference2IntOpenHashMap<>(); + private int paintingColor = ConfigHolder.INSTANCE.client.getDefaultPaintingColor(); + private PartAbility[] abilities = new PartAbility[0]; + private final List tooltips = new ArrayList<>(); + private @Nullable BiConsumer> tooltipBuilder; + private RecipeModifier recipeModifier = new RecipeModifierList(GTRecipeModifiers.OC_NON_PERFECT); + private boolean alwaysTryModifyRecipe; + private BiPredicate beforeWorking = (machine, recipe) -> true; + private Predicate onWorking = (machine) -> true; + private Consumer onWaiting = (machine) -> {}; + private Consumer afterWorking = (machine) -> {}; + private boolean regressWhenWaiting = true; + private boolean allowCoverOnFront = false; + @Nullable + private PanelFactory ui = null; + private String themeId = ThemeAPI.DEFAULT_ID; + private @Nullable Supplier appearance; + @Nullable + private String langValue = null; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java index 3d86f380b2b..4bf55cd09f9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MultiblockMachineDefinition.java @@ -3,11 +3,8 @@ import com.gregtechceu.gtceu.api.machine.multiblock.MultiblockControllerMachine; import com.gregtechceu.gtceu.api.machine.multiblock.part.MultiblockPartMachine; import com.gregtechceu.gtceu.api.multiblock.pattern.IBlockPattern; - import com.gregtechceu.gtceu.utils.memoization.GTMemoizer; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; -import lombok.experimental.Accessors; + import net.minecraft.core.Direction; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.ItemStack; @@ -15,8 +12,11 @@ import brachy.modularui.api.widget.IWidget; import brachy.modularui.value.sync.PanelSyncManager; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; import lombok.Getter; import lombok.Setter; +import lombok.experimental.Accessors; import org.apache.commons.lang3.function.TriFunction; import java.util.*; @@ -53,14 +53,16 @@ public MultiblockMachineDefinition(ResourceLocation id, Properties properties) { if (properties.patterns().isEmpty()) { throw new IllegalStateException("Missing default structure pattern for " + getName()); } - for (Map.Entry> entry : properties.patterns.entrySet()) { + for (Map.Entry> entry : properties.patterns + .entrySet()) { structurePatterns.put(entry.getKey(), GTMemoizer.memoize(() -> entry.getValue().apply(this))); } this.structurePatterns = Collections.unmodifiableMap(structurePatterns); this.allowFlip = properties.allowFlip(); this.renderXEIPreview = properties.renderMultiblockXEIPreview; this.renderWorldPreview = properties.renderMultiblockWorldPreview; - this.recoveryItems = () -> properties.recoveryItems.stream().map(Supplier::get).flatMap(Arrays::stream).toArray(ItemStack[]::new); + this.recoveryItems = () -> properties.recoveryItems.stream().map(Supplier::get).flatMap(Arrays::stream) + .toArray(ItemStack[]::new); this.partSorter = GTMemoizer.memoizeFunctionWeakIdent(properties.partSorter()); this.partAppearance = properties.partAppearance(); this.additionalDisplay = properties.additionalDisplay(); @@ -70,15 +72,23 @@ public MultiblockMachineDefinition(ResourceLocation id, Properties properties) { @Getter @Setter public static class Properties extends MachineDefinition.Properties { + private boolean generator = false; private final Map> patterns = new Object2ReferenceOpenHashMap<>(); private boolean allowFlip = true; private final List> recoveryItems = new ArrayList<>(); - private Function> partSorter = (c) -> (a, b) -> 0; - private TriFunction partAppearance = - (controller, part, side) -> controller.getDefinition().getAppearance().get(); + private Function> partSorter = (c) -> (a, + b) -> 0; + private TriFunction partAppearance = (controller, + part, + side) -> controller + .getDefinition() + .getAppearance() + .get(); private boolean renderMultiblockWorldPreview = true; private boolean renderMultiblockXEIPreview = true; - private BiFunction> additionalDisplay = (m, sm) -> Collections.emptyList(); + private BiFunction> additionalDisplay = (m, + sm) -> Collections + .emptyList(); } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java index 62593c13508..8b44fa16d5d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MachineBuilder.java @@ -24,10 +24,8 @@ import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate; import com.gregtechceu.gtceu.api.registry.registrate.entry.MachineEntry; import com.gregtechceu.gtceu.api.registry.registrate.provider.GTBlockstateProvider; -import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; import com.gregtechceu.gtceu.client.renderer.BlockEntityWithBERModelRenderer; import com.gregtechceu.gtceu.client.renderer.ItemWithBERModelRenderer; -import com.gregtechceu.gtceu.common.data.GTRecipeModifiers; import com.gregtechceu.gtceu.common.data.GTRecipeTypes; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.model.builder.MachineModelBuilder; @@ -45,16 +43,13 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.Property; -import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import net.neoforged.fml.ModLoader; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.model.generators.BlockModelBuilder; import net.neoforged.neoforge.registries.DeferredHolder; -import brachy.modularui.theme.ThemeAPI; import com.tterrag.registrate.builders.AbstractBuilder; import com.tterrag.registrate.builders.BlockBuilder; import com.tterrag.registrate.builders.BuilderCallback; @@ -62,13 +57,11 @@ import com.tterrag.registrate.providers.DataGenContext; import com.tterrag.registrate.providers.ProviderType; import com.tterrag.registrate.providers.RegistrateLangProvider; -import com.tterrag.registrate.util.entry.BlockEntityEntry; import com.tterrag.registrate.util.entry.BlockEntry; import com.tterrag.registrate.util.nullness.NonNullBiConsumer; import com.tterrag.registrate.util.nullness.NonNullConsumer; import dev.latvian.mods.rhino.util.HideFromJS; import it.unimi.dsi.fastutil.objects.Reference2IntMap; -import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap; import lombok.Getter; import lombok.experimental.Accessors; import lombok.experimental.Tolerate; @@ -90,62 +83,14 @@ public class MachineBuilder instanceFactory; + @Getter private final MachineDefinition.Properties properties; private @Nullable BlockBuilder> blockBuilder; private @Nullable BlockEntry blockEntry; - private @Nullable ItemBuilder> itemBuilder; - private @Nullable BlockEntityEntry blockEntityEntry; - - @Nullable - @Getter - private MachineBuilder.ModelInitializer model = null; - @Getter - private @Nullable NonNullBiConsumer, GTBlockstateProvider> blockModel = null; - @Getter - protected final Map, @Nullable Comparable> modelProperties = new IdentityHashMap<>(); - private VoxelShape shape = Shapes.block(); - private RotationState rotationState = RotationState.NON_Y_AXIS; - - /** - * Whether this machine can be rotated or face upwards. - */ - private boolean allowExtendedFacing = false; - private boolean hasBER = ConfigHolder.INSTANCE.client.machinesHaveBERsByDefault; private NonNullConsumer> onBlockEntityRegister = NonNullConsumer.noop(); - @Getter // getter for KJS - private GTRecipeType[] recipeTypes = new GTRecipeType[0]; - @Getter // getter for KJS - private int tier = -1; - private Reference2IntMap> recipeOutputLimits = new Reference2IntOpenHashMap<>(); - private int paintingColor = ConfigHolder.INSTANCE.client.getDefaultPaintingColor(); - private PartAbility[] abilities = new PartAbility[0]; - private final List tooltips = new ArrayList<>(); - private @Nullable BiConsumer> tooltipBuilder; - private RecipeModifier recipeModifier = new RecipeModifierList(GTRecipeModifiers.OC_NON_PERFECT); - private boolean alwaysTryModifyRecipe; - @Getter - private BiPredicate beforeWorking = (machine, recipe) -> true; - @Getter - private Predicate onWorking = (machine) -> true; - @Getter - private Consumer onWaiting = (machine) -> {}; - @Getter - private Consumer afterWorking = (machine) -> {}; - @Getter - private boolean regressWhenWaiting = true; - private boolean allowCoverOnFront = false; - @Getter - @Nullable - private PanelFactory ui = null; - @Getter - private String themeId = ThemeAPI.DEFAULT_ID; - private @Nullable Supplier appearance; - @Getter // getter for KJS - @Nullable - private String langValue = null; public MachineBuilder(GTRegistrate registrate, String name, BuilderCallback callback, @@ -184,27 +129,27 @@ public SELF machine(MachineInstanceFactory instanceFactory) { } public SELF blockModel(@Nullable NonNullBiConsumer, GTBlockstateProvider> blockModel) { - this.blockModel = blockModel; + properties.blockModel(blockModel); return getThis(); } public SELF shape(VoxelShape shape) { - this.shape = shape; + properties.shape(shape); return getThis(); } public SELF rotationState(RotationState rotationState) { - this.rotationState = rotationState; + properties.rotationState(rotationState); return getThis(); } public SELF allowExtendedFacing(boolean allowExtendedFacing) { - this.allowExtendedFacing = allowExtendedFacing; + properties.allowExtendedFacing(allowExtendedFacing); return getThis(); } public SELF hasBER(boolean hasBER) { - this.hasBER = hasBER; + properties.hasBER(hasBER); return getThis(); } @@ -243,8 +188,9 @@ public BlockBuilder Blocks.DISPENSER) .properties(BlockBehaviour.Properties::noLootTable) .addLayer(() -> RenderType::cutout) - .exBlockstate(this.blockModel != null ? this.blockModel : createMachineModel(this.model)) - .onRegister(b -> Arrays.stream(this.abilities).forEach(a -> a.register(this.tier, b))); + .exBlockstate(properties.blockModel() != null ? properties.blockModel() : + createMachineModel(properties.model())) + .onRegister(b -> Arrays.stream(properties.abilities()).forEach(a -> a.register(properties.tier(), b))); blockBuilder = newBlockBuilder; return newBlockBuilder; @@ -284,7 +230,8 @@ public ItemBuilder prov.withExistingParent(ctx.getName(), getOwner().makeResourceLocation("block/machine/" + ctx.getName()))) .color(() -> () -> ((itemStack, tintIndex) -> tintIndex == 2 ? - GTValues.VC[tier == -1 ? 0 : tier] : tintIndex == 1 ? paintingColor : -1)) + GTValues.VC[properties.tier() == -1 ? 0 : properties.tier()] : + tintIndex == 1 ? properties.paintingColor() : -1)) .clientExtension(() -> () -> new IClientItemExtensions() { @Override @@ -303,67 +250,67 @@ public SELF onBlockEntityRegister(NonNullConsumer> onBl } public SELF tier(int tier) { - this.tier = tier; + properties.tier(tier); return getThis(); } public SELF recipeOutputLimits(Reference2IntMap> recipeOutputLimits) { - this.recipeOutputLimits = recipeOutputLimits; + properties.recipeOutputLimits(recipeOutputLimits); return getThis(); } public SELF paintingColor(int paintingColor) { - this.paintingColor = paintingColor; + properties.paintingColor(paintingColor); return getThis(); } public SELF tooltipBuilder(BiConsumer> tooltipBuilder) { - this.tooltipBuilder = tooltipBuilder; + properties.tooltipBuilder(tooltipBuilder); return getThis(); } public SELF alwaysTryModifyRecipe(boolean alwaysTryModifyRecipe) { - this.alwaysTryModifyRecipe = alwaysTryModifyRecipe; + properties.alwaysTryModifyRecipe(alwaysTryModifyRecipe); return getThis(); } public SELF beforeWorking(BiPredicate beforeWorking) { - this.beforeWorking = beforeWorking; + properties.beforeWorking(beforeWorking); return getThis(); } public SELF onWorking(Predicate onWorking) { - this.onWorking = onWorking; + properties.onWorking(onWorking); return getThis(); } public SELF onWaiting(Consumer onWaiting) { - this.onWaiting = onWaiting; + properties.onWaiting(onWaiting); return getThis(); } public SELF afterWorking(Consumer afterWorking) { - this.afterWorking = afterWorking; + properties.afterWorking(afterWorking); return getThis(); } public SELF regressWhenWaiting(boolean regressWhenWaiting) { - this.regressWhenWaiting = regressWhenWaiting; + properties.regressWhenWaiting(regressWhenWaiting); return getThis(); } public SELF allowCoverOnFront(boolean allowCoverOnFront) { - this.allowCoverOnFront = allowCoverOnFront; + properties.allowCoverOnFront(allowCoverOnFront); return getThis(); } public SELF appearance(Supplier appearance) { - this.appearance = appearance; + properties.appearance(appearance); return getThis(); } public SELF ui(PanelFactory ui) { - this.ui = ui; + properties.ui(ui); return getThis(); } @@ -376,19 +323,17 @@ public SELF lang(String name) { } public SELF langValue(String langValue) { - this.langValue = langValue; + properties.langValue(langValue); return getThis(); } public SELF recipeType(GTRecipeType type) { - // noinspection ConstantValue - if (type == null) { - GTCEu.LOGGER.error( - "Tried to set null recipe type on machine {}. Did you create the recipe type before this machine?", - getOwner().makeResourceLocation(getName())); - return getThis(); - } - this.recipeTypes = ArrayUtils.add(this.recipeTypes, type); + Objects.requireNonNull(type, + "Tried to set null recipe type on machine %s. Did you create the recipe type before this machine?" + .formatted( + getOwner().makeResourceLocation(getName()))); + + properties.recipeTypes(ArrayUtils.add(properties.recipeTypes(), type)); initRecipeMachineModelProperties(type); return getThis(); } @@ -398,13 +343,13 @@ public SELF recipeTypes(GTRecipeType... types) { Validate.noNullElements(types, "Cannot add null recipe type to machine."); List typeList = new ArrayList<>(); - Collections.addAll(typeList, this.recipeTypes); + Collections.addAll(typeList, properties.recipeTypes()); for (GTRecipeType type : types) { initRecipeMachineModelProperties(type); typeList.add(type); } - this.recipeTypes = typeList.toArray(GTRecipeType[]::new); + properties.recipeTypes(typeList.toArray(GTRecipeType[]::new)); return getThis(); } @@ -412,13 +357,13 @@ protected void initRecipeMachineModelProperties(GTRecipeType type) { if (type == GTRecipeTypes.DUMMY_RECIPES) { return; } - if (!modelProperties.containsKey(GTMachineModelProperties.RECIPE_LOGIC_STATUS)) { + if (!properties.modelProperties().containsKey(GTMachineModelProperties.RECIPE_LOGIC_STATUS)) { modelProperty(GTMachineModelProperties.RECIPE_LOGIC_STATUS, RecipeLogic.Status.IDLE); } } public SELF model(@Nullable MachineBuilder.ModelInitializer model) { - this.model = model; + properties.model(model); return getThis(); } @@ -555,7 +500,7 @@ public SELF sidedWorkableCasingModel(ResourceLocation baseCasing, } public SELF appearanceBlock(Supplier block) { - appearance = () -> block.get().defaultBlockState(); + properties.appearance(() -> block.get().defaultBlockState()); return getThis(); } @@ -565,7 +510,7 @@ public SELF tooltips(@Nullable Component... components) { @SuppressWarnings("NullableProblems") public SELF tooltips(List components) { - tooltips.addAll(components.stream().filter(Objects::nonNull).toList()); + properties.tooltips().addAll(components.stream().filter(Objects::nonNull).toList()); return getThis(); } @@ -575,22 +520,22 @@ public SELF conditionalTooltip(Component component, BooleanSupplier condition) { public SELF conditionalTooltip(Component component, boolean condition) { if (condition) - tooltips.add(component); + properties.tooltips().add(component); return getThis(); } public SELF abilities(PartAbility... abilities) { - this.abilities = abilities; + properties.abilities(abilities); return getThis(); } public SELF themeId(String themeId) { - this.themeId = themeId; + properties.themeId(themeId); return getThis(); } public SELF themeId(Function themeId) { - this.themeId = themeId.apply(tier); + properties.themeId(themeId.apply(properties.tier())); return getThis(); } @@ -600,7 +545,7 @@ public SELF modelProperty(Property property) { public > SELF modelProperty(Property property, @Nullable T defaultValue) { - this.modelProperties.put(property, defaultValue); + properties.modelProperties().put(property, defaultValue); return getThis(); } @@ -610,51 +555,51 @@ public SELF modelProperties(Property... properties) { } @Tolerate - public SELF modelProperties(Collection> properties) { - for (Property prop : properties) { - this.modelProperties.put(prop, null); + public SELF modelProperties(Collection> modelProperties) { + for (Property prop : modelProperties) { + properties.modelProperties().put(prop, null); } return getThis(); } @Tolerate - public SELF modelProperties(Map, ? extends Comparable> properties) { - this.modelProperties.putAll(properties); + public SELF modelProperties(Map, ? extends Comparable> modelProperties) { + properties.modelProperties().putAll(modelProperties); return getThis(); } public SELF removeModelProperty(Property property) { - this.modelProperties.remove(property); + properties.modelProperties().remove(property); return getThis(); } public SELF clearModelProperties() { - this.modelProperties.clear(); + properties.modelProperties().clear(); return getThis(); } public SELF recipeModifier(RecipeModifier recipeModifier) { - this.recipeModifier = recipeModifier instanceof RecipeModifierList list ? list : - new RecipeModifierList(recipeModifier); + properties.recipeModifier(recipeModifier instanceof RecipeModifierList list ? list : + new RecipeModifierList(recipeModifier)); return getThis(); } public SELF addRecipeModifier(RecipeModifier recipeModifier) { - if (this.recipeModifier instanceof RecipeModifierList list) { - this.recipeModifier = new RecipeModifierList(ArrayUtils.add(list.getModifiers(), recipeModifier)); + if (properties.recipeModifier() instanceof RecipeModifierList list) { + properties.recipeModifier(new RecipeModifierList(ArrayUtils.add(list.getModifiers(), recipeModifier))); } else { - this.recipeModifier = new RecipeModifierList(this.recipeModifier, recipeModifier); + properties.recipeModifier(new RecipeModifierList(properties.recipeModifier(), recipeModifier)); } return getThis(); } public SELF recipeModifier(RecipeModifier recipeModifier, boolean alwaysTryModifyRecipe) { - this.alwaysTryModifyRecipe = alwaysTryModifyRecipe; + properties.alwaysTryModifyRecipe(alwaysTryModifyRecipe); return this.recipeModifier(recipeModifier); } public SELF recipeModifiers(RecipeModifier... recipeModifiers) { - this.recipeModifier = new RecipeModifierList(recipeModifiers); + properties.recipeModifier(new RecipeModifierList(recipeModifiers)); return getThis(); } @@ -664,84 +609,19 @@ public SELF recipeModifiers(boolean alwaysTryModifyRecipe, } public SELF noRecipeModifier() { - this.recipeModifier = new RecipeModifierList(RecipeModifier.NO_MODIFIER); - this.alwaysTryModifyRecipe = false; + properties.recipeModifier(new RecipeModifierList(RecipeModifier.NO_MODIFIER)); + properties.alwaysTryModifyRecipe(false); return getThis(); } public SELF addOutputLimit(RecipeCapability capability, int limit) { - this.recipeOutputLimits.put(capability, limit); + properties.recipeOutputLimits().put(capability, limit); return getThis(); } - @SuppressWarnings("unchecked") - protected DEFINITION createDefinition() { - return (DEFINITION)new MachineDefinition(getOwner().makeResourceLocation(getName()), properties); - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - protected void setupStateDefinition(MachineDefinition definition) { - StateDefinition.Builder builder = new StateDefinition.Builder<>( - definition); - this.modelProperties.keySet().forEach(builder::add); - definition.setStateDefinition(builder.create(MachineDefinition::defaultRenderState, MachineRenderState::new)); - - MachineRenderState defaultState = definition.getStateDefinition().any(); - for (var entry : this.modelProperties.entrySet()) { - if (entry.getValue() == null) continue; - defaultState = defaultState.setValue((Property) entry.getKey(), (Comparable) entry.getValue()); - } - - definition.registerDefaultState(defaultState); - } - - @SuppressWarnings("NullableProblems") + @SuppressWarnings({ "NullableProblems", "unchecked" }) protected @NonNull DEFINITION createEntry() { - DEFINITION definition = createDefinition(); - definition.setRotationState(rotationState); - setupStateDefinition(definition); - if (this.langValue != null) { - definition.setLangValue(langValue); - } - - if (this.ui != null) { - definition.setUI(ui); - } - definition.setThemeId(themeId); - definition.setRecipeTypes(recipeTypes); - - definition.setBlockHolder(Objects.requireNonNull(blockEntry)); - definition.setItemHolder(item().register()); - definition.setTier(tier); - definition.setRecipeOutputLimits(recipeOutputLimits); - definition.setBlockEntityTypeSupplier(Objects.requireNonNull(blockEntityEntry)::get); - definition.setTooltipBuilder((itemStack, components) -> { - components.addAll(tooltips); - if (tooltipBuilder != null) tooltipBuilder.accept(itemStack, components); - }); - definition.setRecipeModifier(recipeModifier); - definition.setAlwaysTryModifyRecipe(alwaysTryModifyRecipe); - definition.setBeforeWorking(this.beforeWorking); - definition.setOnWorking(this.onWorking); - definition.setOnWaiting(this.onWaiting); - definition.setAfterWorking(this.afterWorking); - definition.setRegressWhenWaiting(this.regressWhenWaiting); - definition.setAllowCoverOnFront(this.allowCoverOnFront); - - for (GTRecipeType type : recipeTypes) { - if (type.getIconSupplier() == null) { - type.setIconSupplier(definition::asStack); - } - } - if (appearance == null) { - appearance = blockEntry::getDefaultState; - } - definition.setAppearance(appearance); - definition.setAllowExtendedFacing(allowExtendedFacing); - definition.setShape(shape); - definition.setDefaultPaintingColor(paintingColor); - - return definition; + return (DEFINITION) new MachineDefinition(getOwner().makeResourceLocation(getName()), properties); } @HideFromJS @@ -752,11 +632,11 @@ public MachineEntry register() { KJSCallWrapper.fireKJSEvent(event); } - if (model == null && blockModel == null) { + if (properties.model() == null && properties.blockModel() == null) { simpleModel(getOwner().makeResourceLocation("block/machine/template/" + getName())); } - if (this.langValue != null) { - block().lang(langValue); + if (properties.langValue() != null) { + block().lang(properties.langValue()); } blockEntry = block().register(); @@ -767,10 +647,15 @@ public MachineEntry register() { .buildMachine(new BlockEntityCreationInfo(type, pos, state))) .onRegister(onBlockEntityRegister) .validBlock(blockEntry); - if (hasBER) { + + if (properties.hasBER()) { blockEntityBuilder = blockEntityBuilder.renderer(() -> BlockEntityWithBERModelRenderer::new); } - blockEntityEntry = blockEntityBuilder.register(); + + properties.blockHolder(blockEntry); + properties.itemHolder(item().register()); + properties.blockEntityTypeSupplier(blockEntityBuilder.register()::get); + return (MachineEntry) super.register(); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java index 98cdb343bcf..a562467dd37 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/registry/registrate/builder/MultiblockMachineBuilder.java @@ -22,6 +22,7 @@ import lombok.experimental.Accessors; import lombok.experimental.Tolerate; import org.apache.commons.lang3.function.TriFunction; +import org.jspecify.annotations.NonNull; import java.util.*; import java.util.function.*; @@ -36,7 +37,6 @@ public class MultiblockMachineBuilder< SELF extends MultiblockMachineBuilder> extends MachineBuilder { - public MultiblockMachineBuilder(GTRegistrate registrate, String name, BuilderCallback callback, MachineInstanceFactory blockEntityFactory) { @@ -83,8 +83,9 @@ public SELF additionalDisplay(BiFunction items) { - getProperties().recoveryItems().add(() -> Arrays.stream(items.get()).map(ItemLike::asItem).map(Item::getDefaultInstance) - .toArray(ItemStack[]::new)); + getProperties().recoveryItems() + .add(() -> Arrays.stream(items.get()).map(ItemLike::asItem).map(Item::getDefaultInstance) + .toArray(ItemStack[]::new)); return getThis(); } @@ -123,11 +124,12 @@ protected MachineDefinition.Properties createProperties() { @Override public MultiblockMachineDefinition.Properties getProperties() { - return (MultiblockMachineDefinition.Properties)super.getProperties(); + return (MultiblockMachineDefinition.Properties) super.getProperties(); } @Override - protected MultiblockMachineDefinition createDefinition() { + @SuppressWarnings("NullableProblems") + protected @NonNull MultiblockMachineDefinition createEntry() { return new MultiblockMachineDefinition(getOwner().makeResourceLocation(getName()), getProperties()); } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java index f90d2279faa..b749d1ea63c 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/IMachineBuilderKJS.java @@ -18,15 +18,16 @@ public interface IMachineBuilderKJS { default void generateMachineModel(@Nullable MachineBuilder builder, @Nullable MachineDefinition definition) { if (builder == null || definition == null) return; - if (builder.model() == null && builder.blockModel() == null) return; + if (builder.properties().model() == null && builder.properties().blockModel() == null) return; // Fake a data provider for the GT model builders DataGenContext context = new DataGenContext<>(definition::getBlock, definition.getName(), definition.getId()); - if (builder.blockModel() != null) { - builder.blockModel().accept(context, RuntimeBlockstateProvider.INSTANCE); + if (builder.properties().blockModel() != null) { + builder.properties().blockModel().accept(context, RuntimeBlockstateProvider.INSTANCE); } else { - GTMachineModels.createMachineModel(builder.model()).accept(context, RuntimeBlockstateProvider.INSTANCE); + GTMachineModels.createMachineModel(builder.properties().model()).accept(context, + RuntimeBlockstateProvider.INSTANCE); } } } diff --git a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java index 28faf7a991e..9e609a20a83 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/kjs/builders/machine/KJSTieredMachineBuilder.java @@ -123,15 +123,15 @@ public void generateLang(LangKubeEvent lang) { } this.definition.apply(tier, builder); - if (builder.recipeTypes().length > 0) { - GTRecipeType recipeType = builder.recipeTypes()[0]; + if (builder.properties().recipeTypes().length > 0) { + GTRecipeType recipeType = builder.properties().recipeTypes()[0]; if (tankScalingFunction != null && addDefaultTooltips) { builder.tooltips( GTMachineUtils.workableTiered(tier, GTValues.V[tier], GTValues.V[tier] * 64, recipeType, tankScalingFunction.applyAsInt(tier), !isGenerator)); } } - if (builder.ui() == null) { + if (builder.properties().ui() == null) { builder.ui(GTSingleblockMachinePanels.GENERAL_MACHINE); } From cf23fab4a7e8487fcbd200f8592f088696ff0fec Mon Sep 17 00:00:00 2001 From: Gustavo Date: Sat, 5 Sep 2026 18:13:25 +1000 Subject: [PATCH 45/45] fix build --- .../gtceu/common/capability/MedicalConditionTracker.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java b/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java index d0f3dc473c0..7f114d71eef 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java +++ b/src/main/java/com/gregtechceu/gtceu/common/capability/MedicalConditionTracker.java @@ -79,12 +79,14 @@ public void tick() { public void progressRelatedCondition(@NotNull Material material, int count) { HazardProperty materialHazard = material.getProperty(PropertyKey.HAZARD); + if (materialHazard == null) return; float strength = (float) count * materialHazard.progressionMultiplier; - progressCondition(materialHazard.condition, strength); + progressCondition(materialHazard.condition.value(), strength); } public void progressRelatedCondition(@NotNull MaterialEntry materialEntry, int count) { HazardProperty materialHazard = materialEntry.material().getProperty(PropertyKey.HAZARD); + if (materialHazard == null) return; float strength = (float) (materialEntry.getMaterialAmount() / GTValues.M) * count * materialHazard.progressionMultiplier; progressCondition(materialHazard.condition.value(), strength);