Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
8695821
start of lang restructuring
YoungOnionMC Jun 20, 2025
4f9c495
better file system for lang keys
Spicierspace153 Jun 20, 2025
d5d50ca
missed this one :(
Spicierspace153 Jun 20, 2025
04313ff
lang util
YoungOnionMC Jun 20, 2025
6f83930
armorLang.java cleanup
Spicierspace153 Jun 20, 2025
38de8ef
more renames to armor and lang handler javadoc for proper practice
Spicierspace153 Jun 20, 2025
d74ae71
someone(onion) forgot to change uses when moving classes
Spicierspace153 Jun 20, 2025
8cd8c4f
final ArmorLang
Spicierspace153 Jun 20, 2025
716fab8
Fluid Lang Keys rename :)
Spicierspace153 Jun 20, 2025
fc8c460
tool lang, command lang, fix missing cut paste errors
YoungOnionMC Jun 20, 2025
b67220a
start of covers
Spicierspace153 Jun 20, 2025
f9cbc0b
Merge remote-tracking branch 'origin/yo/space-tooltip-refactor' into …
YoungOnionMC Jun 20, 2025
fe289db
Merge branch 'yo/space-tooltip-refactor' of https://github.com/GregTe…
YoungOnionMC Jun 20, 2025
5ee9e18
subtitles
YoungOnionMC Jun 20, 2025
d7a80ec
finish the moving of LangHandler, all lang values are now in dedicate…
YoungOnionMC Jun 22, 2025
aacf2e3
remove juicers pr
Spicierspace153 Jun 23, 2025
5751e4d
Merge branch '1.20.1' of https://github.com/GregTechCEu/GregTech-Mode…
YoungOnionMC Jun 23, 2025
62ecda5
merge 1.20.1 pre 7.0
YoungOnionMC Jun 23, 2025
311d0f3
more Lang cleanup, fix various broken lang keys
YoungOnionMC Jun 23, 2025
5f65c80
machine lang :sob:
YoungOnionMC Jun 24, 2025
0678b22
GUI Lang
YoungOnionMC Jun 24, 2025
e782584
requested changes
Spicierspace153 Jun 24, 2025
ba989df
requested changes
YoungOnionMC Jun 25, 2025
304c680
Pipe connection tooltips
YoungOnionMC Jun 25, 2025
5f1902b
recipe type names and categories
YoungOnionMC Jun 26, 2025
36e21a1
cauldron washing tooltip keys
YoungOnionMC Jun 26, 2025
0872d8c
tool behaviors, tool class, tool info tooltips, turbine rotor tooltip…
YoungOnionMC Jun 26, 2025
f9e9b61
Armor Lang Refactor (#3274)
JuiceyBeans Jun 26, 2025
f8d944b
armor lang datagen
YoungOnionMC Jun 26, 2025
76345d0
configuration lang, add entire path to the keys
YoungOnionMC Jun 26, 2025
d7fe386
Fluid pipe tooltips, item pipe tooltips, cable tooltips, fluid tooltips
YoungOnionMC Jun 26, 2025
00e5698
UHV-MAX machine lang, eu generator tooltip blurbs, fixed xei recipe c…
YoungOnionMC Jun 26, 2025
c67b507
gtceu.machine -> machine.gtceu, fix hard coded recipe type mod lang, …
YoungOnionMC Jun 26, 2025
1d0e176
remove upside down lang (#3278)
YoungOnionMC Jun 27, 2025
81120cf
more machine tooltips
YoungOnionMC Jun 28, 2025
92fbbba
Merge remote-tracking branch 'origin/1.20.1' into yo/space-tooltip-re…
YoungOnionMC May 20, 2026
0c115ff
slams keyboard
YoungOnionMC May 22, 2026
125835a
some slight cleanup
YoungOnionMC Jun 8, 2026
2f4fe73
more cleanup
YoungOnionMC Jun 9, 2026
410a8ca
more cleanup 2
YoungOnionMC Jun 10, 2026
f04da06
Merge 1.20.1 into lang refacotr (#5166)
gustovafing Jul 22, 2026
4316542
Update item lang (#5171)
gustovafing Jul 26, 2026
6e961cc
More material lang stuff (#5184)
gustovafing Jul 26, 2026
e533cd8
fix missing config from the merge and ran datagen
YoungOnionMC Jul 26, 2026
071a4f7
more lang stuff (#5201)
gustovafing Aug 9, 2026
a4f560d
marge + spotless
YoungOnionMC Oct 7, 2026
b093743
datagen
YoungOnionMC Oct 7, 2026
3d80fcb
Add datagen for more object lang & other lang changes (#5472)
gustovafing Oct 7, 2026
29957aa
finish first key rename pass (#5530)
gustovafing Oct 11, 2026
026627e
Merge branch '1.20.1' into yo/space-tooltip-refactor
gustovafing Oct 19, 2026
fee9971
Even more lang changes (#5576)
gustovafing Oct 20, 2026
b6132f2
Merge branch '1.20.1' into yo/space-tooltip-refactor
gustovafing Oct 21, 2026
e10a0c6
Merge branch '1.20.1' into yo/space-tooltip-refactor
gustovafing Oct 24, 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
  •  
  •  
  •  
1 change: 1 addition & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
dependencies {
compileOnly(libs.jetbrains.annotations)
compileOnly(libs.mcdev.annotations)

// Registrate
jarJar(modApi(forge.registrate.get()))
Expand Down
2 changes: 1 addition & 1 deletion docs/content/Modpacks/Changes/v7.5.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ Failure reasons are displayed in:
You are supposed to replace `ModifierFunction.NULL` with `ModifierFunction.cancel(reason)` to tell the machine why the recipe fails to start.
```patch
- return ModifierFunction.NULL;
+ return ModifierFunction.cancel(Component.translatable("gtceu.recipe_modifier.xxx"));
+ return ModifierFunction.cancel(Component.translatable("recipe_modifier.gtceu.xxx"));
```

Also, if you cancel a recipe in `IRecipeLogicMachine#beforeWorking()`, you are supposed to add some custom reason info like:
Expand Down
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.
Loading
Loading