Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
104 commits
Select commit Hold shift + click to select a range
1aa4346
commit so I can PR this
screret Jul 1, 2025
92906af
Merge branch '1.20.1' into mui2-refactor
Spicierspace153 Jul 28, 2025
d235841
base package for mui (#3603)
YoungOnionMC Aug 2, 2025
087aa05
Client/screen package (#3664)
YoungOnionMC Aug 7, 2025
d53ae11
Api/widget (#3667)
YoungOnionMC Aug 13, 2025
151245e
api/widgets (#3682)
YoungOnionMC Aug 13, 2025
f251853
syncing (#3718)
YoungOnionMC Aug 17, 2025
f62c758
themes (#3867)
YoungOnionMC Sep 6, 2025
ab31e62
drawables + spotless (#3842)
YoungOnionMC Sep 6, 2025
a1df1d9
api/util (#3871)
YoungOnionMC Sep 6, 2025
1a04d05
json utils (#3875)
YoungOnionMC Sep 8, 2025
292cca4
screen overlays (#3876)
YoungOnionMC Sep 12, 2025
5301047
api/facotry + spotless (#4022) - [Admin]
YoungOnionMC Oct 6, 2025
4f035fa
missing utils (#4023) - [Admin]
YoungOnionMC Oct 6, 2025
2c7c2af
Common + factories (#4024) - [Admin]
YoungOnionMC Oct 6, 2025
18acafa
mui mixins (#4025) - [Admin]
YoungOnionMC Oct 6, 2025
7ed6aeb
xei integration (#4026) - [Admin]
YoungOnionMC Oct 6, 2025
2eef805
fake level (#4027) - [Admin]
YoungOnionMC Oct 6, 2025
8b7117a
Retry misc files, game launches now (#4031)
YoungOnionMC Oct 6, 2025
b6ad2ab
update mui2 refactor up to #4019 (#4033)
YoungOnionMC Oct 6, 2025
eeb2809
[MUI2] Fix image & adaptable sizing in GTGuiTextures (#4039)
purebluez Oct 7, 2025
7c7dbb7
Fix Tooltip Rendering inside mui UIs (#4038)
Spicierspace153 Oct 7, 2025
997803b
[MUI2] Merge MUI2's GuiTextures with GT's GTGuiTextures (#4041)
purebluez Oct 8, 2025
03b250c
Test Tile, Fixing Sync networking (#4043)
YoungOnionMC Oct 8, 2025
e8954e9
Item Count, Tooltip Layering, Debug Keybind (#4040)
YoungOnionMC Oct 8, 2025
9c3e99f
Fix Mouse Offsets in various contexts (#4044)
YoungOnionMC Oct 8, 2025
f472454
Making UI in builders (#4046)
jurrejelle Oct 8, 2025
e07dca8
Fix mui dark background layer (#4049)
brachy84 Oct 9, 2025
1158022
Part 1 of MUI updating (#4052)
YoungOnionMC Oct 9, 2025
6109f06
Entity Drawables (#4054)
YoungOnionMC Oct 9, 2025
2246011
Part 2 of Mui Updating (#4053)
YoungOnionMC Oct 10, 2025
ac8bb79
[MUI2] Animation refactor (#4055)
jurrejelle Oct 10, 2025
abc97dd
Add the missing CharTyped event listener to ClientScreenHandler (#4045)
screret Oct 10, 2025
95cb0b8
[MUI2] PlayerInventoryUIFactory + Curios compat (#4056)
brachy84 Oct 11, 2025
f3169a0
update mui p4 (#4059)
YoungOnionMC Oct 11, 2025
abddbae
[MUI2] dynamic sync (#4060)
jurrejelle Oct 11, 2025
487949a
[MUI2] Fix Textfield (#4061)
brachy84 Oct 11, 2025
b48f997
Machine Controller Cover Gui (#4048)
YoungOnionMC Oct 11, 2025
e919ec5
More MUI updaing p5 (#4062)
YoungOnionMC Oct 12, 2025
6ed2f80
Resizeable Panels (#4063)
YoungOnionMC Oct 12, 2025
ffb0018
[MUI] updating pt 6 (#4064)
jurrejelle Oct 12, 2025
fee1fca
update mui p7 (#4068)
YoungOnionMC Oct 13, 2025
3577211
Port CleanroomMC/ModularUI#135 (#4077)
Spicierspace153 Oct 18, 2025
ce70a1e
Port CleanroomMC/ModularUI#140 (#4067)
screret Oct 18, 2025
3f91da7
[MUI2] Small commits (#4083)
brachy84 Oct 18, 2025
bc78acf
Make schema rendering code sane (#4084)
screret Oct 18, 2025
741729a
Theme refactoring and improvements (#4087)
YoungOnionMC Oct 19, 2025
9a5e999
[MUI2] Fix slot desync on world load (#4088)
brachy84 Oct 19, 2025
ae22f62
scroll bars and fixes idk (#4091)
YoungOnionMC Oct 20, 2025
8e9b34c
the rest of the owl (#4092)
YoungOnionMC Oct 20, 2025
ca2be0e
[MUI] Fix depth problems (#4095)
brachy84 Oct 20, 2025
e7964e4
merge 1.20 into mui2 refactor (#4100)
YoungOnionMC Oct 21, 2025
5d42461
cache multi preview renders (#4096)
screret Oct 21, 2025
227c649
Fix Machine Controller Cover's UI (#4105)
purebluez Oct 22, 2025
d6587e8
[MUI] Fix several mui issues (#4112)
brachy84 Oct 24, 2025
a32e70b
[MUI2] Port Storage Cover (#4153)
purebluez Nov 6, 2025
d4907f1
[MUI] add UI builder option to multis (#4162)
jurrejelle Nov 9, 2025
0b939ca
Background Inverse Texture (#4165)
Ghostipedia Nov 10, 2025
e1d464b
Background Inverse Texture but I give it the right size this time! (#…
Ghostipedia Nov 10, 2025
422ec6e
Make Base Backgrounds/Tabs Sharpened to Match 1.12 Stylizing (#4167)
Ghostipedia Nov 10, 2025
0df4742
Update MUI to 727a80b4 (#4173)
YoungOnionMC Nov 13, 2025
82d0d08
Update MUI to current as of 11-13-25 (#4178)
YoungOnionMC Nov 14, 2025
3b81957
[MUI2] Dynamic singleblock UI from recipe type (#4101)
jurrejelle Nov 15, 2025
0fc5dee
Update MUI as of 11-15-2025 (#4185)
YoungOnionMC Nov 15, 2025
10a5fbe
[MUI2] Port Advanced Energy Detector Cover (#4191)
purebluez Nov 17, 2025
ea8bbfe
Multipart foundational + item bus - [MUI2] (#4222)
YoungOnionMC Nov 23, 2025
6cbda2a
Steam Machine and fisher work - [MUI2] (#4221)
YoungOnionMC Nov 23, 2025
52c9295
RecipeTypeUI foundation - [MUI2] (#4220)
YoungOnionMC Nov 23, 2025
6c6100a
[MUI2] Add an addMultiLang method to IRichTextBuilder (#4223)
purebluez Nov 24, 2025
0b7af8f
[MUI2] Parallel hatches (#4218)
jurrejelle Nov 24, 2025
ce055e7
[MUI] Remove floating "Inventory" (#4217)
jurrejelle Nov 24, 2025
767fa1f
[MUI] Block breaker UI (#4216)
jurrejelle Nov 24, 2025
60200f8
[MUI2] Buffer (#4234)
jurrejelle Nov 25, 2025
b5c9eda
[MUI2] Object Holder (#4232)
jurrejelle Nov 29, 2025
9e1058d
[MUI2] Data Hatches (#4251)
jurrejelle Nov 29, 2025
4d1c891
[MUI2] Muffler Hatch (#4253)
jurrejelle Nov 29, 2025
7f97b17
[MUI2] Object holder rework slots (#4256)
jurrejelle Nov 29, 2025
8b1f7ed
Fix new object holder GUI using the wrong slot index for the input it…
screret Dec 1, 2025
468492d
[MUI2] Extract createSquareSlotgroupFromInventory (#4255)
jurrejelle Dec 1, 2025
3e92d4f
[MUI2] Super/Quantum Tank (#4282)
jurrejelle Dec 12, 2025
f47f9ba
[MUI2] Creative computation provider (#4294)
TarLaboratories Dec 13, 2025
01a95bd
[MUI2] Battery Buffer (#4281)
TarLaboratories Dec 13, 2025
5dcb495
Fix MUI not being reopened properly (#4354)
ghzdude Dec 22, 2025
19a1a6b
[MUI2] Miner (#4334)
TarLaboratories Dec 22, 2025
c22fe63
[MUI2] Item Collector (#4332)
TarLaboratories Dec 22, 2025
60bbd20
[MUI2] Turbo Charger (#4331)
TarLaboratories Dec 22, 2025
041b4d3
[MUI2] Maintenance Hatch (#4328)
TarLaboratories Dec 22, 2025
e411451
[MUI2] Center stuff in battery buffer UI (#4315)
TarLaboratories Dec 22, 2025
e64c796
[MUI2] Dual Hatch (#4330)
TarLaboratories Dec 22, 2025
f64fd10
[MUI2] rotor holder (#4252)
jurrejelle Dec 22, 2025
c3ab309
[MUI2] Fluid Hatch (#4344)
TarLaboratories Dec 22, 2025
ebfa8a2
[MUI] - Singleblock RecipeType UIs (#4309)
YoungOnionMC Dec 22, 2025
f274292
[MUI2] Programmed Circuit (#4311)
TarLaboratories Dec 22, 2025
62f81d8
[MUI2] Fix Tiled UITextures not drawing correctly (#4358)
ghzdude Dec 22, 2025
56ab3bd
mui2 merge nightmare (#4360)
YoungOnionMC Dec 23, 2025
786ece6
14759d1a to d4e989e0, skipped 848d9e60 (#4366)
YoungOnionMC Dec 23, 2025
6e0afaa
[MUI2] Fix Theme Deserialization (#4373)
ghzdude Dec 24, 2025
158aeac
Start of theme application for steam machines (#4374)
YoungOnionMC Dec 24, 2025
49af1a7
[MUI2] - Steam Boilers (#4380)
YoungOnionMC Dec 26, 2025
936eea8
[MUI2] Auto Maintenance Hatch (#4391)
zetrock1 Jan 1, 2026
f5a4a75
[MUI2] Pump Machine (#4357)
zetrock1 Jan 5, 2026
df3c771
Merge remote-tracking branch 'origin/1.20.1-v8.0.0' into mui2-refactor
YoungOnionMC Jan 5, 2026
5edc0a0
fix the merge that happened [MUI2] (#4425)
YoungOnionMC Jan 5, 2026
276effa
Update MUI to 3 Jan 2026 (#4434)
YoungOnionMC Jan 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 6 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ dependencies {
// Configuration
jarJar(modApi(forge.configuration.get()))

// Math Parser
jarJar(implementation(libs.mxparser.get()))
additionalRuntimeClasspath(libs.mxparser.get())

// Mixin (& Extras)
annotationProcessor(variantOf(libs.mixin) { classifier("processor") })
compileOnly(annotationProcessor(forge.mixinExtras.common.get()))
Expand Down Expand Up @@ -119,4 +123,6 @@ dependencies {
modExtraLocalRuntime(forge.ponder)
modExtraLocalRuntime(variantOf(forge.create) { classifier("slim") })
modExtraLocalRuntime(forge.flywheel.forge)

modLocalRuntime(forge.curios)
}
102 changes: 102 additions & 0 deletions docs/content/Modpacks/Examples/Example_Coil_Multiblock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
---
title: "Example Coil Multiblock"
---

### Superheated Pyrolyzing Oven Multiblock (by Phoenixvine)


Below is an example of a multiblock using the CoilWorkableElectricMultiblockMachine class and the pyrolyseOvenOverclock machine logic.

### Multiblock
=== "JavaScript"
```js title="superheated_pyrolyzing_oven_multiblock.js"
// In order to use multiblock logic extending beyond the normal WorkableElectricMultiblockMachine, (This is the multiblock type used by default for kubejs) you need to load a class. Coil multiblocks such as the Electric Blast Furnace, Pyrolyse Oven, and the Cracker use this class.
const CoilWorkableElectricMultiblockMachine = Java.loadClass("com.gregtechceu.gtceu.api.machine.multiblock.CoilWorkableElectricMultiblockMachine")

GTCEuStartupEvents.registry('gtceu:machine', event => {
event.create("superheated_pyrolyzing_oven", "multiblock")
.machine((holder) => new CoilWorkableElectricMultiblockMachine(holder))
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes('pyrolyse_oven')
.recipeModifiers(
[
GTRecipeModifiers.PARALLEL_HATCH,
(machine, recipe) => GTRecipeModifiers.pyrolyseOvenOverclock(machine, recipe)
]
)
.appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
.pattern(definition => FactoryBlockPattern.start()
.aisle("BBCCCBB", "BBCDCBB", "BBCCCBB", "BBCCCBB", "BBEEEBB", "BBEEEBB")
.aisle("BCCCCCB", "BCAFACB", "BCAFACB", "BCGGGCB", "BEAAAEB", "BEHHHEB")
.aisle("CCCCCCC", "CAAFAAC", "CAAFAAC", "CGGGGGC", "EAAAAAE", "EHHHHHE")
.aisle("CCCCCCC", "DFFFFFD", "CFFFFFC", "CGGGGGC", "EAAAAAE", "EHHMHHE")
.aisle("CCCCCCC", "CAAFAAC", "CAAFAAC", "CGGGGGC", "EAAAAAE", "EHHHHHE")
.aisle("BCCCCCB", "BCAFACB", "BCAFACB", "BCGGGCB", "BEAAAEB", "BEHHHEB")
.aisle("BBCCCBB", "BBCICBB", "BBCCCBB", "BBCCCBB", "BBEEEBB", "BBEEEBB")
.where('A', Predicates.blocks("minecraft:air"))
.where('B', Predicates.any())
.where('C', Predicates.blocks('gtceu:solid_machine_casing').setMinGlobalLimited(10)
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where('D', Predicates.blocks("gtceu:steel_firebox_casing"))
.where('E', Predicates.blocks("gtceu:laminated_glass"))
.where('F', Predicates.blocks("gtceu:ptfe_pipe_casing"))
.where('G', Predicates.heatingCoils())
.where('H', Predicates.blocks("gtceu:high_temperature_smelting_casing"))
.where('M', Predicates.abilities(PartAbility.MUFFLER).setExactLimit(1))
.where('I', Predicates.controller(Predicates.blocks(definition.get())))
.build())
.workableCasingModel("gtceu:block/casings/solid/machine_casing_solid_steel",
"gtceu:block/multiblock/pyrolyse_oven");

})
```


=== "Java"
```java title="MultiMachines.java"

public static final MultiblockMachineDefinition SUPERHEATED_PYROLYZING_OVEN = REGISTRATE
.multiblock("superheated_pyrolyzing_oven", (holder) -> new CoilWorkableElectricMultiblockMachine(holder))
.rotationState(RotationState.NON_Y_AXIS)
.recipeType(GTRecipeTypes.PYROLYSE_RECIPES)
.recipeModifiers(GTRecipeModifiers.PARALLEL_HATCH,
(machine, recipe) -> GTRecipeModifiers.pyrolyseOvenOverclock(machine, recipe))
.appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
.pattern(definition -> FactoryBlockPattern.start()
.aisle("BBCCCBB", "BBCDCBB", "BBCCCBB", "BBCCCBB", "BBEEEBB", "BBEEEBB")
.aisle("BCCCCCB", "BCAFACB", "BCAFACB", "BCGGGCB", "BEAAAEB", "BEHHHEB")
.aisle("CCCCCCC", "CAAFAAC", "CAAFAAC", "CGGGGGC", "EAAAAAE", "EHHHHHE")
.aisle("CCCCCCC", "DFFFFFD", "CFFFFFC", "CGGGGGC", "EAAAAAE", "EHHMHHE")
.aisle("CCCCCCC", "CAAFAAC", "CAAFAAC", "CGGGGGC", "EAAAAAE", "EHHHHHE")
.aisle("BCCCCCB", "BCAFACB", "BCAFACB", "BCGGGCB", "BEAAAEB", "BEHHHEB")
.aisle("BBCCCBB", "BBCICBB", "BBCCCBB", "BBCCCBB", "BBEEEBB", "BBEEEBB")
.where('A', Predicates.air())
.where('B', Predicates.any())
.where('C', Predicates.blocks(GTBlocks.CASING_STEEL_SOLID.get()).setMinGlobalLimited(10)
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1))
.or(Predicates.abilities(PartAbility.PARALLEL_HATCH).setMaxGlobalLimited(1))
.or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where('D', Predicates.blocks(GTBlocks.FIREBOX_STEEL.get()))
.where('E', Predicates.blocks(CASING_LAMINATED_GLASS.get()))
.where('F', Predicates.blocks(GTBlocks.CASING_POLYTETRAFLUOROETHYLENE_PIPE.get()))
.where('G', Predicates.heatingCoils())
.where('H', Predicates.blocks(GCYMBlocks.CASING_HIGH_TEMPERATURE_SMELTING.get()))
.where('M', Predicates.abilities(PartAbility.MUFFLER).setExactLimit(1))
.where('I', Predicates.controller(Predicates.blocks(definition.get())))
.build())
.workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_solid_steel"),
GTCEu.id("block/multiblock/pyrolyse_oven"))
.register();
```

### Lang

```json title="en_us.json"
{
"block.gtceu.superheated_pyrolyzing_oven": "Superheated Pyrolyzing Oven",
}
```


87 changes: 87 additions & 0 deletions docs/content/Modpacks/Examples/Example_Steam_Multiblock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
title: "Example Steam Multiblock"
---

### Large Steam Compressor Multiblock

Below is an example of a multiblock using the SteamParallelMultiblockMachine class.
Steam multiblocks such as the Steam Grinder and Steam Oven use this class.

### Multiblock

=== "JavaScript"
```js title="example_steam_multiblock_multiblock.js"

// In order to use multiblock logic extending beyond the default multiblock type for KJS (WorkableElectricMultiblockMachine), you need to load a class.
const $SteamMulti = Java.loadClass('com.gregtechceu.gtceu.common.machine.multiblock.steam.SteamParallelMultiblockMachine');

GTCEuStartupEvents.registry('gtceu:machine', event => {
event.create('large_steam_compressor', 'multiblock')
.machine((holder) => new $SteamMulti(holder, 4))
// The number in holder is the max amount of parallel it can use.
.rotationState(RotationState.NON_Y_AXIS)
.recipeType('compressor')
.recipeModifier((machine, recipe) => $SteamMulti.recipeModifier(machine, recipe), true)
.pattern(definition => FactoryBlockPattern.start()
.aisle("BCCCB", "BBCBB", "BBCBB", "BBBBB", "BBBBB")
.aisle("CDDDC", "BDBDB", "BDEDB", "BBDBB", "BBBBB")
.aisle("CDDDC", "CBBBC", "CEFEC", "BDDDB", "BBGBB")
.aisle("CDDDC", "BDBDB", "BDEDB", "BBDBB", "BBBBB")
.aisle("BCCCB", "BBHBB", "BBCBB", "BBBBB", "BBBBB")
.where('B', Predicates.any())
.where('C', Predicates.blocks('gtceu:steam_machine_casing').setMinGlobalLimited(10)
.or(Predicates.abilities(PartAbility.STEAM_IMPORT_ITEMS).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.STEAM).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.STEAM_EXPORT_ITEMS).setMaxGlobalLimited(1)))
.where('D', Predicates.blocks("gtceu:industrial_steam_casing"))
.where('E', Predicates.blocks("gtceu:bronze_brick_casing"))
.where('F', Predicates.blocks("gtceu:bronze_firebox_casing"))
.where('G', Predicates.blocks("gtceu:bronze_machine_casing"))
.where('H', Predicates.controller(Predicates.blocks(definition.get())))
.build())
.workableCasingModel("gtceu:block/casings/steam/bronze/bottom",
"gtceu:block/machines/compressor")
})
```

=== "Java"
```java title="MultiMachines.java"
public static final MultiblockMachineDefinition LARGE_STEAM_COMPRESSOR = REGISTRATE
.multiblock("large_steam_compressor", (holder) -> new SteamParallelMultiblockMachine(holder, 4))
.rotationState(RotationState.NON_Y_AXIS)
.recipeType(COMPRESSOR_RECIPES)
.recipeModifier((machine, recipe) -> SteamParallelMultiblockMachine.recipeModifier(machine, recipe), true)
.pattern(definition -> FactoryBlockPattern.start()
.aisle("BCCCB", "BBCBB", "BBCBB", "BBBBB", "BBBBB")
.aisle("CDDDC", "BDBDB", "BDEDB", "BBDBB", "BBBBB")
.aisle("CDDDC", "CBBBC", "CEFEC", "BDDDB", "BBGBB")
.aisle("CDDDC", "BDBDB", "BDEDB", "BBDBB", "BBBBB")
.aisle("BCCCB", "BBHBB", "BBCBB", "BBBBB", "BBBBB")
.where('B', Predicates.any())
.where('C', Predicates.blocks(GTBlocks.CASING_BRONZE_BRICKS.get()).setMinGlobalLimited(10)
.or(Predicates.abilities(PartAbility.STEAM_IMPORT_ITEMS).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.STEAM).setMaxGlobalLimited(1))
.or(Predicates.abilities(PartAbility.STEAM_EXPORT_ITEMS).setMaxGlobalLimited(1)))
.where('D', Predicates.blocks(GCYMBlocks.CASING_INDUSTRIAL_STEAM.get()))
.where('E', Predicates.blocks(GTBlocks.BRONZE_BRICKS_HULL.get()))
.where('F', Predicates.blocks(GTBlocks.FIREBOX_BRONZE.get()))
.where('G', Predicates.blocks(GTBlocks.BRONZE_HULL.get()))
.where('H', Predicates.controller(Predicates.blocks(definition.get())))
.build())
.workableCasingModel(GTCEu.id("block/casings/steam/bronze/bottom"),
GTCEu.id("block/machines/compressor"))
.register();
```

### Lang

```json title="en_us.json"
{
"block.gtceu.large_steam_compressor": "Large Steam Compressor",
}
```





94 changes: 94 additions & 0 deletions docs/content/Modpacks/Examples/Example_Turbine.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
---
title: "Example Turbine"
---

### Example Turbine

Below is an example of a multiblock using the LargeTurbineMachine class for making custom large turbines.

### Multiblock

=== "JavaScript"
```js title="hyper_gas_turbine.js"
// In order to use multiblock logic extending beyond the normal WorkableElectricMultiblockMachine, (This is the multiblock type used by default for kubejs) you need to load a class. LargeTurbineMachines such as the gas, steam, and plasma turbines use this class.
const $LargeTurbineMachine = Java.loadClass("com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeTurbineMachine")

GTCEuStartupEvents.registry('gtceu:machine', event => {
event.create('hyper_gas_turbine', 'multiblock')
.machine((holder) => new $LargeTurbineMachine(holder, GTValues.LuV)) // The value shows one rotor holder tier above the recommended minimum rotor holder. The tier of rotor holder provides a boost based on the efficiency stat.
.rotationState(RotationState.NON_Y_AXIS)
.recipeTypes("gas_turbine")
.recipeModifiers([GTRecipeModifiers.OC_NON_PERFECT_SUBTICK, GTRecipeModifiers.BATCH_MODE, (machine, recipe) => GTRecipeModifiers.LargeTurbineMachine(machine, recipe)])
.appearanceBlock(GTBlocks.CASING_TITANIUM_STABLE)
.pattern(definition => FactoryBlockPattern.start()
.aisle("BBBBBBB", "BBBCBBB", "BBBDBBB", "BBBCBBB", "BBBBBBB")
.aisle("BBBCBBB", "BBCACBB", "BBCFCBB", "BBCACBB", "BBBCBBB")
.aisle("BBCCCBB", "BCAAACB", "BCAFACB", "BCAFACB", "BBCCCBB")
.aisle("BCCCCCB", "CAAFAAC", "CFFFFFC", "CAFFFAC", "BCCECCB")
.aisle("BBCCCBB", "BCAAACB", "BCAFACB", "BCAFACB", "BBCCCBB")
.aisle("BBBCBBB", "BBCACBB", "BBCFCBB", "BBCACBB", "BBBCBBB")
.aisle("BBBBBBB", "BBBCBBB", "BBBGBBB", "BBBCBBB", "BBBBBBB")
.where("A", Predicates.blocks("minecraft:air"))
.where("B", Predicates.any())
.where("C", Predicates.blocks("gtceu:stainless_steel_turbine_casing")
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)))
.where("D", Predicates.ability(PartAbility.MUFFLER).setExactLimit(1))
.where("E", Predicates.ability(PartAbility.ROTOR_HOLDER).setExactLimit(1))
.where("F", Predicates.blocks("gtceu:stainless_steel_frame"))
.where("G", Predicates.controller(Predicates.blocks(definition.get())))
.build())
.workableCasingModel("gtceu:block/casings/mechanic/machine_casing_turbine_stainless_steel",
"gtceu:block/multiblock/generator/large_gas_turbine")
});
```

=== "Java"
```java title="MultiMachines.java"
public static final MultiblockMachineDefinition HYPER_GAS_TURBINE = REGISTRATE
.multiblock("hyper_gas_turbine", (holder) -> new LargeTurbineMachine(holder, GTValues.LuV, 4)) // The value shows one rotor holder tier above the recommended minimum rotor holder. The tier of rotor holder provides a boost based on the efficiency stat.
.rotationState(RotationState.NON_Y_AXIS)
.recipeType(GTRecipeTypes.GAS_TURBINE_FUELS)
.recipeModifiers(GTRecipeModifiers.OC_NON_PERFECT_SUBTICK, GTRecipeModifiers.BATCH_MODE, LargeTurbineMachine::recipeModifier)
.pattern(definition -> FactoryBlockPattern.start()
.aisle("BBBBBBB", "BBBCBBB", "BBBDBBB", "BBBCBBB", "BBBBBBB")
.aisle("BBBCBBB", "BBCACBB", "BBCECBB", "BBCACBB", "BBBCBBB")
.aisle("BBCCCBB", "BCAAACB", "BCAEACB", "BCAEACB", "BBCCCBB")
.aisle("BCCCCCB", "CAAEAAC", "CEEEEEC", "CAEEEAC", "BCCFCCB")
.aisle("BBCCCBB", "BCAAACB", "BCAEACB", "BCAEACB", "BBCCCBB")
.aisle("BBBCBBB", "BBCACBB", "BBCECBB", "BBCACBB", "BBBCBBB")
.aisle("BBBBBBB", "BBBCBBB", "BBBGBBB", "BBBCBBB", "BBBBBBB")
.where("A", Predicates.blocks("minecraft:air"))
.where("B", Predicates.any())
.where("C", Predicates.blocks("gtceu:stainless_steel_turbine_casing")
.or(Predicates.autoAbilities(definition.getRecipeTypes()))
.or(Predicates.abilities(PartAbility.MAINTENANCE).setExactLimit(1)))
.where("D", Predicates.ability(PartAbility.MUFFLER).setExactLimit(1))
.where("F", Predicates.ability(PartAbility.ROTOR_HOLDER).setExactLimit(1))
.where("E", Predicates.blocks("gtceu:stainless_steel_frame"))
.where("G", Predicates.controller(Predicates.blocks(definition.get())))
.build())
.workableCasingModel(GTCEu.id("block/casings/steam/bronze/bottom"),
GTCEu.id("block/machines/compressor"))
.register();
```


### Lang

```json title="en_us.json"
{
"block.gtceu.hyper_gas_turbine": "Hyper Gas Turbine",
}
```











Empty file.
4 changes: 3 additions & 1 deletion gradle/forge.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ ae2 = "15.0.18"
kubejs = "2001.6.5-build.16"
rhino = "2001.2.3-build.10"
architectury = "9.2.14"
clothmath = "+"
clothconfig = "11.1.136"
theoneprobe = "1.20.1-10.0.1-3"
curios = "5.9.1+1.20.1"
Expand Down Expand Up @@ -76,6 +77,7 @@ flywheel-forge = { module = "dev.engine-room.flywheel:flywheel-forge-1.20.1
kubejs = { module = "dev.latvian.mods:kubejs-forge", version.ref = "kubejs" }
rhino = { module = "dev.latvian.mods:rhino-forge", version.ref = "rhino" }
architectury = { module = "dev.architectury:architectury-forge", version.ref = "architectury" }
clothmath = { module = "me.shedaniel.cloth:basic-math", version.ref = "clothmath" }
clothconfig = { module = "me.shedaniel.cloth:cloth-config-forge", version.ref = "clothconfig" }
theoneprobe = { module = "mcjty.theoneprobe:theoneprobe", version.ref = "theoneprobe" }
curios = { module = "top.theillusivec4.curios:curios-forge", version.ref = "curios" }
Expand Down Expand Up @@ -118,7 +120,7 @@ ftbchunks-cm = { module = "curse.maven:ftb-chunks-forge-314906", version.

[bundles]
jei = ["jei-common-api", "jei-forge-api", "jei-forge-impl"]
rei = ["rei-plugin", "rei-forge"]
rei = ["rei-plugin", "rei-forge", "clothmath"]
rei-runtime = ["rei-forge", "architectury", "clothconfig"]
kjs = ["kubejs", "rhino", "architectury"]

2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,15 @@ lombok = "8.14"
jetbrains-annotations = "26.0.1"
renderNurse = "0.0.12"
mixin = "0.8.7"
mxparser = "6.1.0"

[libraries]
minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" }
minecraftForge = { module = "net.minecraftforge:forge", version.ref = "minecraftForge" }
jetbrains-annotations = { module = "org.jetbrains:annotations", version.ref = "jetbrains-annotations" }
renderNurse = { module = "net.neoforged:render-nurse", version.ref = "renderNurse" }
mixin = { module = "org.spongepowered:mixin", version.ref = "mixin" }
mxparser = { module = "org.mariuszgromada.math:MathParser.org-mXparser", version.ref = "mxparser" }

[plugins]
modDevGradle = { id = "net.neoforged.moddev.legacyforge", version.ref = "modDevGradle" }
Expand Down
28 changes: 28 additions & 0 deletions src/generated/resources/assets/gtceu/blockstates/test_mui.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"variants": {
"facing=down": {
"model": "gtceu:block/machine/test_mui",
"x": 90
},
"facing=east": {
"model": "gtceu:block/machine/test_mui",
"y": 90
},
"facing=north": {
"model": "gtceu:block/machine/test_mui"
},
"facing=south": {
"model": "gtceu:block/machine/test_mui",
"y": 180
},
"facing=up": {
"gtceu:z": 180,
"model": "gtceu:block/machine/test_mui",
"x": 270
},
"facing=west": {
"model": "gtceu:block/machine/test_mui",
"y": 270
}
}
}
Loading