diff --git a/.gitignore b/.gitignore
index 689f688b23e..a42dac0b0f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
/.gradle/
/output/
/bin/
+/libs/
.classpath
*/.factorypath
diff --git a/docs/content/Development/General-Topics/Datafixers.md b/docs/content/Development/General-Topics/Datafixers.md
new file mode 100644
index 00000000000..2fb406db49c
--- /dev/null
+++ b/docs/content/Development/General-Topics/Datafixers.md
@@ -0,0 +1,47 @@
+---
+title: Datafixers
+---
+
+# What are datafixers?
+Datafixers are Mojang's solution to resolving save data layout changes, such as items being renamed or entities' NBT fields moving.
+> From [Documented DataFixerUpper's overview summary](https://kvverti.github.io/Documented-DataFixerUpper/snapshot/overview-summary.html):
+Data Fixer Upper (or DFU for short) is a library for creating transformations between structures, regardless of the specific schemas or storage formats the structures use. Users of DFU will generally use two sets of types: the serialization types and the data fix types. An overview of the relevant packages is given below, but see the documentation of those packages and types for more details.
+
+TL;DR: DataFixerUpper is a full typed functional programming language written entirely in Java. It's overengineered, but can accomplish every change Mojang could ever want to do.
+
+
+# How to add datafixers
+
+Register new datafixers in [`GTDataFixers.addFixers`](https://github.com/GregTechCEu/GregTech-Modern/blob/1.20.1/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java#L108). Remember to bump [`GTCEu.GT_DATA_VERSION`](https://github.com/GregTechCEu/GregTech-Modern/blob/1.20.1/src/main/java/com/gregtechceu/gtceu/GTCEu.java#L50)
+in every PR that changes existing save data and add a schema & fixer for it here.
+
+For changes that do not change named types or add new (block) entities, use [`SAME_NAMESPACED`](https://github.com/GregTechCEu/GregTech-Modern/blob/1.20.1/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java#L71) for the schema.
+Register machines (and other block entities) in a schema overriding `Schema#registerBlockEntities`, like [`V2_3` does](https://github.com/GregTechCEu/GregTech-Modern/blob/1.20.1/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java#L21).
+
+!!! danger
+ Do **NOT** add new machines to [`V0`](https://github.com/GregTechCEu/GregTech-Modern/blob/1.20.1/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java)! They should be in new, correctly versioned schemas!
+
+!!! note "References"
+ Reference vanilla schemas for more information on them (examples below). Also check how they're used in vanilla's `net.minecraft.util.datafix.DataFixers` class.
+ `net.minecraft.util.datafix.schemas.V1460`, `net.minecraft.util.datafix.schemas.V1906`
+
+
+## Adding new (block) entity types
+
+Note how only fields that use other registered (named) types (such as item/fluid stacks) are defined. The same should be done for all types.
+If the type doesn't depend on any named types, register it with `schema.register()` like this:
+??? example "registerBlockEntities"
+ ```java
+ public Map> registerBlockEntities(Schema schema) {
+ Map> map = super.registerBlockEntities(schema);
+ // ...
+ schema.register(map, "gtceu:your_id_here", () -> traitHolder(schema)); // (1)
+ // ...
+ return map;
+ }
+ ```
+
+ 1. Do not use `schema.registerSimple()`! All machines must have the trait holder fields.
+
+!!! tip
+ When adding new (block) entity types in a schema, always also add a {@link AddNewChoices} fixer of the appropriate type(s).
diff --git a/src/generated/resources/assets/gtceu/blockstates/assembly_control_casing.json b/src/generated/resources/assets/gtceu/blockstates/assembly_control_casing.json
new file mode 100644
index 00000000000..59b18aa617d
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/blockstates/assembly_control_casing.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "gtceu:block/assembly_control_casing"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/assembly_line_casing.json b/src/generated/resources/assets/gtceu/blockstates/assembly_line_casing.json
deleted file mode 100644
index be8c32ae2bb..00000000000
--- a/src/generated/resources/assets/gtceu/blockstates/assembly_line_casing.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "variants": {
- "": {
- "model": "gtceu:block/assembly_line_casing"
- }
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/assembly_line_unit.json b/src/generated/resources/assets/gtceu/blockstates/assembly_line_unit.json
index b42cc22f6eb..e3a00994740 100644
--- a/src/generated/resources/assets/gtceu/blockstates/assembly_line_unit.json
+++ b/src/generated/resources/assets/gtceu/blockstates/assembly_line_unit.json
@@ -1,10 +1,10 @@
{
"variants": {
"active=false": {
- "model": "gtceu:block/variant/assembly_line"
+ "model": "gtceu:block/variant/assembly_line_unit"
},
"active=true": {
- "model": "gtceu:block/variant/assembly_line_active"
+ "model": "gtceu:block/variant/assembly_line_unit_active"
}
}
}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/bricked_bronze_casing.json b/src/generated/resources/assets/gtceu/blockstates/bricked_bronze_casing.json
new file mode 100644
index 00000000000..5d2889b51bf
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/blockstates/bricked_bronze_casing.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "gtceu:block/bricked_bronze_casing"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/bricked_wrought_iron_casing.json b/src/generated/resources/assets/gtceu/blockstates/bricked_wrought_iron_casing.json
new file mode 100644
index 00000000000..4f07fb03275
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/blockstates/bricked_wrought_iron_casing.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "gtceu:block/bricked_wrought_iron_casing"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/bronze_brick_casing.json b/src/generated/resources/assets/gtceu/blockstates/bronze_brick_casing.json
deleted file mode 100644
index 9afbdf2bf08..00000000000
--- a/src/generated/resources/assets/gtceu/blockstates/bronze_brick_casing.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "variants": {
- "": {
- "model": "gtceu:block/bronze_brick_casing"
- }
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/mega_blast_furnace.json b/src/generated/resources/assets/gtceu/blockstates/bulk_blast_chiller.json
similarity index 54%
rename from src/generated/resources/assets/gtceu/blockstates/mega_blast_furnace.json
rename to src/generated/resources/assets/gtceu/blockstates/bulk_blast_chiller.json
index 5632a501c1c..22fea31a5a7 100644
--- a/src/generated/resources/assets/gtceu/blockstates/mega_blast_furnace.json
+++ b/src/generated/resources/assets/gtceu/blockstates/bulk_blast_chiller.json
@@ -1,150 +1,150 @@
{
"variants": {
"facing=down,upwards_facing=down": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=down,upwards_facing=east": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 90
},
"facing=down,upwards_facing=north": {
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 90
},
"facing=down,upwards_facing=south": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 90
},
"facing=down,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=down,upwards_facing=west": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 90
},
"facing=east,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 90
},
"facing=east,upwards_facing=east": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=east,upwards_facing=north": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 90
},
"facing=east,upwards_facing=south": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 90
},
"facing=east,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 90
},
"facing=east,upwards_facing=west": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=north,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=north,upwards_facing=east": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=north,upwards_facing=north": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=north,upwards_facing=south": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=north,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=north,upwards_facing=west": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=south,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 180
},
"facing=south,upwards_facing=east": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 180
},
"facing=south,upwards_facing=north": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=south,upwards_facing=south": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=south,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 180
},
"facing=south,upwards_facing=west": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 180
},
"facing=up,upwards_facing=down": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=up,upwards_facing=east": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 270
},
"facing=up,upwards_facing=north": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 270
},
"facing=up,upwards_facing=south": {
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 270
},
"facing=up,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=up,upwards_facing=west": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"x": 270
},
"facing=west,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 270
},
"facing=west,upwards_facing=east": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
},
"facing=west,upwards_facing=north": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 270
},
"facing=west,upwards_facing=south": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 270
},
"facing=west,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_blast_furnace",
+ "model": "gtceu:block/machine/bulk_blast_chiller",
"y": 270
},
"facing=west,upwards_facing=west": {
- "model": "gtceu:block/machine/mega_blast_furnace"
+ "model": "gtceu:block/machine/bulk_blast_chiller"
}
}
}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/oil_heavy.json b/src/generated/resources/assets/gtceu/blockstates/heavy_oil.json
similarity index 50%
rename from src/generated/resources/assets/gtceu/blockstates/oil_heavy.json
rename to src/generated/resources/assets/gtceu/blockstates/heavy_oil.json
index 89572bbc661..58eb6297d32 100644
--- a/src/generated/resources/assets/gtceu/blockstates/oil_heavy.json
+++ b/src/generated/resources/assets/gtceu/blockstates/heavy_oil.json
@@ -1,7 +1,7 @@
{
"variants": {
"": {
- "model": "gtceu:block/oil_heavy"
+ "model": "gtceu:block/heavy_oil"
}
}
}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/oil_light.json b/src/generated/resources/assets/gtceu/blockstates/light_oil.json
similarity index 50%
rename from src/generated/resources/assets/gtceu/blockstates/oil_light.json
rename to src/generated/resources/assets/gtceu/blockstates/light_oil.json
index 7da636112ee..da76726bc26 100644
--- a/src/generated/resources/assets/gtceu/blockstates/oil_light.json
+++ b/src/generated/resources/assets/gtceu/blockstates/light_oil.json
@@ -1,7 +1,7 @@
{
"variants": {
"": {
- "model": "gtceu:block/oil_light"
+ "model": "gtceu:block/light_oil"
}
}
}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/magnalium_turbine_casing.json b/src/generated/resources/assets/gtceu/blockstates/magnalium_turbine_casing.json
new file mode 100644
index 00000000000..fd791e4eba9
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/blockstates/magnalium_turbine_casing.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "gtceu:block/magnalium_turbine_casing"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/oil_medium.json b/src/generated/resources/assets/gtceu/blockstates/oil_medium.json
deleted file mode 100644
index 810ef09ee0a..00000000000
--- a/src/generated/resources/assets/gtceu/blockstates/oil_medium.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "variants": {
- "": {
- "model": "gtceu:block/oil_medium"
- }
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/palladium_substation.json b/src/generated/resources/assets/gtceu/blockstates/palladium_substation.json
deleted file mode 100644
index 6f076fc83b3..00000000000
--- a/src/generated/resources/assets/gtceu/blockstates/palladium_substation.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "variants": {
- "": {
- "model": "gtceu:block/palladium_substation"
- }
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/palladium_substation_casing.json b/src/generated/resources/assets/gtceu/blockstates/palladium_substation_casing.json
new file mode 100644
index 00000000000..a903abcfe32
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/blockstates/palladium_substation_casing.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "gtceu:block/palladium_substation_casing"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/raw_oil.json b/src/generated/resources/assets/gtceu/blockstates/raw_oil.json
new file mode 100644
index 00000000000..c741baaffdd
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/blockstates/raw_oil.json
@@ -0,0 +1,7 @@
+{
+ "variants": {
+ "": {
+ "model": "gtceu:block/raw_oil"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/mega_vacuum_freezer.json b/src/generated/resources/assets/gtceu/blockstates/rotary_hearth_furnace.json
similarity index 53%
rename from src/generated/resources/assets/gtceu/blockstates/mega_vacuum_freezer.json
rename to src/generated/resources/assets/gtceu/blockstates/rotary_hearth_furnace.json
index c756f374a31..0d4df807d3b 100644
--- a/src/generated/resources/assets/gtceu/blockstates/mega_vacuum_freezer.json
+++ b/src/generated/resources/assets/gtceu/blockstates/rotary_hearth_furnace.json
@@ -1,150 +1,150 @@
{
"variants": {
"facing=down,upwards_facing=down": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=down,upwards_facing=east": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 90
},
"facing=down,upwards_facing=north": {
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 90
},
"facing=down,upwards_facing=south": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 90
},
"facing=down,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=down,upwards_facing=west": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 90
},
"facing=east,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 90
},
"facing=east,upwards_facing=east": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=east,upwards_facing=north": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 90
},
"facing=east,upwards_facing=south": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 90
},
"facing=east,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 90
},
"facing=east,upwards_facing=west": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=north,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=north,upwards_facing=east": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=north,upwards_facing=north": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=north,upwards_facing=south": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=north,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=north,upwards_facing=west": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=south,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 180
},
"facing=south,upwards_facing=east": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 180
},
"facing=south,upwards_facing=north": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=south,upwards_facing=south": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=south,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 180
},
"facing=south,upwards_facing=west": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 180
},
"facing=up,upwards_facing=down": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=up,upwards_facing=east": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 270
},
"facing=up,upwards_facing=north": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 270
},
"facing=up,upwards_facing=south": {
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 270
},
"facing=up,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=up,upwards_facing=west": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"x": 270
},
"facing=west,upwards_facing=down": {
"gtceu:z": 180,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 270
},
"facing=west,upwards_facing=east": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
},
"facing=west,upwards_facing=north": {
"gtceu:z": 90,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 270
},
"facing=west,upwards_facing=south": {
"gtceu:z": 270,
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 270
},
"facing=west,upwards_facing=up": {
- "model": "gtceu:block/machine/mega_vacuum_freezer",
+ "model": "gtceu:block/machine/rotary_hearth_furnace",
"y": 270
},
"facing=west,upwards_facing=west": {
- "model": "gtceu:block/machine/mega_vacuum_freezer"
+ "model": "gtceu:block/machine/rotary_hearth_furnace"
}
}
}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/steel_brick_casing.json b/src/generated/resources/assets/gtceu/blockstates/steel_brick_casing.json
deleted file mode 100644
index 9d6e9cf8bd6..00000000000
--- a/src/generated/resources/assets/gtceu/blockstates/steel_brick_casing.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "variants": {
- "": {
- "model": "gtceu:block/steel_brick_casing"
- }
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/blockstates/steel_turbine_casing.json b/src/generated/resources/assets/gtceu/blockstates/steel_turbine_casing.json
deleted file mode 100644
index 31f57e8e8ee..00000000000
--- a/src/generated/resources/assets/gtceu/blockstates/steel_turbine_casing.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "variants": {
- "": {
- "model": "gtceu:block/steel_turbine_casing"
- }
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json
index cf0c8f51081..03eff79ee71 100644
--- a/src/generated/resources/assets/gtceu/lang/en_ud.json
+++ b/src/generated/resources/assets/gtceu/lang/en_ud.json
@@ -134,10 +134,10 @@
"block.gtceu.aluminium_crate": "ǝʇɐɹƆ ɯnıuıɯnןⱯ",
"block.gtceu.aluminium_drum": "ɯnɹᗡ ɯnıuıɯnןⱯ",
"block.gtceu.antimatter_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɹǝʇʇɐɯıʇuⱯ",
+ "block.gtceu.assembly_control_casing": "buısɐƆ ןoɹʇuoƆ ʎןqɯǝssⱯ",
"block.gtceu.assembly_line": "ǝuıꞀ ʎןqɯǝssⱯ",
- "block.gtceu.assembly_line_casing": "buısɐƆ ǝuıꞀ ʎןqɯǝssⱯ",
"block.gtceu.assembly_line_grating": "buıʇɐɹ⅁ ǝuıꞀ ʎןqɯǝssⱯ",
- "block.gtceu.assembly_line_unit": "buısɐƆ ןoɹʇuoƆ ʎןqɯǝssⱯ",
+ "block.gtceu.assembly_line_unit": "ʇıu∩ ǝuıꞀ ʎןqɯǝssⱯ",
"block.gtceu.atomic_casing": "buısɐƆ ɔıɯoʇⱯ",
"block.gtceu.auto_maintenance_hatch": "ɥɔʇɐH ǝɔuɐuǝʇuıɐW oʇnⱯ",
"block.gtceu.basic_data_access_hatch": "ɥɔʇɐH ssǝɔɔⱯ ɐʇɐᗡ ɔısɐᗺ",
@@ -153,8 +153,9 @@
"block.gtceu.blue_metal_sheet": "ʇǝǝɥS ןɐʇǝW ǝnןᗺ",
"block.gtceu.blue_studs": "spnʇS ǝnןᗺ",
"block.gtceu.boss_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ssoᗺ",
+ "block.gtceu.bricked_bronze_casing": "buısɐƆ ǝzuoɹᗺ pǝʞɔıɹᗺ",
+ "block.gtceu.bricked_wrought_iron_casing": "buısɐƆ uoɹI ʇɥbnoɹM pǝʞɔıɹᗺ",
"block.gtceu.brittle_charcoal": "ןɐoɔɹɐɥƆ ǝןʇʇıɹᗺ",
- "block.gtceu.bronze_brick_casing": "buısɐƆ ǝzuoɹᗺ pǝʞɔıɹᗺ",
"block.gtceu.bronze_crate": "ǝʇɐɹƆ ǝzuoɹᗺ",
"block.gtceu.bronze_drum": "ɯnɹᗡ ǝzuoɹᗺ",
"block.gtceu.bronze_firebox_casing": "buısɐƆ xoqǝɹıℲ ǝzuoɹᗺ",
@@ -169,8 +170,7 @@
"block.gtceu.brown_large_metal_sheet": "ʇǝǝɥS ןɐʇǝW ǝbɹɐꞀ uʍoɹᗺ",
"block.gtceu.brown_metal_sheet": "ʇǝǝɥS ןɐʇǝW uʍoɹᗺ",
"block.gtceu.brown_studs": "spnʇS uʍoɹᗺ",
- "block.gtceu.casing_coke_bricks": "sʞɔıɹᗺ uǝʌO ǝʞoƆ",
- "block.gtceu.casing_grate": "buısɐƆ ǝuıɥɔɐW ǝʇɐɹ⅁",
+ "block.gtceu.bulk_blast_chiller": "ɹǝןןıɥƆ ʇsɐןᗺ ʞןnᗺ",
"block.gtceu.causality_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ʎʇıןɐsnɐƆ",
"block.gtceu.central_monitor": "ɹoʇıuoW ןɐɹʇuǝƆ",
"block.gtceu.charcoal_pile_igniter": "ɹǝʇıubI ǝןıԀ ןɐoɔɹɐɥƆ",
@@ -348,6 +348,7 @@
"block.gtceu.gregification_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH uoıʇɐɔıɟıbǝɹ⅁",
"block.gtceu.heat_vent": "ʇuǝΛ ʇɐǝH",
"block.gtceu.heatproof_machine_casing": "buısɐƆ ǝuıɥɔɐW ɹɐʌuI ɟooɹԀ ʇɐǝH",
+ "block.gtceu.heavy_oil": "ןıO ʎʌɐǝH",
"block.gtceu.high_performance_computation_array": ")ⱯƆԀH( ʎɐɹɹⱯ uoıʇɐʇndɯoƆ ǝɔuɐɯɹoɟɹǝԀ ɥbıH",
"block.gtceu.high_power_casing": "buısɐƆ ɹǝʍoԀ ɥbıH",
"block.gtceu.high_pressure_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝɹnssǝɹԀ ɥbıH",
@@ -597,6 +598,7 @@
"block.gtceu.light_gray_large_metal_sheet": "ʇǝǝɥS ןɐʇǝW ǝbɹɐꞀ ʎɐɹ⅁ ʇɥbıꞀ",
"block.gtceu.light_gray_metal_sheet": "ʇǝǝɥS ןɐʇǝW ʎɐɹ⅁ ʇɥbıꞀ",
"block.gtceu.light_gray_studs": "spnʇS ʎɐɹ⅁ ʇɥbıꞀ",
+ "block.gtceu.light_oil": "ןıO ʇɥbıꞀ",
"block.gtceu.lime_borderless_lamp": "dɯɐꞀ ssǝןɹǝpɹoᗺ ǝɯıꞀ",
"block.gtceu.lime_lamp": "dɯɐꞀ ǝɯıꞀ",
"block.gtceu.lime_large_metal_sheet": "ʇǝǝɥS ןɐʇǝW ǝbɹɐꞀ ǝɯıꞀ",
@@ -798,6 +800,7 @@
"block.gtceu.magenta_metal_sheet": "ʇǝǝɥS ןɐʇǝW ɐʇuǝbɐW",
"block.gtceu.magenta_studs": "spnʇS ɐʇuǝbɐW",
"block.gtceu.magic_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɔıbɐW",
+ "block.gtceu.magnalium_turbine_casing": "buısɐƆ ǝuıqɹn⟘ ɯnıןɐubɐW",
"block.gtceu.magnetic_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɔıʇǝubɐW",
"block.gtceu.maintenance_hatch": "ɥɔʇɐH ǝɔuɐuǝʇuıɐW",
"block.gtceu.marble": "ǝןqɹɐW",
@@ -843,8 +846,6 @@
"block.gtceu.me_pattern_buffer_proxy": "ʎxoɹԀ ɹǝɟɟnᗺ uɹǝʇʇɐԀ ƎW",
"block.gtceu.me_stocking_input_bus": "snᗺ ʇnduI buıʞɔoʇS ƎW",
"block.gtceu.me_stocking_input_hatch": "ɥɔʇɐH ʇnduI buıʞɔoʇS ƎW",
- "block.gtceu.mega_blast_furnace": "ǝɔɐuɹnℲ ɥʇɹɐǝH ʎɹɐʇoᴚ",
- "block.gtceu.mega_vacuum_freezer": "ɹǝןןıɥƆ ʇsɐןᗺ ʞןnᗺ",
"block.gtceu.miner_pipe": "ǝdıԀ ɹǝuıW",
"block.gtceu.mob_infestation_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH uoıʇɐʇsǝɟuI qoW",
"block.gtceu.mob_spawner_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ɹǝuʍɐdS qoW",
@@ -950,9 +951,6 @@
"block.gtceu.normal_optical_pipe.tooltip": "ㄥ§ɐʇɐᗡ ɥɔɹɐǝsǝᴚɟ§ ɹo ㄥ§uoıʇɐʇndɯoƆɟ§ buıʇʇıɯsuɐɹ⟘ㄥ§",
"block.gtceu.object_holder": "ɹǝpןoH ʇɔǝظqO",
"block.gtceu.oil": "ןıO",
- "block.gtceu.oil_heavy": "ןıO ʎʌɐǝH",
- "block.gtceu.oil_light": "ןıO ʇɥbıꞀ",
- "block.gtceu.oil_medium": "ןıO ʍɐᴚ",
"block.gtceu.opv_1024a_laser_source_hatch": "ɥɔʇɐH ǝɔɹnoS ɹǝsɐꞀ ɹ§Ɐǝ§ㄣᄅ0'Ɩ ɹ§ΛdOן§6§",
"block.gtceu.opv_1024a_laser_target_hatch": "ɥɔʇɐH ʇǝbɹɐ⟘ ɹǝsɐꞀ ɹ§Ɐǝ§ㄣᄅ0'Ɩ ɹ§ΛdOן§6§",
"block.gtceu.opv_16a_energy_converter": "ɹǝʇɹǝʌuoƆ ʎbɹǝuƎ ɹ§Ɐǝ§9Ɩ ɹ§ΛdOן§6§",
@@ -1043,7 +1041,7 @@
"block.gtceu.orange_metal_sheet": "ʇǝǝɥS ןɐʇǝW ǝbuɐɹO",
"block.gtceu.orange_studs": "spnʇS ǝbuɐɹO",
"block.gtceu.overworld_marker": "pןɹoʍɹǝʌO",
- "block.gtceu.palladium_substation": "buısɐƆ uoıʇɐʇsqnS ɯnıpɐןןɐԀ",
+ "block.gtceu.palladium_substation_casing": "buısɐƆ uoıʇɐʇsqnS ɯnıpɐןןɐԀ",
"block.gtceu.pattern_buffer.desc.0": "˙sʞɔoןqıʇןnW ɥɔǝ⟘bǝɹ⅁ ɹoɟɟ§ ǝbɐɹoʇs uɹǝʇʇɐd ᄅƎⱯ9§ ʇɔǝɹıp sʍoןןⱯɟ§",
"block.gtceu.pattern_buffer.desc.1": "˙ʇǝbpıʍɟ§ ʎɹoʇuǝʌuı pǝɹɐɥs9§ ǝɥʇ uı pǝɹoʇs buıɥʇʎuɐ ǝzıןıʇn uɐɔ suɹǝʇʇɐԀ ᄅƎⱯɟ§",
"block.gtceu.pattern_buffer.desc.2": "¡ɹǝɥʇǝboʇ sǝuıɥɔɐɯ ʞuıן oʇɟ§ ʞɔıʇsɐʇɐpq§ ɐ ɥʇıʍɟ§ sǝıxoɹԀ ɹǝɟɟnᗺ uɹǝʇʇɐԀ9§ ʞuıꞀɟ§",
@@ -1077,6 +1075,7 @@
"block.gtceu.purple_studs": "spnʇS ǝןdɹnԀ",
"block.gtceu.pyrolyse_oven": "uǝʌO ǝsʎןoɹʎԀ",
"block.gtceu.radioactive_hazard_sign_block": "ʞɔoןᗺ ubıS pɹɐzɐH ǝʌıʇɔɐoıpɐᴚ",
+ "block.gtceu.raw_oil": "ןıO ʍɐᴚ",
"block.gtceu.reaction_safe_mixing_casing": "buısɐƆ buıxıW ǝɟɐS-uoıʇɔɐǝᴚ",
"block.gtceu.red_borderless_lamp": "dɯɐꞀ ssǝןɹǝpɹoᗺ pǝᴚ",
"block.gtceu.red_granite": "ǝʇıuɐɹ⅁ pǝᴚ",
@@ -1095,6 +1094,7 @@
"block.gtceu.research_station": "uoıʇɐʇS ɥɔɹɐǝsǝᴚ",
"block.gtceu.reservoir_hatch": "ɥɔʇɐH ɹıoʌɹǝsǝᴚ",
"block.gtceu.robust_machine_casing": "buısɐƆ ǝuıɥɔɐW ןǝǝʇsuǝʇsbun⟘ ʇsnqoᴚ",
+ "block.gtceu.rotary_hearth_furnace": "ǝɔɐuɹnℲ ɥʇɹɐǝH ʎɹɐʇoᴚ",
"block.gtceu.rtm_alloy_coil_block": "ʞɔoןᗺ ןıoƆ ʎoןןⱯ W⟘ᴚ",
"block.gtceu.rubber_button": "uoʇʇnᗺ ɹǝqqnᴚ",
"block.gtceu.rubber_door": "ɹooᗡ ɹǝqqnᴚ",
@@ -1129,7 +1129,7 @@
"block.gtceu.stainless_steel_crate": "ǝʇɐɹƆ ןǝǝʇS ssǝןuıɐʇS",
"block.gtceu.stainless_steel_drum": "ɯnɹᗡ ןǝǝʇS ssǝןuıɐʇS",
"block.gtceu.stainless_steel_gearbox": "buısɐƆ xoqɹɐǝ⅁ ןǝǝʇS ssǝןuıɐʇS",
- "block.gtceu.stainless_steel_turbine_casing": "buısɐƆ ǝuıqɹn⟘ ssǝןuıɐʇS",
+ "block.gtceu.stainless_steel_turbine_casing": "buısɐƆ ǝuıqɹn⟘ ןǝǝʇS ssǝןuıɐʇS",
"block.gtceu.steam_casing_bricked_bronze": "ןןnH ǝzuoɹᗺ pǝʞɔıɹᗺ",
"block.gtceu.steam_casing_bricked_bronze.tooltip": "sǝuıɥɔɐW ɯɐǝʇS ʇsɹıɟ ɹnoʎ ɹoℲㄥ§",
"block.gtceu.steam_casing_bricked_steel": "ןןnH uoɹI ʇɥbnoɹM pǝʞɔıɹᗺ",
@@ -1147,7 +1147,6 @@
"block.gtceu.steam_output_bus": "snᗺ ʇndʇnO ɯɐǝʇS",
"block.gtceu.steam_oven": "uǝʌO ɯɐǝʇS",
"block.gtceu.steam_solid_boiler.bronze": "ɹǝןıoᗺ pıןoS ɯɐǝʇS ןןɐɯS",
- "block.gtceu.steel_brick_casing": "buısɐƆ uoɹI ʇɥbnoɹM pǝʞɔıɹᗺ",
"block.gtceu.steel_crate": "ǝʇɐɹƆ ןǝǝʇS",
"block.gtceu.steel_drum": "ɯnɹᗡ ןǝǝʇS",
"block.gtceu.steel_firebox_casing": "buısɐƆ xoqǝɹıℲ ןǝǝʇS",
@@ -1157,7 +1156,6 @@
"block.gtceu.steel_multiblock_tank": "ʞuɐ⟘ ʞɔoןqıʇןnW ןǝǝʇS",
"block.gtceu.steel_pipe_casing": "buısɐƆ ǝdıԀ ןǝǝʇS",
"block.gtceu.steel_tank_valve": "ǝʌןɐΛ ʞuɐ⟘ ןǝǝʇS",
- "block.gtceu.steel_turbine_casing": "buısɐƆ ǝuıqɹn⟘ ɯnıןɐubɐW",
"block.gtceu.sterilizing_filter_casing": "buısɐƆ ɹǝʇןıℲ buızıןıɹǝʇS",
"block.gtceu.stress_proof_casing": "buısɐƆ ɟooɹԀ ssǝɹʇS",
"block.gtceu.stripped_rubber_log": "boꞀ ɹǝqqnᴚ pǝddıɹʇS",
@@ -1166,6 +1164,7 @@
"block.gtceu.substation_capacitor.tooltip_empty": "uoıʇɐʇsqnS ɹǝʍoԀ ɹnoʎ uı ǝɔɐds buıןןıɟ ɹoℲㄥ§",
"block.gtceu.substation_capacitor.tooltip_filled": "∩Ǝ %dɟ§ :ʎʇıɔɐdɐƆ ʎbɹǝuƎɔ§",
"block.gtceu.superconducting_coil": "ʞɔoןᗺ ןıoƆ buıʇɔnpuoɔɹǝdnS",
+ "block.gtceu.surface_rock": "ʞɔoᴚ ǝɔɐɟɹnS %s",
"block.gtceu.tempered_glass": "ssɐן⅁ pǝɹǝdɯǝ⟘",
"block.gtceu.test_mui": "ınW ʇsǝ⟘",
"block.gtceu.the_end_marker": "puƎ ǝɥ⟘",
@@ -1769,7 +1768,6 @@
"block.gtceu.zpm_wiremill": "ɹ§III ןןıɯǝɹıM ǝʇıןƎɔ§",
"block.gtceu.zpm_world_accelerator": "ɹ§III ɹoʇɐɹǝןǝɔɔⱯ pןɹoM ǝʇıןƎɔ§",
"block.sterilizing_filter_casing.tooltip": "ʇuǝɯuoɹıʌuǝ ㄥ§pǝzıןıɹǝʇSɐ§ ɐ sǝʇɐǝɹƆ",
- "block.surface_rock": "ʞɔoᴚ ǝɔɐɟɹnS %s",
"button.gtceu.mark_as_depleted.name": "pǝʇǝןdǝᗡ sɐ ʞɹɐW",
"button.gtceu.toggle_waypoint.name": "ʇuıodʎɐM ǝןbbo⟘",
"command.gtceu.cape.failure.does_not_exist": "ʇsıxǝ ʇou sǝop %s ǝdɐƆ",
@@ -1837,6 +1835,7 @@
"config.gtceu.option.direction": "uoıʇɔǝɹıp",
"config.gtceu.option.disableManualCompression": "uoıssǝɹdɯoƆןɐnuɐWǝןqɐsıp",
"config.gtceu.option.doBedrockOres": "sǝɹOʞɔoɹpǝᗺop",
+ "config.gtceu.option.doDataFixers": "sɹǝxıℲɐʇɐᗡop",
"config.gtceu.option.doSuperflatOres": "sǝɹOʇɐןɟɹǝdnSop",
"config.gtceu.option.doesExplosionDamagesTerrain": "uıɐɹɹǝ⟘sǝbɐɯɐᗡuoısoןdxƎsǝop",
"config.gtceu.option.drum": "ɯnɹp",
@@ -4195,7 +4194,6 @@
"hud.gtceu.armor.hover_mode": "%s :ǝpoW ɹǝʌoH",
"hud.gtceu.armor.status.disabled": "ℲℲOɔ§",
"hud.gtceu.armor.status.enabled": "NOɐ§",
- "item.glass_lens": ")ǝʇıɥM( suǝꞀ ssɐן⅁",
"item.gtceu.activity_detector_cover": "ɹoʇɔǝʇǝᗡ ʎʇıʌıʇɔⱯ",
"item.gtceu.activity_detector_cover.tooltip": "˙ㄥ§ɹǝʌoƆɟ§ sɐ ǝuoʇspǝᴚ sɐ ㄥ§snʇɐʇS ʎʇıʌıʇɔⱯɟ§ ʇno sǝʌı⅁ㄥ§",
"item.gtceu.advanced_activity_detector_cover": "ɹoʇɔǝʇǝᗡ ʎʇıʌıʇɔⱯ pǝɔuɐʌpⱯ",
@@ -4447,6 +4445,7 @@
"item.gtceu.gelled_toluene": "ǝuǝnןo⟘ pǝןןǝ⅁",
"item.gtceu.gelled_toluene.tooltip": "ǝʌısoןdxƎ ʍɐᴚㄥ§",
"item.gtceu.glass_gem": "ןɐʇsʎɹƆ ssɐן⅁",
+ "item.gtceu.glass_lens": ")ǝʇıɥM( suǝꞀ ssɐן⅁",
"item.gtceu.glass_plate": "ǝuɐԀ ssɐן⅁",
"item.gtceu.glass_tube": "ǝqn⟘ ssɐן⅁",
"item.gtceu.glass_vial": "ןɐıΛ ssɐן⅁ %s",
@@ -4718,6 +4717,7 @@
"item.gtceu.naquadah_wafer": "ɹǝɟɐM pǝdop-ɥɐpɐnbɐN",
"item.gtceu.naquadah_wafer.tooltip": "ʇınɔɹıƆ ʍɐᴚㄥ§",
"item.gtceu.netherite_plated": "%s pǝʇɐןԀ-ǝʇıɹǝɥʇǝN",
+ "item.gtceu.netherrack_nether_quartz": "ǝɹO zʇɹɐnὉ ɹǝɥʇǝN",
"item.gtceu.neuro_processing_unit": "ʇıu∩ buıssǝɔoɹԀ oɹnǝN",
"item.gtceu.neuro_processing_unit.tooltip": "∩ԀƆ oɹnǝNㄥ§",
"item.gtceu.neutron_reflector": "ɹoʇɔǝןɟǝᴚ uoɹʇnǝN ɯnıpıɹI",
@@ -4747,7 +4747,6 @@
"item.gtceu.opv_voltage_coil.tooltip": "ןıoƆ ʎɹɐpuǝbǝꞀ",
"item.gtceu.orange_dye_spray_can": ")ǝbuɐɹO( uɐƆ ʎɐɹdS",
"item.gtceu.orange_glass_lens": ")ǝbuɐɹO( suǝꞀ ssɐן⅁",
- "item.gtceu.palladium_raw_dust": "ɹǝpʍoԀ ɯnıpɐןןɐԀ ʍɐᴚ",
"item.gtceu.paper_dust": "pɐɥƆ",
"item.gtceu.paracetamol_pill": "ןןıԀ ןoɯɐʇǝɔɐɹɐԀ",
"item.gtceu.petri_dish": "ɥsıᗡ ıɹʇǝԀ",
@@ -4848,6 +4847,7 @@
"item.gtceu.raw_crystal_chip.tooltip": "ɹossǝɔoɹԀ ןɐʇsʎɹƆ ʍɐᴚㄥ§",
"item.gtceu.raw_crystal_chip_parts": "sʇɹɐԀ dıɥƆ ןɐʇsʎɹƆ ʍɐᴚ",
"item.gtceu.raw_crystal_chip_parts.tooltip": "sʇɹɐԀ ɹossǝɔoɹԀ ןɐʇsʎɹƆ ʍɐᴚㄥ§",
+ "item.gtceu.raw_palladium_dust": "ɹǝpʍoԀ ɯnıpɐןןɐԀ ʍɐᴚ",
"item.gtceu.red_dye_spray_can": ")pǝᴚ( uɐƆ ʎɐɹdS",
"item.gtceu.red_glass_lens": ")pǝᴚ( suǝꞀ ssɐן⅁",
"item.gtceu.refined_bentonite_ore": "ǝʇıuoʇuǝᗺ pǝuıɟǝᴚ",
@@ -4902,7 +4902,6 @@
"item.gtceu.small_inert_metal_mixture_dust": "ǝɹnʇxıW ןɐʇǝW ʇɹǝuI ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_iridium_metal_residue_dust": "ǝnpısǝᴚ ןɐʇǝW ɯnıpıɹI ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_meat_dust": "ʇɐǝW ǝɔuıW ɟo ǝןıԀ ןןɐɯS",
- "item.gtceu.small_palladium_raw_dust": "ɹǝpʍoԀ ɯnıpɐןןɐԀ ʍɐᴚ ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_paper_dust": "pɐɥƆ ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_pipe_casting_mold": ")ǝdıԀ ןןɐɯS( pןoW buıʇsɐƆ",
"item.gtceu.small_pipe_extruder_mold": ")ǝdıԀ ןןɐɯS( pןoW ɹǝpnɹʇxƎ",
@@ -4913,6 +4912,7 @@
"item.gtceu.small_quartz_sand_dust": "puɐS zʇɹɐnὉ ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_rare_earth_dust": "ɥʇɹɐƎ ǝɹɐᴚ ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_rarest_metal_mixture_dust": "ǝɹnʇxıW ןɐʇǝW ʇsǝɹɐᴚ ɟo ǝןıԀ ןןɐɯS",
+ "item.gtceu.small_raw_palladium_dust": "ɹǝpʍoԀ ɯnıpɐןןɐԀ ʍɐᴚ ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_rock_salt_dust": "ʇןɐS ʞɔoᴚ ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_salt_dust": "ʇןɐS ɟo ǝןıԀ ןןɐɯS",
"item.gtceu.small_sugar_dust": "ɹɐbnS ɟo ǝןıԀ ןןɐɯS",
@@ -4977,7 +4977,6 @@
"item.gtceu.tiny_inert_metal_mixture_dust": "ǝɹnʇxıW ןɐʇǝW ʇɹǝuI ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_iridium_metal_residue_dust": "ǝnpısǝᴚ ןɐʇǝW ɯnıpıɹI ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_meat_dust": "ʇɐǝW ǝɔuıW ɟo ǝןıԀ ʎuı⟘",
- "item.gtceu.tiny_palladium_raw_dust": "ɹǝpʍoԀ ɯnıpɐןןɐԀ ʍɐᴚ ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_paper_dust": "pɐɥƆ ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_pipe_casting_mold": ")ǝdıԀ ʎuı⟘( pןoW buıʇsɐƆ",
"item.gtceu.tiny_pipe_extruder_mold": ")ǝdıԀ ʎuı⟘( pןoW ɹǝpnɹʇxƎ",
@@ -4988,6 +4987,7 @@
"item.gtceu.tiny_quartz_sand_dust": "puɐS zʇɹɐnὉ ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_rare_earth_dust": "ɥʇɹɐƎ ǝɹɐᴚ ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_rarest_metal_mixture_dust": "ǝɹnʇxıW ןɐʇǝW ʇsǝɹɐᴚ ɟo ǝןıԀ ʎuı⟘",
+ "item.gtceu.tiny_raw_palladium_dust": "ɹǝpʍoԀ ɯnıpɐןןɐԀ ʍɐᴚ ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_rock_salt_dust": "ʇןɐS ʞɔoᴚ ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_salt_dust": "ʇןɐS ɟo ǝןıԀ ʎuı⟘",
"item.gtceu.tiny_sugar_dust": "ɹɐbnS ɟo ǝןıԀ ʎuı⟘",
@@ -5113,8 +5113,9 @@
"item.gtceu.treated_wood_rod": "ʞɔıʇS pooM pǝʇɐǝɹ⟘",
"item.gtceu.tungsten_grinding_head": "pɐǝH buıpuıɹ⅁ uǝʇsbun⟘",
"item.gtceu.tungsten_steel_fluid_cell": "ןןǝƆ ןǝǝʇsuǝʇsbun⟘ %s",
- "item.gtceu.turbine_rotor": "ɹoʇoᴚ ǝuıqɹn⟘ %s",
"item.gtceu.turbine_rotor.tooltip": "uoıʇɐʇs ɹǝʍod ɹnoʎ ɹoɟ sɹoʇoᴚ ǝuıqɹn⟘",
+ "item.gtceu.turbine_rotor.tooltip.efficiency": "%s%%6§ :ʎɔuǝıɔıɟɟƎ ǝuıqɹn⟘",
+ "item.gtceu.turbine_rotor.tooltip.power": "%s%%6§ :ɹǝʍoԀ ǝuıqɹn⟘",
"item.gtceu.uev_conveyor_module": "ǝןnpoW ɹoʎǝʌuoƆ ΛƎ∩",
"item.gtceu.uev_electric_motor": "ɹoʇoW ɔıɹʇɔǝןƎ ΛƎ∩",
"item.gtceu.uev_electric_piston": "uoʇsıԀ ɔıɹʇɔǝןƎ ΛƎ∩",
@@ -5231,7 +5232,6 @@
"item.gtceu.zpm_voltage_coil": "ןıoƆ ǝbɐʇןoΛ ǝןnpoW ʇuıoԀ oɹǝZ",
"item.gtceu.zpm_voltage_coil.tooltip": "ןıoƆ ɹǝdnS",
"item.invalid.name": "ɯǝʇı pıןɐʌuI",
- "item.netherrack_nether_quartz": "ǝɹO zʇɹɐnὉ ɹǝɥʇǝN",
"itemGroup.gtceu.decoration": "sʞɔoןᗺ uoıʇɐɹoɔǝᗡ nƎƆɥɔǝ⟘bǝɹ⅁",
"itemGroup.gtceu.item": "sɯǝʇI nƎƆɥɔǝ⟘bǝɹ⅁",
"itemGroup.gtceu.machine": "sǝuıɥɔɐW nƎƆɥɔǝ⟘bǝɹ⅁",
@@ -5481,7 +5481,6 @@
"material.gtceu.goethite": "ǝʇıɥʇǝo⅁",
"material.gtceu.gold": "pןo⅁",
"material.gtceu.granite": "ǝʇıuɐɹ⅁",
- "material.gtceu.granite_red": "pǝᴚ ǝʇıuɐɹ⅁",
"material.gtceu.granitic_mineral_sand": "puɐS ןɐɹǝuıW ɔıʇıuɐɹ⅁",
"material.gtceu.graphene": "ǝuǝɥdɐɹ⅁",
"material.gtceu.graphite": "ǝʇıɥdɐɹ⅁",
@@ -5497,6 +5496,7 @@
"material.gtceu.hastelloy_c_276": "9ㄥᄅ-Ɔ ʎoןןǝʇsɐH",
"material.gtceu.hastelloy_x": "X ʎoןןǝʇsɐH",
"material.gtceu.heavy_fuel": "ןǝnℲ ʎʌɐǝH",
+ "material.gtceu.heavy_oil": "ןıO ʎʌɐǝH",
"material.gtceu.heavy_rare_earth_sludge": "ǝbpnןS ɥʇɹɐƎ ǝɹɐᴚ ʎʌɐǝH",
"material.gtceu.helium": "ɯnıןǝH",
"material.gtceu.helium_3": "Ɛ ɯnıןǝH",
@@ -5557,6 +5557,7 @@
"material.gtceu.light_blue_dye": "ǝʎᗡ ǝnןᗺ ʇɥbıꞀ",
"material.gtceu.light_fuel": "ןǝnℲ ʇɥbıꞀ",
"material.gtceu.light_gray_dye": "ǝʎᗡ ʎɐɹ⅁ ʇɥbıꞀ",
+ "material.gtceu.light_oil": "ןıO ʇɥbıꞀ",
"material.gtceu.light_rare_earth_sludge": "ǝbpnןS ɥʇɹɐƎ ǝɹɐᴚ ʇɥbıꞀ",
"material.gtceu.lightly_hydro_cracked_gas": "sɐ⅁ pǝʞɔɐɹƆ-oɹpʎH ʎןʇɥbıꞀ",
"material.gtceu.lightly_hydro_cracked_heavy_fuel": "ןǝnℲ ʎʌɐǝH pǝʞɔɐɹƆ-oɹpʎH ʎןʇɥbıꞀ",
@@ -5653,9 +5654,6 @@
"material.gtceu.octane": "ǝuɐʇɔO",
"material.gtceu.oganesson": "uossǝuɐbO",
"material.gtceu.oil": "ןıO",
- "material.gtceu.oil_heavy": "ןıO ʎʌɐǝH",
- "material.gtceu.oil_light": "ןıO ʇɥbıꞀ",
- "material.gtceu.oil_medium": "ןıO ʍɐᴚ",
"material.gtceu.oilsands": "spuɐsןıO",
"material.gtceu.olivine": "ǝuıʌıןO",
"material.gtceu.opal": "ןɐdO",
@@ -5665,7 +5663,6 @@
"material.gtceu.osmium_tetroxide": "ǝpıxoɹʇǝ⟘ ɯnıɯsO",
"material.gtceu.oxygen": "uǝbʎxO",
"material.gtceu.palladium": "ɯnıpɐןןɐԀ",
- "material.gtceu.palladium_raw": "ʍɐᴚ ɯnıpɐןןɐԀ",
"material.gtceu.paper": "ɹǝdɐԀ",
"material.gtceu.paracetamol": "ןoɯɐʇǝɔɐɹɐԀ",
"material.gtceu.pcb_coolant": "ʇuɐןooƆ ᗺƆԀ",
@@ -5731,12 +5728,15 @@
"material.gtceu.rarest_metal_mixture": "ǝɹnʇxıW ןɐʇǝW ʇsǝɹɐᴚ",
"material.gtceu.raw_gasoline": "ǝuıןosɐ⅁ ʍɐᴚ",
"material.gtceu.raw_growth_medium": "ɯnıpǝW ɥʇʍoɹ⅁ ʍɐᴚ",
+ "material.gtceu.raw_oil": "ןıO ʍɐᴚ",
+ "material.gtceu.raw_palladium": "ɯnıpɐןןɐԀ ʍɐᴚ",
"material.gtceu.raw_rubber": "ɹǝqqnᴚ ʍɐᴚ",
"material.gtceu.raw_styrene_butadiene_rubber": "ɹǝqqnᴚ ǝuǝıpɐʇnᗺ ǝuǝɹʎʇS ʍɐᴚ",
"material.gtceu.realgar": "ɹɐbןɐǝᴚ",
"material.gtceu.red_alloy": "ʎoןןⱯ pǝᴚ",
"material.gtceu.red_dye": "ǝʎᗡ pǝᴚ",
"material.gtceu.red_garnet": "ʇǝuɹɐ⅁ pǝᴚ",
+ "material.gtceu.red_granite": "ǝʇıuɐɹ⅁ pǝᴚ",
"material.gtceu.red_steel": "ןǝǝʇS pǝᴚ",
"material.gtceu.redrock": "ʞɔoɹpǝᴚ",
"material.gtceu.redstone": "ǝuoʇspǝᴚ",
@@ -6160,6 +6160,7 @@
"tagprefix.tiny_dust": "ʇsnᗡ %s ɟo ǝןıԀ ʎuı⟘",
"tagprefix.tuff": "ǝɹO %s ɟɟn⟘",
"tagprefix.turbine_blade": "ǝpɐןᗺ ǝuıqɹn⟘ %s",
+ "tagprefix.turbine_rotor": "ɹoʇoᴚ ǝuıqɹn⟘ %s",
"tagprefix.wire_cutter_head": "pɐǝH ɹǝʇʇnƆ ǝɹıM %s",
"tagprefix.wire_gt_double": "ǝɹıM %s xᄅ",
"tagprefix.wire_gt_hex": "ǝɹıM %s x9Ɩ",
diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json
index b10a2185cd8..33b30ba11e7 100644
--- a/src/generated/resources/assets/gtceu/lang/en_us.json
+++ b/src/generated/resources/assets/gtceu/lang/en_us.json
@@ -134,10 +134,10 @@
"block.gtceu.aluminium_crate": "Aluminium Crate",
"block.gtceu.aluminium_drum": "Aluminium Drum",
"block.gtceu.antimatter_hazard_sign_block": "Antimatter Hazard Sign Block",
+ "block.gtceu.assembly_control_casing": "Assembly Control Casing",
"block.gtceu.assembly_line": "Assembly Line",
- "block.gtceu.assembly_line_casing": "Assembly Line Casing",
"block.gtceu.assembly_line_grating": "Assembly Line Grating",
- "block.gtceu.assembly_line_unit": "Assembly Control Casing",
+ "block.gtceu.assembly_line_unit": "Assembly Line Unit",
"block.gtceu.atomic_casing": "Atomic Casing",
"block.gtceu.auto_maintenance_hatch": "Auto Maintenance Hatch",
"block.gtceu.basic_data_access_hatch": "Basic Data Access Hatch",
@@ -153,8 +153,9 @@
"block.gtceu.blue_metal_sheet": "Blue Metal Sheet",
"block.gtceu.blue_studs": "Blue Studs",
"block.gtceu.boss_hazard_sign_block": "Boss Hazard Sign Block",
+ "block.gtceu.bricked_bronze_casing": "Bricked Bronze Casing",
+ "block.gtceu.bricked_wrought_iron_casing": "Bricked Wrought Iron Casing",
"block.gtceu.brittle_charcoal": "Brittle Charcoal",
- "block.gtceu.bronze_brick_casing": "Bricked Bronze Casing",
"block.gtceu.bronze_crate": "Bronze Crate",
"block.gtceu.bronze_drum": "Bronze Drum",
"block.gtceu.bronze_firebox_casing": "Bronze Firebox Casing",
@@ -169,8 +170,7 @@
"block.gtceu.brown_large_metal_sheet": "Brown Large Metal Sheet",
"block.gtceu.brown_metal_sheet": "Brown Metal Sheet",
"block.gtceu.brown_studs": "Brown Studs",
- "block.gtceu.casing_coke_bricks": "Coke Oven Bricks",
- "block.gtceu.casing_grate": "Grate Machine Casing",
+ "block.gtceu.bulk_blast_chiller": "Bulk Blast Chiller",
"block.gtceu.causality_hazard_sign_block": "Causality Hazard Sign Block",
"block.gtceu.central_monitor": "Central Monitor",
"block.gtceu.charcoal_pile_igniter": "Charcoal Pile Igniter",
@@ -348,6 +348,7 @@
"block.gtceu.gregification_hazard_sign_block": "Gregification Hazard Sign Block",
"block.gtceu.heat_vent": "Heat Vent",
"block.gtceu.heatproof_machine_casing": "Heat Proof Invar Machine Casing",
+ "block.gtceu.heavy_oil": "Heavy Oil",
"block.gtceu.high_performance_computation_array": "High Performance Computation Array (HPCA)",
"block.gtceu.high_power_casing": "High Power Casing",
"block.gtceu.high_pressure_hazard_sign_block": "High Pressure Hazard Sign Block",
@@ -597,6 +598,7 @@
"block.gtceu.light_gray_large_metal_sheet": "Light Gray Large Metal Sheet",
"block.gtceu.light_gray_metal_sheet": "Light Gray Metal Sheet",
"block.gtceu.light_gray_studs": "Light Gray Studs",
+ "block.gtceu.light_oil": "Light Oil",
"block.gtceu.lime_borderless_lamp": "Lime Borderless Lamp",
"block.gtceu.lime_lamp": "Lime Lamp",
"block.gtceu.lime_large_metal_sheet": "Lime Large Metal Sheet",
@@ -798,6 +800,7 @@
"block.gtceu.magenta_metal_sheet": "Magenta Metal Sheet",
"block.gtceu.magenta_studs": "Magenta Studs",
"block.gtceu.magic_hazard_sign_block": "Magic Hazard Sign Block",
+ "block.gtceu.magnalium_turbine_casing": "Magnalium Turbine Casing",
"block.gtceu.magnetic_hazard_sign_block": "Magnetic Hazard Sign Block",
"block.gtceu.maintenance_hatch": "Maintenance Hatch",
"block.gtceu.marble": "Marble",
@@ -843,8 +846,6 @@
"block.gtceu.me_pattern_buffer_proxy": "ME Pattern Buffer Proxy",
"block.gtceu.me_stocking_input_bus": "ME Stocking Input Bus",
"block.gtceu.me_stocking_input_hatch": "ME Stocking Input Hatch",
- "block.gtceu.mega_blast_furnace": "Rotary Hearth Furnace",
- "block.gtceu.mega_vacuum_freezer": "Bulk Blast Chiller",
"block.gtceu.miner_pipe": "Miner Pipe",
"block.gtceu.mob_infestation_hazard_sign_block": "Mob Infestation Hazard Sign Block",
"block.gtceu.mob_spawner_hazard_sign_block": "Mob Spawner Hazard Sign Block",
@@ -950,9 +951,6 @@
"block.gtceu.normal_optical_pipe.tooltip": "§7Transmitting §fComputation§7 or §fResearch Data§7",
"block.gtceu.object_holder": "Object Holder",
"block.gtceu.oil": "Oil",
- "block.gtceu.oil_heavy": "Heavy Oil",
- "block.gtceu.oil_light": "Light Oil",
- "block.gtceu.oil_medium": "Raw Oil",
"block.gtceu.opv_1024a_laser_source_hatch": "§9§lOpV§r 1,024§eA§r Laser Source Hatch",
"block.gtceu.opv_1024a_laser_target_hatch": "§9§lOpV§r 1,024§eA§r Laser Target Hatch",
"block.gtceu.opv_16a_energy_converter": "§9§lOpV§r 16§eA§r Energy Converter",
@@ -1043,7 +1041,7 @@
"block.gtceu.orange_metal_sheet": "Orange Metal Sheet",
"block.gtceu.orange_studs": "Orange Studs",
"block.gtceu.overworld_marker": "Overworld",
- "block.gtceu.palladium_substation": "Palladium Substation Casing",
+ "block.gtceu.palladium_substation_casing": "Palladium Substation Casing",
"block.gtceu.pattern_buffer.desc.0": "§fAllows direct §6AE2 pattern storage §ffor GregTech Multiblocks.",
"block.gtceu.pattern_buffer.desc.1": "§fAE2 Patterns can utilize anything stored in the §6shared inventory §fwidget.",
"block.gtceu.pattern_buffer.desc.2": "§fLink §6Pattern Buffer Proxies §fwith a §bdatastick §fto link machines together!",
@@ -1077,6 +1075,7 @@
"block.gtceu.purple_studs": "Purple Studs",
"block.gtceu.pyrolyse_oven": "Pyrolyse Oven",
"block.gtceu.radioactive_hazard_sign_block": "Radioactive Hazard Sign Block",
+ "block.gtceu.raw_oil": "Raw Oil",
"block.gtceu.reaction_safe_mixing_casing": "Reaction-Safe Mixing Casing",
"block.gtceu.red_borderless_lamp": "Red Borderless Lamp",
"block.gtceu.red_granite": "Red Granite",
@@ -1095,6 +1094,7 @@
"block.gtceu.research_station": "Research Station",
"block.gtceu.reservoir_hatch": "Reservoir Hatch",
"block.gtceu.robust_machine_casing": "Robust Tungstensteel Machine Casing",
+ "block.gtceu.rotary_hearth_furnace": "Rotary Hearth Furnace",
"block.gtceu.rtm_alloy_coil_block": "RTM Alloy Coil Block",
"block.gtceu.rubber_button": "Rubber Button",
"block.gtceu.rubber_door": "Rubber Door",
@@ -1129,7 +1129,7 @@
"block.gtceu.stainless_steel_crate": "Stainless Steel Crate",
"block.gtceu.stainless_steel_drum": "Stainless Steel Drum",
"block.gtceu.stainless_steel_gearbox": "Stainless Steel Gearbox Casing",
- "block.gtceu.stainless_steel_turbine_casing": "Stainless Turbine Casing",
+ "block.gtceu.stainless_steel_turbine_casing": "Stainless Steel Turbine Casing",
"block.gtceu.steam_casing_bricked_bronze": "Bricked Bronze Hull",
"block.gtceu.steam_casing_bricked_bronze.tooltip": "§7For your first Steam Machines",
"block.gtceu.steam_casing_bricked_steel": "Bricked Wrought Iron Hull",
@@ -1147,7 +1147,6 @@
"block.gtceu.steam_output_bus": "Steam Output Bus",
"block.gtceu.steam_oven": "Steam Oven",
"block.gtceu.steam_solid_boiler.bronze": "Small Steam Solid Boiler",
- "block.gtceu.steel_brick_casing": "Bricked Wrought Iron Casing",
"block.gtceu.steel_crate": "Steel Crate",
"block.gtceu.steel_drum": "Steel Drum",
"block.gtceu.steel_firebox_casing": "Steel Firebox Casing",
@@ -1157,7 +1156,6 @@
"block.gtceu.steel_multiblock_tank": "Steel Multiblock Tank",
"block.gtceu.steel_pipe_casing": "Steel Pipe Casing",
"block.gtceu.steel_tank_valve": "Steel Tank Valve",
- "block.gtceu.steel_turbine_casing": "Magnalium Turbine Casing",
"block.gtceu.sterilizing_filter_casing": "Sterilizing Filter Casing",
"block.gtceu.stress_proof_casing": "Stress Proof Casing",
"block.gtceu.stripped_rubber_log": "Stripped Rubber Log",
@@ -1166,6 +1164,7 @@
"block.gtceu.substation_capacitor.tooltip_empty": "§7For filling space in your Power Substation",
"block.gtceu.substation_capacitor.tooltip_filled": "§cEnergy Capacity: §f%d EU",
"block.gtceu.superconducting_coil": "Superconducting Coil Block",
+ "block.gtceu.surface_rock": "%s Surface Rock",
"block.gtceu.tempered_glass": "Tempered Glass",
"block.gtceu.test_mui": "Test Mui",
"block.gtceu.the_end_marker": "The End",
@@ -1769,7 +1768,6 @@
"block.gtceu.zpm_wiremill": "§cElite Wiremill III§r",
"block.gtceu.zpm_world_accelerator": "§cElite World Accelerator III§r",
"block.sterilizing_filter_casing.tooltip": "Creates a §aSterilized§7 environment",
- "block.surface_rock": "%s Surface Rock",
"button.gtceu.mark_as_depleted.name": "Mark as Depleted",
"button.gtceu.toggle_waypoint.name": "Toggle Waypoint",
"command.gtceu.cape.failure.does_not_exist": "Cape %s does not exist",
@@ -1837,6 +1835,7 @@
"config.gtceu.option.direction": "direction",
"config.gtceu.option.disableManualCompression": "disableManualCompression",
"config.gtceu.option.doBedrockOres": "doBedrockOres",
+ "config.gtceu.option.doDataFixers": "doDataFixers",
"config.gtceu.option.doSuperflatOres": "doSuperflatOres",
"config.gtceu.option.doesExplosionDamagesTerrain": "doesExplosionDamagesTerrain",
"config.gtceu.option.drum": "drum",
@@ -4195,7 +4194,6 @@
"hud.gtceu.armor.hover_mode": "Hover Mode: %s",
"hud.gtceu.armor.status.disabled": "§cOFF",
"hud.gtceu.armor.status.enabled": "§aON",
- "item.glass_lens": "Glass Lens (White)",
"item.gtceu.activity_detector_cover": "Activity Detector",
"item.gtceu.activity_detector_cover.tooltip": "§7Gives out §fActivity Status§7 as Redstone as §fCover§7.",
"item.gtceu.advanced_activity_detector_cover": "Advanced Activity Detector",
@@ -4447,6 +4445,7 @@
"item.gtceu.gelled_toluene": "Gelled Toluene",
"item.gtceu.gelled_toluene.tooltip": "§7Raw Explosive",
"item.gtceu.glass_gem": "Glass Crystal",
+ "item.gtceu.glass_lens": "Glass Lens (White)",
"item.gtceu.glass_plate": "Glass Pane",
"item.gtceu.glass_tube": "Glass Tube",
"item.gtceu.glass_vial": "%s Glass Vial",
@@ -4718,6 +4717,7 @@
"item.gtceu.naquadah_wafer": "Naquadah-doped Wafer",
"item.gtceu.naquadah_wafer.tooltip": "§7Raw Circuit",
"item.gtceu.netherite_plated": "Netherite-Plated %s",
+ "item.gtceu.netherrack_nether_quartz": "Nether Quartz Ore",
"item.gtceu.neuro_processing_unit": "Neuro Processing Unit",
"item.gtceu.neuro_processing_unit.tooltip": "§7Neuro CPU",
"item.gtceu.neutron_reflector": "Iridium Neutron Reflector",
@@ -4747,7 +4747,6 @@
"item.gtceu.opv_voltage_coil.tooltip": "Legendary Coil",
"item.gtceu.orange_dye_spray_can": "Spray Can (Orange)",
"item.gtceu.orange_glass_lens": "Glass Lens (Orange)",
- "item.gtceu.palladium_raw_dust": "Raw Palladium Powder",
"item.gtceu.paper_dust": "Chad",
"item.gtceu.paracetamol_pill": "Paracetamol Pill",
"item.gtceu.petri_dish": "Petri Dish",
@@ -4848,6 +4847,7 @@
"item.gtceu.raw_crystal_chip.tooltip": "§7Raw Crystal Processor",
"item.gtceu.raw_crystal_chip_parts": "Raw Crystal Chip Parts",
"item.gtceu.raw_crystal_chip_parts.tooltip": "§7Raw Crystal Processor Parts",
+ "item.gtceu.raw_palladium_dust": "Raw Palladium Powder",
"item.gtceu.red_dye_spray_can": "Spray Can (Red)",
"item.gtceu.red_glass_lens": "Glass Lens (Red)",
"item.gtceu.refined_bentonite_ore": "Refined Bentonite",
@@ -4902,7 +4902,6 @@
"item.gtceu.small_inert_metal_mixture_dust": "Small Pile of Inert Metal Mixture",
"item.gtceu.small_iridium_metal_residue_dust": "Small Pile of Iridium Metal Residue",
"item.gtceu.small_meat_dust": "Small Pile of Mince Meat",
- "item.gtceu.small_palladium_raw_dust": "Small Pile of Raw Palladium Powder",
"item.gtceu.small_paper_dust": "Small Pile of Chad",
"item.gtceu.small_pipe_casting_mold": "Casting Mold (Small Pipe)",
"item.gtceu.small_pipe_extruder_mold": "Extruder Mold (Small Pipe)",
@@ -4913,6 +4912,7 @@
"item.gtceu.small_quartz_sand_dust": "Small Pile of Quartz Sand",
"item.gtceu.small_rare_earth_dust": "Small Pile of Rare Earth",
"item.gtceu.small_rarest_metal_mixture_dust": "Small Pile of Rarest Metal Mixture",
+ "item.gtceu.small_raw_palladium_dust": "Small Pile of Raw Palladium Powder",
"item.gtceu.small_rock_salt_dust": "Small Pile of Rock Salt",
"item.gtceu.small_salt_dust": "Small Pile of Salt",
"item.gtceu.small_sugar_dust": "Small Pile of Sugar",
@@ -4977,7 +4977,6 @@
"item.gtceu.tiny_inert_metal_mixture_dust": "Tiny Pile of Inert Metal Mixture",
"item.gtceu.tiny_iridium_metal_residue_dust": "Tiny Pile of Iridium Metal Residue",
"item.gtceu.tiny_meat_dust": "Tiny Pile of Mince Meat",
- "item.gtceu.tiny_palladium_raw_dust": "Tiny Pile of Raw Palladium Powder",
"item.gtceu.tiny_paper_dust": "Tiny Pile of Chad",
"item.gtceu.tiny_pipe_casting_mold": "Casting Mold (Tiny Pipe)",
"item.gtceu.tiny_pipe_extruder_mold": "Extruder Mold (Tiny Pipe)",
@@ -4988,6 +4987,7 @@
"item.gtceu.tiny_quartz_sand_dust": "Tiny Pile of Quartz Sand",
"item.gtceu.tiny_rare_earth_dust": "Tiny Pile of Rare Earth",
"item.gtceu.tiny_rarest_metal_mixture_dust": "Tiny Pile of Rarest Metal Mixture",
+ "item.gtceu.tiny_raw_palladium_dust": "Tiny Pile of Raw Palladium Powder",
"item.gtceu.tiny_rock_salt_dust": "Tiny Pile of Rock Salt",
"item.gtceu.tiny_salt_dust": "Tiny Pile of Salt",
"item.gtceu.tiny_sugar_dust": "Tiny Pile of Sugar",
@@ -5113,8 +5113,9 @@
"item.gtceu.treated_wood_rod": "Treated Wood Stick",
"item.gtceu.tungsten_grinding_head": "Tungsten Grinding Head",
"item.gtceu.tungsten_steel_fluid_cell": "%s Tungstensteel Cell",
- "item.gtceu.turbine_rotor": "%s Turbine Rotor",
"item.gtceu.turbine_rotor.tooltip": "Turbine Rotors for your power station",
+ "item.gtceu.turbine_rotor.tooltip.efficiency": "Turbine Efficiency: §9%s%%",
+ "item.gtceu.turbine_rotor.tooltip.power": "Turbine Power: §9%s%%",
"item.gtceu.uev_conveyor_module": "UEV Conveyor Module",
"item.gtceu.uev_electric_motor": "UEV Electric Motor",
"item.gtceu.uev_electric_piston": "UEV Electric Piston",
@@ -5231,7 +5232,6 @@
"item.gtceu.zpm_voltage_coil": "Zero Point Module Voltage Coil",
"item.gtceu.zpm_voltage_coil.tooltip": "Super Coil",
"item.invalid.name": "Invalid item",
- "item.netherrack_nether_quartz": "Nether Quartz Ore",
"itemGroup.gtceu.decoration": "GregTechCEu Decoration Blocks",
"itemGroup.gtceu.item": "GregTechCEu Items",
"itemGroup.gtceu.machine": "GregTechCEu Machines",
@@ -5481,7 +5481,6 @@
"material.gtceu.goethite": "Goethite",
"material.gtceu.gold": "Gold",
"material.gtceu.granite": "Granite",
- "material.gtceu.granite_red": "Granite Red",
"material.gtceu.granitic_mineral_sand": "Granitic Mineral Sand",
"material.gtceu.graphene": "Graphene",
"material.gtceu.graphite": "Graphite",
@@ -5497,6 +5496,7 @@
"material.gtceu.hastelloy_c_276": "Hastelloy C-276",
"material.gtceu.hastelloy_x": "Hastelloy X",
"material.gtceu.heavy_fuel": "Heavy Fuel",
+ "material.gtceu.heavy_oil": "Heavy Oil",
"material.gtceu.heavy_rare_earth_sludge": "Heavy Rare Earth Sludge",
"material.gtceu.helium": "Helium",
"material.gtceu.helium_3": "Helium 3",
@@ -5557,6 +5557,7 @@
"material.gtceu.light_blue_dye": "Light Blue Dye",
"material.gtceu.light_fuel": "Light Fuel",
"material.gtceu.light_gray_dye": "Light Gray Dye",
+ "material.gtceu.light_oil": "Light Oil",
"material.gtceu.light_rare_earth_sludge": "Light Rare Earth Sludge",
"material.gtceu.lightly_hydro_cracked_gas": "Lightly Hydro-Cracked Gas",
"material.gtceu.lightly_hydro_cracked_heavy_fuel": "Lightly Hydro-Cracked Heavy Fuel",
@@ -5653,9 +5654,6 @@
"material.gtceu.octane": "Octane",
"material.gtceu.oganesson": "Oganesson",
"material.gtceu.oil": "Oil",
- "material.gtceu.oil_heavy": "Heavy Oil",
- "material.gtceu.oil_light": "Light Oil",
- "material.gtceu.oil_medium": "Raw Oil",
"material.gtceu.oilsands": "Oilsands",
"material.gtceu.olivine": "Olivine",
"material.gtceu.opal": "Opal",
@@ -5665,7 +5663,6 @@
"material.gtceu.osmium_tetroxide": "Osmium Tetroxide",
"material.gtceu.oxygen": "Oxygen",
"material.gtceu.palladium": "Palladium",
- "material.gtceu.palladium_raw": "Palladium Raw",
"material.gtceu.paper": "Paper",
"material.gtceu.paracetamol": "Paracetamol",
"material.gtceu.pcb_coolant": "PCB Coolant",
@@ -5731,12 +5728,15 @@
"material.gtceu.rarest_metal_mixture": "Rarest Metal Mixture",
"material.gtceu.raw_gasoline": "Raw Gasoline",
"material.gtceu.raw_growth_medium": "Raw Growth Medium",
+ "material.gtceu.raw_oil": "Raw Oil",
+ "material.gtceu.raw_palladium": "Raw Palladium",
"material.gtceu.raw_rubber": "Raw Rubber",
"material.gtceu.raw_styrene_butadiene_rubber": "Raw Styrene Butadiene Rubber",
"material.gtceu.realgar": "Realgar",
"material.gtceu.red_alloy": "Red Alloy",
"material.gtceu.red_dye": "Red Dye",
"material.gtceu.red_garnet": "Red Garnet",
+ "material.gtceu.red_granite": "Red Granite",
"material.gtceu.red_steel": "Red Steel",
"material.gtceu.redrock": "Redrock",
"material.gtceu.redstone": "Redstone",
@@ -6160,6 +6160,7 @@
"tagprefix.tiny_dust": "Tiny Pile of %s Dust",
"tagprefix.tuff": "Tuff %s Ore",
"tagprefix.turbine_blade": "%s Turbine Blade",
+ "tagprefix.turbine_rotor": "%s Turbine Rotor",
"tagprefix.wire_cutter_head": "%s Wire Cutter Head",
"tagprefix.wire_gt_double": "2x %s Wire",
"tagprefix.wire_gt_hex": "16x %s Wire",
diff --git a/src/generated/resources/assets/gtceu/models/block/assembly_line_casing.json b/src/generated/resources/assets/gtceu/models/block/assembly_control_casing.json
similarity index 100%
rename from src/generated/resources/assets/gtceu/models/block/assembly_line_casing.json
rename to src/generated/resources/assets/gtceu/models/block/assembly_control_casing.json
diff --git a/src/generated/resources/assets/gtceu/models/block/bronze_brick_casing.json b/src/generated/resources/assets/gtceu/models/block/bricked_bronze_casing.json
similarity index 100%
rename from src/generated/resources/assets/gtceu/models/block/bronze_brick_casing.json
rename to src/generated/resources/assets/gtceu/models/block/bricked_bronze_casing.json
diff --git a/src/generated/resources/assets/gtceu/models/block/steel_brick_casing.json b/src/generated/resources/assets/gtceu/models/block/bricked_wrought_iron_casing.json
similarity index 100%
rename from src/generated/resources/assets/gtceu/models/block/steel_brick_casing.json
rename to src/generated/resources/assets/gtceu/models/block/bricked_wrought_iron_casing.json
diff --git a/src/generated/resources/assets/gtceu/models/block/heavy_oil.json b/src/generated/resources/assets/gtceu/models/block/heavy_oil.json
new file mode 100644
index 00000000000..b74b02b070e
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/block/heavy_oil.json
@@ -0,0 +1,5 @@
+{
+ "textures": {
+ "particle": "gtceu:block/fluids/fluid.heavy_oil"
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/block/light_oil.json b/src/generated/resources/assets/gtceu/models/block/light_oil.json
new file mode 100644
index 00000000000..a6ff95ff321
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/block/light_oil.json
@@ -0,0 +1,5 @@
+{
+ "textures": {
+ "particle": "gtceu:block/fluids/fluid.light_oil"
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/block/machine/mega_vacuum_freezer.json b/src/generated/resources/assets/gtceu/models/block/machine/bulk_blast_chiller.json
similarity index 68%
rename from src/generated/resources/assets/gtceu/models/block/machine/mega_vacuum_freezer.json
rename to src/generated/resources/assets/gtceu/models/block/machine/bulk_blast_chiller.json
index 656a0a17923..da60f8b292c 100644
--- a/src/generated/resources/assets/gtceu/models/block/machine/mega_vacuum_freezer.json
+++ b/src/generated/resources/assets/gtceu/models/block/machine/bulk_blast_chiller.json
@@ -1,7 +1,7 @@
{
"parent": "minecraft:block/block",
"loader": "gtceu:machine",
- "machine": "gtceu:mega_vacuum_freezer",
+ "machine": "gtceu:bulk_blast_chiller",
"texture_overrides": {
"all": "gtceu:block/casings/solid/machine_casing_frost_proof"
},
@@ -11,8 +11,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/solid/machine_casing_frost_proof",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front_emissive"
}
}
},
@@ -21,8 +21,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/solid/machine_casing_frost_proof",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front_paused",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front_paused_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front_paused",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front_paused_emissive"
}
}
},
@@ -31,8 +31,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/solid/machine_casing_frost_proof",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front_active",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front_active_emissive"
}
}
},
@@ -41,8 +41,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/solid/machine_casing_frost_proof",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front_active",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/bulk_blast_chiller/overlay_front_active_emissive"
}
}
}
diff --git a/src/generated/resources/assets/gtceu/models/block/machine/mega_blast_furnace.json b/src/generated/resources/assets/gtceu/models/block/machine/rotary_hearth_furnace.json
similarity index 68%
rename from src/generated/resources/assets/gtceu/models/block/machine/mega_blast_furnace.json
rename to src/generated/resources/assets/gtceu/models/block/machine/rotary_hearth_furnace.json
index d3ddd7c645e..9f4793f8984 100644
--- a/src/generated/resources/assets/gtceu/models/block/machine/mega_blast_furnace.json
+++ b/src/generated/resources/assets/gtceu/models/block/machine/rotary_hearth_furnace.json
@@ -1,7 +1,7 @@
{
"parent": "minecraft:block/block",
"loader": "gtceu:machine",
- "machine": "gtceu:mega_blast_furnace",
+ "machine": "gtceu:rotary_hearth_furnace",
"texture_overrides": {
"all": "gtceu:block/casings/gcym/high_temperature_smelting_casing"
},
@@ -11,8 +11,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/gcym/high_temperature_smelting_casing",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front_emissive"
}
}
},
@@ -21,8 +21,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/gcym/high_temperature_smelting_casing",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front_paused",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front_paused_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front_paused",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front_paused_emissive"
}
}
},
@@ -31,8 +31,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/gcym/high_temperature_smelting_casing",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front_active",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front_active_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active_emissive"
}
}
},
@@ -41,8 +41,8 @@
"parent": "gtceu:block/machine/template/cube_all/sided",
"textures": {
"all": "gtceu:block/casings/gcym/high_temperature_smelting_casing",
- "overlay_front": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front_active",
- "overlay_front_emissive": "gtceu:block/multiblock/gcym/mega_blast_furnace/overlay_front_active_emissive"
+ "overlay_front": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active",
+ "overlay_front_emissive": "gtceu:block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active_emissive"
}
}
}
diff --git a/src/generated/resources/assets/gtceu/models/block/steel_turbine_casing.json b/src/generated/resources/assets/gtceu/models/block/magnalium_turbine_casing.json
similarity index 100%
rename from src/generated/resources/assets/gtceu/models/block/steel_turbine_casing.json
rename to src/generated/resources/assets/gtceu/models/block/magnalium_turbine_casing.json
diff --git a/src/generated/resources/assets/gtceu/models/block/oil_heavy.json b/src/generated/resources/assets/gtceu/models/block/oil_heavy.json
deleted file mode 100644
index 2e6953bb4aa..00000000000
--- a/src/generated/resources/assets/gtceu/models/block/oil_heavy.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "textures": {
- "particle": "gtceu:block/fluids/fluid.oil_heavy"
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/block/oil_light.json b/src/generated/resources/assets/gtceu/models/block/oil_light.json
deleted file mode 100644
index 0cbd722a2bf..00000000000
--- a/src/generated/resources/assets/gtceu/models/block/oil_light.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "textures": {
- "particle": "gtceu:block/fluids/fluid.oil_light"
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/block/oil_medium.json b/src/generated/resources/assets/gtceu/models/block/oil_medium.json
deleted file mode 100644
index 8f7f4602f74..00000000000
--- a/src/generated/resources/assets/gtceu/models/block/oil_medium.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "textures": {
- "particle": "gtceu:block/fluids/fluid.oil_medium"
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/block/palladium_substation.json b/src/generated/resources/assets/gtceu/models/block/palladium_substation_casing.json
similarity index 100%
rename from src/generated/resources/assets/gtceu/models/block/palladium_substation.json
rename to src/generated/resources/assets/gtceu/models/block/palladium_substation_casing.json
diff --git a/src/generated/resources/assets/gtceu/models/block/raw_oil.json b/src/generated/resources/assets/gtceu/models/block/raw_oil.json
new file mode 100644
index 00000000000..7e11b4e6d65
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/block/raw_oil.json
@@ -0,0 +1,5 @@
+{
+ "textures": {
+ "particle": "gtceu:block/fluids/fluid.raw_oil"
+ }
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/assembly_control_casing.json b/src/generated/resources/assets/gtceu/models/item/assembly_control_casing.json
new file mode 100644
index 00000000000..b8e80e07670
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/item/assembly_control_casing.json
@@ -0,0 +1,3 @@
+{
+ "parent": "gtceu:block/assembly_control_casing"
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/assembly_line_casing.json b/src/generated/resources/assets/gtceu/models/item/assembly_line_casing.json
deleted file mode 100644
index 29adbafa78d..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/assembly_line_casing.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "parent": "gtceu:block/assembly_line_casing"
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/assembly_line_unit.json b/src/generated/resources/assets/gtceu/models/item/assembly_line_unit.json
index 4ded9e6eccc..bc56f43b774 100644
--- a/src/generated/resources/assets/gtceu/models/item/assembly_line_unit.json
+++ b/src/generated/resources/assets/gtceu/models/item/assembly_line_unit.json
@@ -1,3 +1,3 @@
{
- "parent": "gtceu:block/variant/assembly_line"
+ "parent": "gtceu:block/variant/assembly_line_unit"
}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/bricked_bronze_casing.json b/src/generated/resources/assets/gtceu/models/item/bricked_bronze_casing.json
new file mode 100644
index 00000000000..9afbb815596
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/item/bricked_bronze_casing.json
@@ -0,0 +1,3 @@
+{
+ "parent": "gtceu:block/bricked_bronze_casing"
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/bricked_wrought_iron_casing.json b/src/generated/resources/assets/gtceu/models/item/bricked_wrought_iron_casing.json
new file mode 100644
index 00000000000..123a9722575
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/item/bricked_wrought_iron_casing.json
@@ -0,0 +1,3 @@
+{
+ "parent": "gtceu:block/bricked_wrought_iron_casing"
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/bronze_brick_casing.json b/src/generated/resources/assets/gtceu/models/item/bronze_brick_casing.json
deleted file mode 100644
index 4fe4a810222..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/bronze_brick_casing.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "parent": "gtceu:block/bronze_brick_casing"
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/bulk_blast_chiller.json b/src/generated/resources/assets/gtceu/models/item/bulk_blast_chiller.json
new file mode 100644
index 00000000000..33a8becbbd7
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/item/bulk_blast_chiller.json
@@ -0,0 +1,3 @@
+{
+ "parent": "gtceu:block/machine/bulk_blast_chiller"
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/magnalium_turbine_casing.json b/src/generated/resources/assets/gtceu/models/item/magnalium_turbine_casing.json
new file mode 100644
index 00000000000..97ef1b00f2c
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/item/magnalium_turbine_casing.json
@@ -0,0 +1,3 @@
+{
+ "parent": "gtceu:block/magnalium_turbine_casing"
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/mega_blast_furnace.json b/src/generated/resources/assets/gtceu/models/item/mega_blast_furnace.json
deleted file mode 100644
index cf647ab9e10..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/mega_blast_furnace.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "parent": "gtceu:block/machine/mega_blast_furnace"
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/mega_vacuum_freezer.json b/src/generated/resources/assets/gtceu/models/item/mega_vacuum_freezer.json
deleted file mode 100644
index 82648ab534b..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/mega_vacuum_freezer.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "parent": "gtceu:block/machine/mega_vacuum_freezer"
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/palladium_substation.json b/src/generated/resources/assets/gtceu/models/item/palladium_substation.json
deleted file mode 100644
index ce3a0856e3e..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/palladium_substation.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "parent": "gtceu:block/palladium_substation"
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/palladium_substation_casing.json b/src/generated/resources/assets/gtceu/models/item/palladium_substation_casing.json
new file mode 100644
index 00000000000..2c5a30b1be4
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/item/palladium_substation_casing.json
@@ -0,0 +1,3 @@
+{
+ "parent": "gtceu:block/palladium_substation_casing"
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/rotary_hearth_furnace.json b/src/generated/resources/assets/gtceu/models/item/rotary_hearth_furnace.json
new file mode 100644
index 00000000000..23f496bba78
--- /dev/null
+++ b/src/generated/resources/assets/gtceu/models/item/rotary_hearth_furnace.json
@@ -0,0 +1,3 @@
+{
+ "parent": "gtceu:block/machine/rotary_hearth_furnace"
+}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/steel_brick_casing.json b/src/generated/resources/assets/gtceu/models/item/steel_brick_casing.json
deleted file mode 100644
index a65094c0a9e..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/steel_brick_casing.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "parent": "gtceu:block/steel_brick_casing"
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/steel_turbine_casing.json b/src/generated/resources/assets/gtceu/models/item/steel_turbine_casing.json
deleted file mode 100644
index 51a4b66ae8f..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/steel_turbine_casing.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "parent": "gtceu:block/steel_turbine_casing"
-}
\ No newline at end of file
diff --git a/src/generated/resources/assets/gtceu/models/item/turbine_rotor.json b/src/generated/resources/assets/gtceu/models/item/turbine_rotor.json
deleted file mode 100644
index 34e4953c68a..00000000000
--- a/src/generated/resources/assets/gtceu/models/item/turbine_rotor.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "parent": "minecraft:item/generated",
- "textures": {
- "layer0": "gtceu:item/tools/turbine"
- }
-}
\ No newline at end of file
diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/bronze_brick_casing.json b/src/generated/resources/data/gtceu/loot_tables/blocks/assembly_control_casing.json
similarity index 72%
rename from src/generated/resources/data/gtceu/loot_tables/blocks/bronze_brick_casing.json
rename to src/generated/resources/data/gtceu/loot_tables/blocks/assembly_control_casing.json
index a14e14edefd..432d4d7a2ef 100644
--- a/src/generated/resources/data/gtceu/loot_tables/blocks/bronze_brick_casing.json
+++ b/src/generated/resources/data/gtceu/loot_tables/blocks/assembly_control_casing.json
@@ -11,11 +11,11 @@
"entries": [
{
"type": "minecraft:item",
- "name": "gtceu:bronze_brick_casing"
+ "name": "gtceu:assembly_control_casing"
}
],
"rolls": 1.0
}
],
- "random_sequence": "gtceu:blocks/bronze_brick_casing"
+ "random_sequence": "gtceu:blocks/assembly_control_casing"
}
\ No newline at end of file
diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/assembly_line_casing.json b/src/generated/resources/data/gtceu/loot_tables/blocks/bricked_bronze_casing.json
similarity index 73%
rename from src/generated/resources/data/gtceu/loot_tables/blocks/assembly_line_casing.json
rename to src/generated/resources/data/gtceu/loot_tables/blocks/bricked_bronze_casing.json
index 5c6bf1fb9a4..cd38c5f2a04 100644
--- a/src/generated/resources/data/gtceu/loot_tables/blocks/assembly_line_casing.json
+++ b/src/generated/resources/data/gtceu/loot_tables/blocks/bricked_bronze_casing.json
@@ -11,11 +11,11 @@
"entries": [
{
"type": "minecraft:item",
- "name": "gtceu:assembly_line_casing"
+ "name": "gtceu:bricked_bronze_casing"
}
],
"rolls": 1.0
}
],
- "random_sequence": "gtceu:blocks/assembly_line_casing"
+ "random_sequence": "gtceu:blocks/bricked_bronze_casing"
}
\ No newline at end of file
diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/steel_brick_casing.json b/src/generated/resources/data/gtceu/loot_tables/blocks/bricked_wrought_iron_casing.json
similarity index 71%
rename from src/generated/resources/data/gtceu/loot_tables/blocks/steel_brick_casing.json
rename to src/generated/resources/data/gtceu/loot_tables/blocks/bricked_wrought_iron_casing.json
index d139fbdada1..e67b63b0db7 100644
--- a/src/generated/resources/data/gtceu/loot_tables/blocks/steel_brick_casing.json
+++ b/src/generated/resources/data/gtceu/loot_tables/blocks/bricked_wrought_iron_casing.json
@@ -11,11 +11,11 @@
"entries": [
{
"type": "minecraft:item",
- "name": "gtceu:steel_brick_casing"
+ "name": "gtceu:bricked_wrought_iron_casing"
}
],
"rolls": 1.0
}
],
- "random_sequence": "gtceu:blocks/steel_brick_casing"
+ "random_sequence": "gtceu:blocks/bricked_wrought_iron_casing"
}
\ No newline at end of file
diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/palladium_substation.json b/src/generated/resources/data/gtceu/loot_tables/blocks/magnalium_turbine_casing.json
similarity index 72%
rename from src/generated/resources/data/gtceu/loot_tables/blocks/palladium_substation.json
rename to src/generated/resources/data/gtceu/loot_tables/blocks/magnalium_turbine_casing.json
index fd8634a5b55..26718c48089 100644
--- a/src/generated/resources/data/gtceu/loot_tables/blocks/palladium_substation.json
+++ b/src/generated/resources/data/gtceu/loot_tables/blocks/magnalium_turbine_casing.json
@@ -11,11 +11,11 @@
"entries": [
{
"type": "minecraft:item",
- "name": "gtceu:palladium_substation"
+ "name": "gtceu:magnalium_turbine_casing"
}
],
"rolls": 1.0
}
],
- "random_sequence": "gtceu:blocks/palladium_substation"
+ "random_sequence": "gtceu:blocks/magnalium_turbine_casing"
}
\ No newline at end of file
diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/palladium_substation_casing.json b/src/generated/resources/data/gtceu/loot_tables/blocks/palladium_substation_casing.json
new file mode 100644
index 00000000000..cfbb9502044
--- /dev/null
+++ b/src/generated/resources/data/gtceu/loot_tables/blocks/palladium_substation_casing.json
@@ -0,0 +1,21 @@
+{
+ "type": "minecraft:block",
+ "pools": [
+ {
+ "bonus_rolls": 0.0,
+ "conditions": [
+ {
+ "condition": "minecraft:survives_explosion"
+ }
+ ],
+ "entries": [
+ {
+ "type": "minecraft:item",
+ "name": "gtceu:palladium_substation_casing"
+ }
+ ],
+ "rolls": 1.0
+ }
+ ],
+ "random_sequence": "gtceu:blocks/palladium_substation_casing"
+}
\ No newline at end of file
diff --git a/src/generated/resources/data/gtceu/loot_tables/blocks/steel_turbine_casing.json b/src/generated/resources/data/gtceu/loot_tables/blocks/steel_turbine_casing.json
deleted file mode 100644
index f5778b0a827..00000000000
--- a/src/generated/resources/data/gtceu/loot_tables/blocks/steel_turbine_casing.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "type": "minecraft:block",
- "pools": [
- {
- "bonus_rolls": 0.0,
- "conditions": [
- {
- "condition": "minecraft:survives_explosion"
- }
- ],
- "entries": [
- {
- "type": "minecraft:item",
- "name": "gtceu:steel_turbine_casing"
- }
- ],
- "rolls": 1.0
- }
- ],
- "random_sequence": "gtceu:blocks/steel_turbine_casing"
-}
\ No newline at end of file
diff --git a/src/generated/resources/data/gtceu/tags/blocks/mineable/pickaxe_or_wrench.json b/src/generated/resources/data/gtceu/tags/blocks/mineable/pickaxe_or_wrench.json
index 4067346e98a..64029895631 100644
--- a/src/generated/resources/data/gtceu/tags/blocks/mineable/pickaxe_or_wrench.json
+++ b/src/generated/resources/data/gtceu/tags/blocks/mineable/pickaxe_or_wrench.json
@@ -12,7 +12,7 @@
"gtceu:robust_machine_casing",
"gtceu:inert_machine_casing",
"gtceu:sturdy_machine_casing",
- "gtceu:palladium_substation",
+ "gtceu:palladium_substation_casing",
"gtceu:nonconducting_casing",
"gtceu:vibration_safe_casing",
"gtceu:watertight_casing",
@@ -32,14 +32,14 @@
"gtceu:crushing_wheels",
"gtceu:heat_vent",
"gtceu:assembly_line_grating",
- "gtceu:assembly_line_casing",
+ "gtceu:assembly_control_casing",
"gtceu:assembly_line_unit",
"gtceu:bronze_gearbox",
"gtceu:steel_gearbox",
"gtceu:stainless_steel_gearbox",
"gtceu:titanium_gearbox",
"gtceu:tungstensteel_gearbox",
- "gtceu:steel_turbine_casing",
+ "gtceu:magnalium_turbine_casing",
"gtceu:titanium_turbine_casing",
"gtceu:stainless_steel_turbine_casing",
"gtceu:tungstensteel_turbine_casing",
@@ -73,9 +73,9 @@
"gtceu:uv_hermetic_casing",
"gtceu:uhv_hermetic_casing",
"gtceu:bronze_machine_casing",
- "gtceu:bronze_brick_casing",
+ "gtceu:bricked_bronze_casing",
"gtceu:steel_machine_casing",
- "gtceu:steel_brick_casing",
+ "gtceu:bricked_wrought_iron_casing",
"gtceu:cupronickel_coil_block",
"gtceu:kanthal_coil_block",
"gtceu:nichrome_coil_block",
diff --git a/src/generated/resources/data/gtceu/worldgen/configured_feature/raw_oil_sprout.json b/src/generated/resources/data/gtceu/worldgen/configured_feature/raw_oil_sprout.json
index 9f7c63b09ea..a274658f902 100644
--- a/src/generated/resources/data/gtceu/worldgen/configured_feature/raw_oil_sprout.json
+++ b/src/generated/resources/data/gtceu/worldgen/configured_feature/raw_oil_sprout.json
@@ -1,7 +1,7 @@
{
"type": "gtceu:fluid_sprout",
"config": {
- "fluid": "gtceu:oil_medium",
+ "fluid": "gtceu:raw_oil",
"size": {
"type": "minecraft:uniform",
"value": {
diff --git a/src/generated/resources/data/minecraft/tags/blocks/replaceable.json b/src/generated/resources/data/minecraft/tags/blocks/replaceable.json
index 51b1c7c9f34..be225f678b8 100644
--- a/src/generated/resources/data/minecraft/tags/blocks/replaceable.json
+++ b/src/generated/resources/data/minecraft/tags/blocks/replaceable.json
@@ -1,9 +1,9 @@
{
"values": [
"gtceu:oil",
- "gtceu:oil_light",
- "gtceu:oil_heavy",
- "gtceu:oil_medium",
+ "gtceu:light_oil",
+ "gtceu:heavy_oil",
+ "gtceu:raw_oil",
"gtceu:natural_gas"
]
}
\ No newline at end of file
diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java
index c87913eb9e4..da3d6cc880d 100644
--- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java
+++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java
@@ -33,6 +33,22 @@ public class GTCEu {
public static final Path GTCEU_FOLDER = getGameDir().resolve("gtceu");
+ /**
+ * Only used for datafixers. Bump subversion whenever a block changes id, save data layout changes, etc.
+ * Main version should be bumped the first time it is bumped after a release, then subversion for each subsequent
+ * change.
+ *
+ *
+ * Versions:
+ *
+ * - 0: 1.3.0-7.5.2
+ * - 1: upgrade to 7.5.3
+ * - 2-3: upgrade to 8.0.0
+ * - 4: 8.0.1-SNAPSHOT-???????
+ *
+ */
+ public static final int GT_DATA_VERSION = 3;
+
public GTCEu() {
GTCEu.init();
GTCEuAPI.instance = this;
diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java
index 9b79c79acf6..5ed5c943610 100644
--- a/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java
+++ b/src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java
@@ -122,7 +122,7 @@ public static TagPrefix get(String name) {
public static final TagPrefix oreRedGranite = oreTagPrefix("red_granite", BlockTags.MINEABLE_WITH_PICKAXE)
.langValue("Red Granite %s Ore")
- .registerOre(() -> GTBlocks.RED_GRANITE.getDefaultState(), () -> GTMaterials.GraniteRed,
+ .registerOre(() -> GTBlocks.RED_GRANITE.getDefaultState(), () -> GTMaterials.RedGranite,
BlockBehaviour.Properties.of().mapColor(MapColor.TERRACOTTA_RED).requiresCorrectToolForDrops()
.strength(3.0F, 3.0F),
GTCEu.id("block/red_granite"));
@@ -201,7 +201,7 @@ public static TagPrefix get(String name) {
.requiresCorrectToolForDrops().strength(4.5F, 9.0F),
ResourceLocation.withDefaultNamespace("block/end_stone"), true, false, true);
- public static final TagPrefix rawOre = new TagPrefix(GTCEu.id("raw"), true)
+ public static final TagPrefix rawOre = new TagPrefix(GTCEu.id("raw"))
.idPattern("raw_%s")
.defaultTagPath("raw_materials/%s")
.unformattedTagPath("raw_materials")
@@ -978,8 +978,6 @@ public record BlockProperties(@NotNull Supplier> renderType
@Getter
@Setter
private String idPattern;
- @Getter
- public final boolean invertedName;
protected final List tags = new ArrayList<>();
@Setter
@@ -1048,26 +1046,21 @@ public record BlockProperties(@NotNull Supplier> renderType
*/
@Deprecated(since = "8.0.0")
public TagPrefix(String name) {
- this(name, false);
+ this(GTCEu.id(name));
}
/**
- * @deprecated Use {@link TagPrefix#TagPrefix(ResourceLocation, boolean)}
+ * @deprecated Use {@link TagPrefix#TagPrefix(ResourceLocation)}
*/
@Deprecated(since = "8.0.0")
public TagPrefix(String name, boolean invertedName) {
- this(GTCEu.id(name), invertedName);
+ this(name);
}
public TagPrefix(ResourceLocation id) {
- this(id, false);
- }
-
- public TagPrefix(ResourceLocation id, boolean invertedName) {
this.id = id;
this.name = id.getPath();
this.idPattern = "%s_" + getLowerCaseName();
- this.invertedName = invertedName;
this.langValue = "%s " + FormattingUtil.toEnglishName(getLowerCaseName());
GTRegistries.TAG_PREFIXES.register(id, this);
}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java
new file mode 100644
index 00000000000..dd60cb641c9
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java
@@ -0,0 +1,89 @@
+package com.gregtechceu.gtceu.api.datafixer;
+
+import com.gregtechceu.gtceu.GTCEu;
+import com.gregtechceu.gtceu.common.data.datafixer.GTDataFixers;
+
+import net.minecraft.SharedConstants;
+import net.minecraft.nbt.CompoundTag;
+import net.minecraft.nbt.NbtOps;
+import net.minecraft.util.datafix.DataFixers;
+
+import com.mojang.datafixers.DSL;
+import com.mojang.datafixers.DataFixUtils;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.serialization.Dynamic;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.jetbrains.annotations.*;
+
+@ApiStatus.Internal
+public abstract class DataFixHelper {
+
+ public static final String GT_DATA_VERSION_TAG = "GTCEu_DataVersion";
+ public static final Logger LOGGER = LogManager.getLogger("GTCEu/DFU");
+
+ // region updating
+
+ public static Dynamic updateToCurrentVersion(DSL.TypeReference type, Dynamic dynamic) {
+ return update(type, dynamic, getGTDataVersion(dynamic), GTCEu.GT_DATA_VERSION);
+ }
+
+ public static Dynamic update(DSL.TypeReference type, Dynamic dynamic, int version, int newVersion) {
+ if (GTDataFixers.getDataFixer() == null) {
+ return dynamic;
+ }
+ return GTDataFixers.getDataFixer().update(type, dynamic, version, newVersion);
+ }
+
+ public static CompoundTag updateToCurrentVersion(DSL.TypeReference dataFixTypes, CompoundTag tag) {
+ return update(dataFixTypes, tag, getGTDataVersion(tag), GTCEu.GT_DATA_VERSION);
+ }
+
+ public static CompoundTag update(DSL.TypeReference dataFixTypes, CompoundTag tag, int version, int newVersion) {
+ return (CompoundTag) update(dataFixTypes, new Dynamic<>(NbtOps.INSTANCE, tag), version, newVersion).getValue();
+ }
+
+ // endregion
+
+ // region data version handling
+
+ public static CompoundTag addGTDataVersion(CompoundTag tag) {
+ if (GTDataFixers.getDataFixer() != null) {
+ tag.putInt(GT_DATA_VERSION_TAG, GTCEu.GT_DATA_VERSION);
+ }
+
+ return tag;
+ }
+
+ @Contract(pure = true)
+ @Range(from = -1, to = Integer.MAX_VALUE)
+ public static int getGTDataVersion(Dynamic> dynamic) {
+ return getGTDataVersion(dynamic, -1);
+ }
+
+ @Contract(pure = true)
+ @Range(from = -1, to = Integer.MAX_VALUE)
+ public static int getGTDataVersion(Dynamic> dynamic, int defaultValue) {
+ return dynamic.get(GT_DATA_VERSION_TAG).asInt(defaultValue);
+ }
+
+ @Contract(pure = true)
+ @Range(from = -1, to = Integer.MAX_VALUE)
+ public static int getGTDataVersion(CompoundTag tag) {
+ return getGTDataVersion(tag, -1);
+ }
+
+ @Contract(pure = true)
+ @Range(from = -1, to = Integer.MAX_VALUE)
+ public static int getGTDataVersion(CompoundTag tag, int defaultValue) {
+ return tag.contains(GT_DATA_VERSION_TAG, CompoundTag.TAG_ANY_NUMERIC) ? tag.getInt(GT_DATA_VERSION_TAG) :
+ defaultValue;
+ }
+
+ // endregion
+
+ public static Schema getLatestVanillaSchema() {
+ int vanillaDataVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion();
+ return DataFixers.getDataFixer().getSchema(DataFixUtils.makeKey(vanillaDataVersion));
+ }
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptyDataFixer.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptyDataFixer.java
new file mode 100644
index 00000000000..ab3f38955ef
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptyDataFixer.java
@@ -0,0 +1,88 @@
+package com.gregtechceu.gtceu.api.datafixer;
+
+import com.mojang.datafixers.DSL;
+import com.mojang.datafixers.DataFixer;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.datafixers.types.Type;
+import com.mojang.datafixers.types.templates.TypeTemplate;
+import com.mojang.serialization.Dynamic;
+import it.unimi.dsi.fastutil.objects.Object2ObjectMaps;
+import org.jetbrains.annotations.Range;
+
+import java.util.Map;
+import java.util.function.Supplier;
+
+class EmptyDataFixer implements DataFixer {
+
+ static final EmptyDataFixer INSTANCE = new EmptyDataFixer();
+
+ private final Schema schema = new EmptySchema(0);
+
+ private EmptyDataFixer() {}
+
+ @Override
+ public Dynamic update(DSL.TypeReference type, Dynamic input, int version, int newVersion) {
+ return input;
+ }
+
+ @Override
+ public Schema getSchema(int key) {
+ return this.schema;
+ }
+
+ /*
+ * Copyright 2022 QuiltMC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ /**
+ * Represents an empty {@link Schema}, having no parent and containing no type definitions.
+ */
+ static final class EmptySchema extends Schema {
+
+ /**
+ * Constructs an empty schema.
+ *
+ * @param versionKey the data version key
+ */
+ EmptySchema(@Range(from = 0, to = Integer.MAX_VALUE) int versionKey) {
+ super(versionKey, null);
+ }
+
+ // all of these methods refer to this.parent without checking if its null
+ @Override
+ public void registerTypes(Schema schema, Map> entityTypes,
+ Map> blockEntityTypes) {}
+
+ @Override
+ public Map> registerEntities(Schema schema) {
+ return Map.of();
+ }
+
+ @Override
+ public Map> registerBlockEntities(Schema schema) {
+ return Map.of();
+ }
+
+ // Ensure the schema stays empty.
+ @Override
+ public void registerType(boolean recursive, DSL.TypeReference type, Supplier template) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ protected Map> buildTypes() {
+ return Object2ObjectMaps.emptyMap();
+ }
+ }
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java
new file mode 100644
index 00000000000..615a8047b72
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java
@@ -0,0 +1,113 @@
+package com.gregtechceu.gtceu.api.datafixer;
+
+import com.google.common.collect.Lists;
+import com.mojang.datafixers.*;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.datafixers.types.Type;
+import it.unimi.dsi.fastutil.ints.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
+import java.util.function.BiFunction;
+import java.util.stream.Collectors;
+
+/// This class is a full copy of {@link DataFixerBuilder} because all of its fields are private and thus needed to be
+/// copied here. There was only one method that didn't need to be copied, so extending it is pointless.
+public class FixedDataFixerBuilder {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(FixedDataFixerBuilder.class);
+
+ private final int dataVersion;
+ private final Int2ObjectSortedMap schemas = new Int2ObjectAVLTreeMap<>();
+ private final List globalList = Lists.newArrayList();
+ private final IntSortedSet fixerVersions = new IntAVLTreeSet();
+
+ public FixedDataFixerBuilder(int dataVersion) {
+ this.dataVersion = dataVersion;
+ }
+
+ public Schema addSchema(final int version, final BiFunction factory) {
+ return addSchema(version, 0, factory);
+ }
+
+ public Schema addSchema(final int version, final int subVersion,
+ final BiFunction factory) {
+ final int key = DataFixUtils.makeKey(version, subVersion);
+ final Schema parent = schemas.isEmpty() ? null :
+ schemas.get(FixedDataFixerUpper.getLowestSchemaSameVersion(schemas, key - 1));
+ final Schema schema = factory.apply(DataFixUtils.makeKey(version, subVersion), parent);
+ addSchema(schema);
+ return schema;
+ }
+
+ public void addSchema(final Schema schema) {
+ schemas.put(schema.getVersionKey(), schema);
+ }
+
+ public void addFixer(final DataFix fix) {
+ final int version = DataFixUtils.getVersion(fix.getVersionKey());
+
+ if (version > dataVersion) {
+ LOGGER.warn("Ignored fix registered for version: {} as the DataVersion of the game is: {}", version,
+ dataVersion);
+ return;
+ }
+
+ globalList.add(fix);
+ fixerVersions.add(fix.getVersionKey());
+ }
+
+ public DataFixer buildUnoptimized() {
+ return build();
+ }
+
+ public DataFixer buildOptimized(final Set requiredTypes, final Executor executor) {
+ final FixedDataFixerUpper fixerUpper = build();
+
+ final Instant started = Instant.now();
+ final List> futures = Lists.newArrayList();
+
+ final Set requiredTypeNames = requiredTypes.stream().map(DSL.TypeReference::typeName)
+ .collect(Collectors.toSet());
+
+ final IntBidirectionalIterator iterator = fixerUpper.fixerVersions().iterator();
+ while (iterator.hasNext()) {
+ final int versionKey = iterator.nextInt();
+ final Schema schema = schemas.get(versionKey);
+ for (final String typeName : schema.types()) {
+ if (!requiredTypeNames.contains(typeName)) {
+ continue;
+ }
+ final CompletableFuture future = CompletableFuture.runAsync(() -> {
+ final Type> dataType = schema.getType(() -> typeName);
+ final TypeRewriteRule rule = fixerUpper.getRule(DataFixUtils.getVersion(versionKey), dataVersion);
+ dataType.rewrite(rule, FixedDataFixerUpper.OPTIMIZATION_RULE);
+ }, executor).exceptionally(e -> {
+ LOGGER.error("Unable to build datafixers", e);
+ Runtime.getRuntime().exit(1);
+ return null;
+ });
+ futures.add(future);
+ }
+ }
+
+ CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).thenAccept(ignored -> {
+ LOGGER.info("{} Datafixer optimizations took {} milliseconds", futures.size(),
+ Duration.between(started, Instant.now()).toMillis());
+ });
+
+ return fixerUpper;
+ }
+
+ private FixedDataFixerUpper build() {
+ return new FixedDataFixerUpper(new Int2ObjectAVLTreeMap<>(schemas), new ArrayList<>(globalList),
+ new IntAVLTreeSet(fixerVersions));
+ }
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerUpper.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerUpper.java
new file mode 100644
index 00000000000..57e851b75a2
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerUpper.java
@@ -0,0 +1,77 @@
+package com.gregtechceu.gtceu.api.datafixer;
+
+import com.google.common.collect.Lists;
+import com.mojang.datafixers.DataFix;
+import com.mojang.datafixers.DataFixUtils;
+import com.mojang.datafixers.DataFixerUpper;
+import com.mojang.datafixers.TypeRewriteRule;
+import com.mojang.datafixers.functions.PointFreeRule;
+import com.mojang.datafixers.schemas.Schema;
+import it.unimi.dsi.fastutil.ints.Int2ObjectSortedMap;
+import it.unimi.dsi.fastutil.ints.IntSortedSet;
+import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
+import it.unimi.dsi.fastutil.longs.Long2ObjectMaps;
+import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
+
+import java.util.List;
+
+/// Subclass of {@link DataFixerUpper} to backport a fix from a newer version of DFU.
+public class FixedDataFixerUpper extends DataFixerUpper {
+
+ protected static final PointFreeRule OPTIMIZATION_RULE = DataFixerUpper.OPTIMIZATION_RULE;
+
+ private final List globalList;
+ private final Long2ObjectMap rules = Long2ObjectMaps.synchronize(new Long2ObjectOpenHashMap<>());
+
+ protected FixedDataFixerUpper(Int2ObjectSortedMap schemas, List globalList,
+ IntSortedSet fixerVersions) {
+ super(schemas, globalList, fixerVersions);
+ this.globalList = globalList;
+ }
+
+ protected static int getLowestSchemaSameVersion(final Int2ObjectSortedMap schemas, final int versionKey) {
+ return DataFixerUpper.getLowestSchemaSameVersion(schemas, versionKey);
+ }
+
+ private int getLowestFixSameVersion(final int versionKey) {
+ if (versionKey < fixerVersions().firstInt()) {
+ // can have a version before everything else
+ return fixerVersions().firstInt() - 1;
+ }
+ return fixerVersions().subSet(0, versionKey + 1).lastInt();
+ }
+
+ /// backport of DFU commit [`b81c76b`](https://github.com/Mojang/DataFixerUpper/commit/b81c76b)
+ /// (Fix: apply all rules from subversions of target version)
+ @Override
+ protected TypeRewriteRule getRule(final int version, final int newVersion) {
+ if (version >= newVersion) {
+ return TypeRewriteRule.nop();
+ }
+
+ final long key = (long) version << 32 | newVersion;
+ return rules.computeIfAbsent(key, k -> {
+ final int expandedVersion = getLowestFixSameVersion(DataFixUtils.makeKey(version));
+
+ final List rules = Lists.newArrayList();
+ for (final DataFix fix : globalList) {
+ final int expandedFixVersion = fix.getVersionKey();
+ final int fixVersion = DataFixUtils.getVersion(expandedFixVersion);
+ if (expandedFixVersion > expandedVersion && fixVersion <= newVersion) {
+ final TypeRewriteRule fixRule = fix.getRule();
+ if (fixRule == TypeRewriteRule.nop()) {
+ continue;
+ }
+ rules.add(fixRule);
+ }
+ }
+
+ return TypeRewriteRule.seq(rules);
+ });
+ }
+
+ @Override
+ protected IntSortedSet fixerVersions() {
+ return super.fixerVersions();
+ }
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java
new file mode 100644
index 00000000000..a061df076de
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2023 embeddedt
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.gregtechceu.gtceu.api.datafixer;
+
+import com.gregtechceu.gtceu.GTCEu;
+
+import com.mojang.datafixers.DSL;
+import com.mojang.datafixers.DataFixer;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.serialization.Dynamic;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.function.Supplier;
+
+/**
+ * Original from
+ * ModernFix
+ */
+public class LazyDataFixer implements DataFixer {
+
+ private @Nullable DataFixer backingDataFixer;
+ private final Supplier<@Nullable DataFixer> dfuSupplier;
+
+ public LazyDataFixer(Supplier<@Nullable DataFixer> dfuSupplier) {
+ this.backingDataFixer = null;
+ this.dfuSupplier = dfuSupplier;
+ }
+
+ private DataFixer getDataFixer() {
+ synchronized (this) {
+ if (this.backingDataFixer == null) {
+ GTCEu.LOGGER.info("Instantiating GTCEu Data Fixers");
+ this.backingDataFixer = this.dfuSupplier.get();
+ }
+ if (this.backingDataFixer == null) {
+ this.backingDataFixer = EmptyDataFixer.INSTANCE;
+ }
+ }
+
+ return this.backingDataFixer;
+ }
+
+ public Dynamic update(DSL.TypeReference type, Dynamic input, int version, int newVersion) {
+ return version >= newVersion ? input : this.getDataFixer().update(type, input, version, newVersion);
+ }
+
+ public Schema getSchema(int key) {
+ return this.getDataFixer().getSchema(key);
+ }
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java
new file mode 100644
index 00000000000..c0b6a099117
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java
@@ -0,0 +1,46 @@
+package com.gregtechceu.gtceu.api.datafixer.fixes;
+
+import com.gregtechceu.gtceu.common.data.datafixer.GTReferences;
+
+import net.minecraft.util.datafix.schemas.NamespacedSchema;
+
+import com.mojang.datafixers.DSL;
+import com.mojang.datafixers.DataFix;
+import com.mojang.datafixers.TypeRewriteRule;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.datafixers.types.Type;
+import com.mojang.datafixers.util.Pair;
+
+import java.util.Objects;
+import java.util.function.Function;
+
+public abstract class FluidRenameFix extends DataFix {
+
+ private final String name;
+
+ public FluidRenameFix(Schema outputSchema, String name) {
+ super(outputSchema, false);
+ this.name = name;
+ }
+
+ public TypeRewriteRule makeRule() {
+ Type> type = DSL.named(GTReferences.FLUID_NAME.typeName(),
+ NamespacedSchema.namespacedString());
+ if (!Objects.equals(this.getInputSchema().getType(GTReferences.FLUID_NAME), type)) {
+ throw new IllegalStateException("item name type is not what was expected.");
+ } else {
+ return this.fixTypeEverywhere(this.name, type, (ops) -> (typeAndId) -> typeAndId.mapSecond(this::fixFluid));
+ }
+ }
+
+ protected abstract String fixFluid(String fluid);
+
+ public static DataFix create(Schema outputSchema, String name, final Function fixer) {
+ return new FluidRenameFix(outputSchema, name) {
+
+ protected String fixFluid(String fluid) {
+ return fixer.apply(fluid);
+ }
+ };
+ }
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/MaterialRenameFix.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/MaterialRenameFix.java
new file mode 100644
index 00000000000..975e64e009e
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/MaterialRenameFix.java
@@ -0,0 +1,45 @@
+package com.gregtechceu.gtceu.api.datafixer.fixes;
+
+import com.gregtechceu.gtceu.common.data.datafixer.GTReferences;
+
+import com.mojang.datafixers.DataFix;
+import com.mojang.datafixers.TypeRewriteRule;
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.datafixers.types.Type;
+import com.mojang.datafixers.util.Pair;
+
+import java.util.Objects;
+import java.util.function.Function;
+
+import static com.mojang.datafixers.DSL.*;
+import static net.minecraft.util.datafix.schemas.NamespacedSchema.*;
+
+public abstract class MaterialRenameFix extends DataFix {
+
+ private final String name;
+
+ public MaterialRenameFix(Schema outputSchema, String name) {
+ super(outputSchema, false);
+ this.name = name;
+ }
+
+ public TypeRewriteRule makeRule() {
+ Type> type = named(GTReferences.MATERIAL_NAME.typeName(), namespacedString());
+ if (!Objects.equals(this.getInputSchema().getType(GTReferences.MATERIAL_NAME), type)) {
+ throw new IllegalStateException("material name type is not what was expected.");
+ } else {
+ return this.fixTypeEverywhere(this.name, type, ops -> value -> value.mapSecond(this::fixMaterial));
+ }
+ }
+
+ protected abstract String fixMaterial(String item);
+
+ public static DataFix create(Schema outputSchema, String name, final Function fixer) {
+ return new MaterialRenameFix(outputSchema, name) {
+
+ protected String fixMaterial(String name) {
+ return fixer.apply(name);
+ }
+ };
+ }
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/ToolBehaviorFix.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/ToolBehaviorFix.java
new file mode 100644
index 00000000000..cc921b4e96e
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/ToolBehaviorFix.java
@@ -0,0 +1,31 @@
+package com.gregtechceu.gtceu.api.datafixer.fixes;
+
+import net.minecraft.util.datafix.fixes.ItemStackTagFix;
+
+import com.mojang.datafixers.schemas.Schema;
+import com.mojang.serialization.Dynamic;
+
+public abstract class ToolBehaviorFix extends ItemStackTagFix {
+
+ private final String behaviorId;
+ private final String newBehaviorId;
+
+ public ToolBehaviorFix(Schema outputSchema, String name, String behaviorId) {
+ this(outputSchema, name, behaviorId, behaviorId);
+ }
+
+ public ToolBehaviorFix(Schema outputSchema, String name, String behaviorId, String newBehaviorId) {
+ super(outputSchema, name, itemId -> true);
+ this.behaviorId = behaviorId;
+ this.newBehaviorId = newBehaviorId;
+ }
+
+ @Override
+ protected final Dynamic fixItemStackTag(Dynamic tag) {
+ Dynamic behavior = tag.remove(behaviorId);
+ behavior = fixBehavior(behavior);
+ return tag.set(newBehaviorId, behavior);
+ }
+
+ protected abstract Dynamic fixBehavior(Dynamic tag);
+}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/package-info.java
new file mode 100644
index 00000000000..cb13d6c5af8
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/package-info.java
@@ -0,0 +1,4 @@
+@NotNullByDefault
+package com.gregtechceu.gtceu.api.datafixer.fixes;
+
+import org.jetbrains.annotations.NotNullByDefault;
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/package-info.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/package-info.java
new file mode 100644
index 00000000000..66651429d10
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/package-info.java
@@ -0,0 +1,4 @@
+@NotNullByDefault
+package com.gregtechceu.gtceu.api.datafixer;
+
+import org.jetbrains.annotations.NotNullByDefault;
diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/types/ExtraDSL.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/types/ExtraDSL.java
new file mode 100644
index 00000000000..dafc53b4e01
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/types/ExtraDSL.java
@@ -0,0 +1,447 @@
+package com.gregtechceu.gtceu.api.datafixer.types;
+
+import com.mojang.datafixers.types.Type;
+import com.mojang.datafixers.types.templates.TypeTemplate;
+import com.mojang.datafixers.util.Either;
+import com.mojang.datafixers.util.Pair;
+import com.mojang.datafixers.util.Unit;
+import com.mojang.serialization.Dynamic;
+
+import static com.mojang.datafixers.DSL.*;
+
+// spotless:off
+public interface ExtraDSL {
+
+ static TypeTemplate fields(
+ final String name1, final TypeTemplate element1,
+ final String name2, final TypeTemplate element2,
+ final String name3, final TypeTemplate element3,
+ final String name4, final TypeTemplate element4,
+ final String name5, final TypeTemplate element5,
+ final String name6, final TypeTemplate element6
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ field(name3, element3),
+ field(name4, element4),
+ field(name5, element5),
+ field(name6, element6)
+ );
+ }
+
+ static Type>> fields(final String name, final Type element) {
+ return and(
+ field(name, element),
+ remainderType()
+ );
+ }
+
+ static Type>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ remainderType()
+ );
+ }
+
+ static Type>>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ field(name3, element3),
+ remainderType()
+ );
+ }
+
+ static Type>>>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ field(name3, element3),
+ fields(
+ name4, element4
+ )
+ );
+ }
+
+ static Type>>>>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ field(name3, element3),
+ fields(
+ name4, element4,
+ name5, element5
+ )
+ );
+ }
+
+ static Type>>>>>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5,
+ final String name6, final Type element6
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ field(name3, element3),
+ fields(
+ name4, element4,
+ name5, element5,
+ name6, element6
+ )
+ );
+ }
+
+ static Type> fields(
+ final String name, final Type element,
+ final Type rest
+ ) {
+ return and(
+ field(name, element),
+ rest
+ );
+ }
+
+ static Type>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final Type rest
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ rest
+ );
+ }
+
+ static Type>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final Type rest
+ ) {
+ return and(
+ field(name1, element1),
+ field(name2, element2),
+ field(name3, element3),
+ rest
+ );
+ }
+
+ static Type>>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final Type rest
+ ) {
+ return fields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ fields(
+ name4, element4,
+ rest
+ )
+ );
+ }
+
+ static Type>>>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5,
+ final Type rest
+ ) {
+ return fields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ fields(
+ name4, element4,
+ name5, element5,
+ rest
+ )
+ );
+ }
+
+ static Type>>>>>> fields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5,
+ final String name6, final Type element6,
+ final Type rest
+ ) {
+ return fields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ fields(
+ name4, element4,
+ name5, element5,
+ name6, element6,
+ rest
+ )
+ );
+ }
+
+ static TypeTemplate optionalFields(
+ final String name1, final TypeTemplate element1,
+ final String name2, final TypeTemplate element2,
+ final String name3, final TypeTemplate element3,
+ final String name4, final TypeTemplate element4,
+ final String name5, final TypeTemplate element5,
+ final String name6, final TypeTemplate element6
+ ) {
+ return allWithRemainder(
+ optional(field(name1, element1)),
+ optional(field(name2, element2)),
+ optional(field(name3, element3)),
+ optional(field(name4, element4)),
+ optional(field(name5, element5)),
+ optional(field(name6, element6))
+ );
+ }
+
+ static TypeTemplate optionalFields(
+ final String name1, final TypeTemplate element1,
+ final String name2, final TypeTemplate element2,
+ final String name3, final TypeTemplate element3,
+ final String name4, final TypeTemplate element4,
+ final String name5, final TypeTemplate element5,
+ final String name6, final TypeTemplate element6,
+ final String name7, final TypeTemplate element7
+ ) {
+ return allWithRemainder(
+ optional(field(name1, element1)),
+ optional(field(name2, element2)),
+ optional(field(name3, element3)),
+ optional(field(name4, element4)),
+ optional(field(name5, element5)),
+ optional(field(name6, element6)),
+ optional(field(name7, element7))
+ );
+ }
+
+ static TypeTemplate optionalFields(
+ final String name1, final TypeTemplate element1,
+ final String name2, final TypeTemplate element2,
+ final String name3, final TypeTemplate element3,
+ final String name4, final TypeTemplate element4,
+ final String name5, final TypeTemplate element5,
+ final String name6, final TypeTemplate element6,
+ final TypeTemplate rest
+ ) {
+ return and(
+ optional(field(name1, element1)),
+ optional(field(name2, element2)),
+ optional(field(name3, element3)),
+ optional(field(name4, element4)),
+ optional(field(name5, element5)),
+ optional(field(name6, element6)),
+ rest
+ );
+ }
+
+ static Type, Dynamic>>> optionalFields(final String name, final Type element) {
+ return optionalFields(name, element, remainderType());
+ }
+
+ static Type, Pair, Dynamic>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ remainderType()
+ );
+ }
+
+ static Type, Pair, Pair, Dynamic>>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ remainderType()
+ );
+ }
+
+ static Type, Pair, Pair, Pair, Dynamic>>>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ name4, element4,
+ remainderType()
+ );
+ }
+
+ static Type, Pair, Pair, Pair, Pair, Dynamic>>>>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ name4, element4,
+ name5, element5,
+ remainderType()
+ );
+ }
+
+ static Type, Pair, Pair, Pair, Pair, Pair, Dynamic>>>>>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5,
+ final String name6, final Type element6
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ name4, element4,
+ name5, element5,
+ name6, element6,
+ remainderType()
+ );
+ }
+
+ static Type, G>> optionalFields(
+ final String name, final Type element,
+ final Type rest
+ ) {
+ return and(
+ optional(field(name, element)),
+ rest
+ );
+ }
+
+ static Type, Pair, H>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final Type rest
+ ) {
+ return and(
+ optional(field(name1, element1)),
+ optional(field(name2, element2)),
+ rest
+ );
+ }
+
+ static Type, Pair, Pair, I>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final Type rest
+ ) {
+ return and(
+ optional(field(name1, element1)),
+ optional(field(name2, element2)),
+ optional(field(name3, element3)),
+ rest
+ );
+ }
+
+ static Type, Pair, Pair, Pair, J>>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final Type rest
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ optionalFields(
+ name4, element4,
+ rest
+ )
+ );
+ }
+
+ static Type, Pair, Pair, Pair, Pair, K>>>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5,
+ final Type rest
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ optionalFields(
+ name4, element4,
+ name5, element5,
+ rest
+ )
+ );
+ }
+
+ static Type, Pair, Pair, Pair, Pair, Pair, L>>>>>>> optionalFields(
+ final String name1, final Type element1,
+ final String name2, final Type element2,
+ final String name3, final Type element3,
+ final String name4, final Type element4,
+ final String name5, final Type element5,
+ final String name6, final Type element6,
+ final Type rest
+ ) {
+ return optionalFields(
+ name1, element1,
+ name2, element2,
+ name3, element3,
+ optionalFields(
+ name4, element4,
+ name5, element5,
+ name6, element6,
+ rest
+ )
+ );
+ }
+}
+// spotless:on
diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java
index 1cfb65834d6..534df3b3597 100644
--- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java
+++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java
@@ -47,7 +47,6 @@
import com.gregtechceu.gtceu.utils.ExtendedUseOnContext;
import com.gregtechceu.gtceu.utils.GTStringUtils;
import com.gregtechceu.gtceu.utils.GTUtil;
-import com.gregtechceu.gtceu.utils.data.TagCompatibilityFixer;
import net.minecraft.ChatFormatting;
import net.minecraft.client.resources.model.BakedModel;
@@ -142,9 +141,6 @@ public class MetaMachine extends ManagedSyncBlockEntity implements IGregtechBloc
private final List serverTicks;
private final List waitingToAdd;
- // If this machine data needs to be migrated from 7.x to 8.x
- private boolean isOldMachineData = false;
-
public MetaMachine(BlockEntityCreationInfo info) {
super(info);
this.renderState = getDefinition().defaultRenderState();
@@ -158,14 +154,6 @@ public MetaMachine(BlockEntityCreationInfo info) {
// ***** Machine Lifecycle ******//
//////////////////////////////////////
- @Override
- public void load(CompoundTag tag) {
- isOldMachineData = !tag.contains("traitHolder");
- if (isOldMachineData) TagCompatibilityFixer.fixTraitTags(this, tag);
-
- super.load(tag);
- }
-
/**
* Called when this machine is loaded.
* On the server side, the entire world may not be loaded when this method is called.
@@ -177,21 +165,6 @@ public void onLoad() {
getTraitHolder().machineLoaded();
getAllTraits().forEach(MachineTrait::onMachineLoad);
- if (isOldMachineData) {
- Direction upwardsGlobal = TagCompatibilityFixer.fixUpwardsFacing(this.getFrontFacing(),
- this.getUpwardsFacing());
- if (upwardsGlobal != null && getBlockState().hasProperty(GTBlockStateProperties.UPWARDS_FACING)) {
- // force the global upwards direction
- var blockState = getBlockState();
- boolean changeGlobal = blockState.getValue(GTBlockStateProperties.UPWARDS_FACING) != upwardsGlobal;
- if (blockState.getBlock() instanceof MetaMachineBlock && changeGlobal) {
- getLevel().setBlock(getBlockPos(),
- blockState.setValue(GTBlockStateProperties.UPWARDS_FACING, upwardsGlobal),
- Block.UPDATE_IMMEDIATE);
- }
- }
- }
-
// update the painted model property if the machine is painted
MachineRenderState renderState = getRenderState();
if (renderState.hasProperty(GTMachineModelProperties.IS_PAINTED) &&
diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ListTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ListTransformer.java
index fe30cbc14e4..dc6c4befe53 100644
--- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ListTransformer.java
+++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ListTransformer.java
@@ -2,7 +2,6 @@
import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer;
import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers;
-import com.gregtechceu.gtceu.utils.data.TagCompatibilityFixer;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
@@ -52,8 +51,7 @@ public Tag serializeNBT(List value, ValueTransformer.TransformerContext(listTag.size());
for (var t : listTag) {
- T val = getElemTransformer(context).deserializeNBT(TagCompatibilityFixer.stripLDLibPayloadWrapper(t),
- getInnerElemContext(null, context));
+ T val = getElemTransformer(context).deserializeNBT(t, getInnerElemContext(null, context));
if (val != null) current.add(val);
}
return current;
diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java
index dd767bbd9fd..2d1c0b6c25d 100644
--- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java
+++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/ObjectArrayTransformer.java
@@ -1,7 +1,6 @@
package com.gregtechceu.gtceu.api.sync_system.data_transformers.collections;
import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer;
-import com.gregtechceu.gtceu.utils.data.TagCompatibilityFixer;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
@@ -50,8 +49,7 @@ public Tag serializeNBT(T[] value, ValueTransformer.TransformerContext cont
current = Arrays.copyOf(current, listTag.size());
}
for (int i = 0; i < listTag.size(); i++) {
- T result = elementTransformer.deserializeNBT(TagCompatibilityFixer.stripLDLibPayloadWrapper(listTag.get(i)),
- getInnerElemContext(current[i], context));
+ T result = elementTransformer.deserializeNBT(listTag.get(i), getInnerElemContext(current[i], context));
if (result == null) return current;
current[i] = result;
}
diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java
index c3c0b94ecb8..6fbabde4cf4 100644
--- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java
+++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/collections/SetTransformer.java
@@ -2,7 +2,6 @@
import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformer;
import com.gregtechceu.gtceu.api.sync_system.data_transformers.ValueTransformers;
-import com.gregtechceu.gtceu.utils.data.TagCompatibilityFixer;
import net.minecraft.nbt.ListTag;
import net.minecraft.nbt.Tag;
@@ -53,8 +52,7 @@ public Set deserializeNBT(Tag tag, ValueTransformer.TransformerContext
if (current != null) current.clear();
else current = new ObjectOpenHashSet<>();
for (Tag elementTag : listTag) {
- T value = getElemTransformer(context).deserializeNBT(
- TagCompatibilityFixer.stripLDLibPayloadWrapper(elementTag), getInnerElemContext(null, context));
+ T value = getElemTransformer(context).deserializeNBT(elementTag, getInnerElemContext(null, context));
if (value != null) current.add(value);
}
return current;
diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java
index c715e1bdcb1..4fc17286f98 100644
--- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java
+++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java
@@ -1,7 +1,6 @@
package com.gregtechceu.gtceu.common;
import com.gregtechceu.gtceu.GTCEu;
-import com.gregtechceu.gtceu.api.GTValues;
import com.gregtechceu.gtceu.api.block.GTAttributeModifierIds;
import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper;
import com.gregtechceu.gtceu.api.capability.compat.EUToFEProvider;
@@ -13,8 +12,6 @@
import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry;
import com.gregtechceu.gtceu.api.data.medicalcondition.MedicalCondition;
import com.gregtechceu.gtceu.api.data.medicalcondition.Symptom;
-import com.gregtechceu.gtceu.api.data.tag.TagPrefix;
-import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys;
import com.gregtechceu.gtceu.api.item.armor.ArmorComponentItem;
import com.gregtechceu.gtceu.api.item.armor.ArmorUtils;
import com.gregtechceu.gtceu.api.item.armor.ModularArmorItem;
@@ -22,7 +19,6 @@
import com.gregtechceu.gtceu.api.item.module.IModularItem;
import com.gregtechceu.gtceu.api.item.module.ModuleContext;
import com.gregtechceu.gtceu.api.item.module.TieredAttributeItemModule;
-import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.machine.MetaMachine;
import com.gregtechceu.gtceu.api.registry.GTRegistries;
import com.gregtechceu.gtceu.common.capability.EnvironmentalHazardSavedData;
@@ -34,8 +30,6 @@
import com.gregtechceu.gtceu.common.commands.MedicalConditionCommands;
import com.gregtechceu.gtceu.common.cosmetics.GTCapes;
import com.gregtechceu.gtceu.common.data.*;
-import com.gregtechceu.gtceu.common.data.GTDamageTypes;
-import com.gregtechceu.gtceu.common.data.machines.GTAEMachines;
import com.gregtechceu.gtceu.common.fluid.potion.BottleItemFluidHandler;
import com.gregtechceu.gtceu.common.fluid.potion.PotionItemFluidHandler;
import com.gregtechceu.gtceu.common.item.armor.IJetpack;
@@ -64,8 +58,6 @@
import com.gregtechceu.gtceu.integration.map.cache.server.ServerCache;
import com.gregtechceu.gtceu.utils.TaskHandler;
-import net.minecraft.core.registries.Registries;
-import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.tags.DamageTypeTags;
@@ -83,9 +75,7 @@
import net.minecraft.world.item.*;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.level.ChunkPos;
-import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.entity.BlockEntity;
-import net.minecraft.world.level.material.FlowingFluid;
import net.minecraftforge.common.ForgeMod;
import net.minecraftforge.common.capabilities.ForgeCapabilities;
import net.minecraftforge.event.*;
@@ -102,20 +92,11 @@
import net.minecraftforge.fml.LogicalSide;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.items.IItemHandler;
-import net.minecraftforge.registries.ForgeRegistries;
-import net.minecraftforge.registries.MissingMappingsEvent;
import com.google.common.collect.ImmutableList;
import com.mojang.datafixers.util.Either;
-import com.tterrag.registrate.util.entry.BlockEntry;
-import com.tterrag.registrate.util.entry.ItemEntry;
-import java.util.Set;
import java.util.function.UnaryOperator;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static com.gregtechceu.gtceu.utils.FormattingUtil.toLowerCaseUnderscore;
@Mod.EventBusSubscriber(modid = GTCEu.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE)
public class CommonEventListener {
@@ -648,296 +629,4 @@ public static void modifyBreakSpeed(PlayerEvent.BreakSpeed event) {
event.setNewSpeed(event.getNewSpeed() + event.getNewSpeed() * miningFatigueModifier);
}
}
-
- /** Migrate Legacy GT Molten fluids, strictly blind to addons to allow them to fail loudly. */
- private static final Set LEGACY_MOLTEN_MATERIALS = Set.of(
- "bismuth_bronze",
- "black_bronze",
- "black_steel",
- "blue_steel",
- "enriched_naquadah_trinium_europium_duranide",
- "gallium_arsenide",
- "hastelloy_c_276",
- "hastelloy_x",
- "hsla_steel",
- "hsse",
- "hssg",
- "hsss",
- "incoloy_ma_956",
- "indium_tin_barium_titanium_cuprate",
- "kanthal",
- "magnesium_diboride",
- "manganese_phosphide",
- "maraging_steel_300",
- "mercury_barium_calcium_cuprate",
- "molybdenum_disilicide",
- "naquadah_alloy",
- "nichrome",
- "niobium_nitride",
- "niobium_titanium",
- "osmiridium",
- "red_steel",
- "rhodium_plated_palladium",
- "rose_gold",
- "rtm_alloy",
- "ruridit",
- "ruthenium_trinium_americium_neutronate",
- "samarium_iron_arsenic_oxide",
- "stainless_steel",
- "stellite_100",
- "sterling_silver",
- "tantalum_carbide",
- "titanium_carbide",
- "titanium_tungsten_carbide",
- "tungsten_carbide",
- "tungsten_steel",
- "ultimet",
- "uranium_rhodium_dinaquadide",
- "uranium_triplatinum",
- "vanadium_gallium",
- "vanadium_steel",
- "watertight_steel",
- "yttrium_barium_cuprate",
- "zeron_100");
-
- private static void remapLegacyMoltenFluids(MissingMappingsEvent event) {
- event.getMappings(Registries.FLUID, GTCEu.MOD_ID).forEach(mapping -> {
- String path = mapping.getKey().getPath();
- boolean flowing = path.startsWith("flowing_");
- String materialName = legacyMoltenMaterial(flowing ? path.substring("flowing_".length()) : path);
- if (materialName == null) return;
- var liquid = GTMaterials.get(materialName).getFluid(FluidStorageKeys.LIQUID);
- if (flowing && liquid instanceof FlowingFluid fluid) {
- mapping.remap(fluid.getFlowing());
- } else if (!flowing && liquid != null) {
- mapping.remap(liquid);
- } else {
- mapping.warn();
- }
- });
- event.getMappings(Registries.ITEM, GTCEu.MOD_ID).forEach(mapping -> {
- String path = mapping.getKey().getPath();
- if (!path.endsWith("_bucket")) return;
- String materialName = legacyMoltenMaterial(path.substring(0, path.length() - "_bucket".length()));
- if (materialName == null) return;
- var liquid = GTMaterials.get(materialName).getFluid(FluidStorageKeys.LIQUID);
- if (liquid != null && liquid.getBucket() != Items.AIR) {
- mapping.remap(liquid.getBucket());
- } else {
- mapping.warn();
- }
- });
- event.getMappings(ForgeRegistries.Keys.FLUID_TYPES, GTCEu.MOD_ID).forEach(mapping -> {
- String materialName = legacyMoltenMaterial(mapping.getKey().getPath());
- if (materialName == null) return;
- var liquid = GTMaterials.get(materialName).getFluid(FluidStorageKeys.LIQUID);
- if (liquid != null) mapping.remap(liquid.getFluidType());
- else mapping.warn();
- });
- // We never defined placable moltens, no need to handle them!
- }
-
- private static String legacyMoltenMaterial(String path) {
- if (!path.startsWith("molten_")) return null;
- String materialName = path.substring("molten_".length());
- return LEGACY_MOLTEN_MATERIALS.contains(materialName) ? materialName : null;
- }
-
- @SubscribeEvent
- public static void remapIds(MissingMappingsEvent event) {
- remapLegacyMoltenFluids(event);
- event.getMappings(Registries.BLOCK, GTCEu.MOD_ID).forEach(mapping -> {
- if (mapping.getKey().equals(GTCEu.id("tungstensteel_coil_block"))) {
- mapping.remap(GTBlocks.COIL_RTMALLOY.get());
- }
- if (mapping.getKey().equals(GTCEu.id("steam_miner"))) {
- mapping.remap(GTMachines.STEAM_MINER.first().getBlock());
- }
- });
- event.getMappings(Registries.ITEM, GTCEu.MOD_ID).forEach(mapping -> {
-
- if (mapping.getKey().equals(GTCEu.id("nanomuscle_helmet"))) {
- mapping.remap(GTItems.NANO_HELMET.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("nanomuscle_chestplate"))) {
- mapping.remap(GTItems.NANO_CHESTPLATE.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("advanced_nanomuscle_chestplate"))) {
- mapping.remap(GTItems.NANO_CHESTPLATE.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("nanomuscle_leggings"))) {
- mapping.remap(GTItems.NANO_LEGGINGS.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("nanomuscle_boots"))) {
- mapping.remap(GTItems.NANO_BOOTS.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("quarktech_helmet"))) {
- mapping.remap(GTItems.QUANTUM_HELMET.get());
-
- }
-
- if (mapping.getKey().equals(GTCEu.id("quarktech_chestplate"))) {
- mapping.remap(GTItems.QUANTUM_CHESTPLATE.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("advanced_quarktech_chestplate"))) {
- mapping.remap(GTItems.QUANTUM_CHESTPLATE.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("quarktech_leggings"))) {
- mapping.remap(GTItems.QUANTUM_LEGGINGS.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("quarktech_boots"))) {
- mapping.remap(GTItems.QUANTUM_BOOTS.get());
- }
-
- if (mapping.getKey().equals(GTCEu.id("tungstensteel_coil_block"))) {
- mapping.remap(GTBlocks.COIL_RTMALLOY.get().asItem());
- }
- if (mapping.getKey().equals(GTCEu.id("steam_miner"))) {
- mapping.remap(GTMachines.STEAM_MINER.first().getItem());
- }
- if (mapping.getKey().equals(GTCEu.id("tungstensteel_fluid_cell"))) {
- mapping.remap(GTItems.FLUID_CELL_LARGE_TUNGSTEN_STEEL.get().asItem());
- }
- String path = mapping.getKey().getPath();
- if (path.matches("[lhi]v_.+_wirecutter")) {
- String suffix = "_wirecutter";
- String typeString = path.substring(0, 2) + suffix; // [lhi]v_wirecutter -- tooltype name
- String matString = path.substring(3, path.length() - suffix.length()); // material name
-
- GTToolType type = GTToolType.getTypes().get(typeString);
- Material material = GTMaterials.get(matString);
- if (type == null || material == null) {
- mapping.warn();
- return;
- }
- var tool = GTMaterialItems.TOOL_ITEMS.get(material, type);
- if (tool == null) {
- mapping.warn();
- return;
- }
- mapping.remap(tool.asItem());
- }
- });
- event.getMappings(Registries.BLOCK_ENTITY_TYPE, GTCEu.MOD_ID).forEach(mapping -> {
- if (mapping.getKey().equals(GTCEu.id("steam_miner"))) {
- mapping.remap(GTMachines.STEAM_MINER.first().getBlockEntityType());
- }
- });
-
- event.getMappings(Registries.BLOCK, "gregiceng").forEach(mapping -> {
- String path = mapping.getKey().getPath();
- switch (path) {
- case "stocking_bus", "adv_stocking_bus" -> mapping
- .remap(GTAEMachines.STOCKING_IMPORT_BUS_ME.getBlock());
- case "stocking_hatch", "adv_stocking_hatch" -> mapping
- .remap(GTAEMachines.STOCKING_IMPORT_HATCH_ME.getBlock());
- case "crafting_io_buffer" -> mapping.remap(GTAEMachines.ME_PATTERN_BUFFER.getBlock());
- case "crafting_io_slave" -> mapping.remap(GTAEMachines.ME_PATTERN_BUFFER_PROXY.getBlock());
- }
- if (path.contains("input_buffer")) {
- ResourceLocation newName = GTCEu.id(path.replace("input_buffer", "dual_input_hatch"));
- if (mapping.getRegistry().containsKey(newName)) {
- mapping.remap(mapping.getRegistry().getValue(newName));
- } else {
- mapping.remap(GTMachines.DUAL_IMPORT_HATCH[GTValues.LuV].getBlock());
- }
- } else if (path.contains("output_buffer")) {
- ResourceLocation newName = GTCEu.id(path.replace("output_buffer", "dual_output_hatch"));
- if (mapping.getRegistry().containsKey(newName)) {
- mapping.remap(mapping.getRegistry().getValue(newName));
- } else {
- mapping.remap(GTMachines.DUAL_EXPORT_HATCH[GTValues.LuV].getBlock());
- }
- }
- });
- event.getMappings(Registries.BLOCK_ENTITY_TYPE, "gregiceng").forEach(mapping -> {
- String path = mapping.getKey().getPath();
- switch (path) {
- case "stocking_bus", "adv_stocking_bus" -> mapping
- .remap(GTAEMachines.STOCKING_IMPORT_BUS_ME.getBlockEntityType());
- case "stocking_hatch", "adv_stocking_hatch" -> mapping
- .remap(GTAEMachines.STOCKING_IMPORT_HATCH_ME.getBlockEntityType());
- case "crafting_io_buffer" -> mapping.remap(GTAEMachines.ME_PATTERN_BUFFER.getBlockEntityType());
- case "crafting_io_slave" -> mapping.remap(GTAEMachines.ME_PATTERN_BUFFER_PROXY.getBlockEntityType());
- }
- if (path.contains("input_buffer")) {
- ResourceLocation newName = GTCEu.id(path.replace("input_buffer", "dual_input_hatch"));
- if (mapping.getRegistry().containsKey(newName)) {
- mapping.remap(mapping.getRegistry().getValue(newName));
- } else {
- mapping.remap(GTMachines.DUAL_IMPORT_HATCH[GTValues.LuV].getBlockEntityType());
- }
- } else if (path.contains("output_buffer")) {
- ResourceLocation newName = GTCEu.id(path.replace("output_buffer", "dual_output_hatch"));
- if (mapping.getRegistry().containsKey(newName)) {
- mapping.remap(mapping.getRegistry().getValue(newName));
- } else {
- mapping.remap(GTMachines.DUAL_EXPORT_HATCH[GTValues.LuV].getBlockEntityType());
- }
- }
- });
- event.getMappings(Registries.ITEM, "gregiceng").forEach(mapping -> {
- String path = mapping.getKey().getPath();
- switch (path) {
- case "stocking_bus", "adv_stocking_bus" -> mapping.remap(GTAEMachines.STOCKING_IMPORT_BUS_ME.getItem());
- case "stocking_hatch", "adv_stocking_hatch" -> mapping
- .remap(GTAEMachines.STOCKING_IMPORT_HATCH_ME.getItem());
- case "crafting_io_buffer" -> mapping.remap(GTAEMachines.ME_PATTERN_BUFFER.getItem());
- case "crafting_io_slave" -> mapping.remap(GTAEMachines.ME_PATTERN_BUFFER_PROXY.getItem());
- }
- if (path.contains("input_buffer")) {
- ResourceLocation newName = GTCEu.id(path.replace("input_buffer", "dual_input_hatch"));
- if (mapping.getRegistry().containsKey(newName)) {
- mapping.remap(mapping.getRegistry().getValue(newName));
- } else {
- mapping.remap(GTMachines.DUAL_IMPORT_HATCH[GTValues.LuV].getItem());
- }
- } else if (path.contains("output_buffer")) {
- ResourceLocation newName = GTCEu.id(path.replace("output_buffer", "dual_output_hatch"));
- if (mapping.getRegistry().containsKey(newName)) {
- mapping.remap(mapping.getRegistry().getValue(newName));
- } else {
- mapping.remap(GTMachines.DUAL_EXPORT_HATCH[GTValues.LuV].getItem());
- }
- }
- });
-
- for (TagPrefix prefix : GTRegistries.TAG_PREFIXES) {
- String first = prefix.invertedName ? toLowerCaseUnderscore(prefix.name) : "(.+?)";
- String last = prefix.invertedName ? "(.+?)" : toLowerCaseUnderscore(prefix.name);
- Pattern idPattern = Pattern.compile(first + "_" + last);
- event.getMappings(Registries.BLOCK, GTCEu.MOD_ID).forEach(mapping -> {
- Matcher matcher = idPattern.matcher(mapping.getKey().getPath());
- if (matcher.matches()) {
- BlockEntry extends Block> block = GTMaterialBlocks.MATERIAL_BLOCKS.get(prefix,
- GTRegistries.MATERIALS.get(GTCEu.id(matcher.group(1))));
- if (block != null && block.isPresent()) {
- mapping.remap(block.get());
- }
- }
- });
- event.getMappings(Registries.ITEM, GTCEu.MOD_ID).forEach(mapping -> {
- Matcher matcher = idPattern.matcher(mapping.getKey().getPath());
- if (matcher.matches()) {
- Material material = GTRegistries.MATERIALS.get(GTCEu.id(matcher.group(1)));
- if (material == null) return;
- BlockEntry extends Block> block = GTMaterialBlocks.MATERIAL_BLOCKS.get(prefix, material);
- if (block != null && block.isPresent()) {
- mapping.remap(block.asItem());
- } else {
- ItemEntry extends Item> item = GTMaterialItems.MATERIAL_ITEMS.get(prefix, material);
- if (item != null && item.isPresent()) mapping.remap(item.asItem());
- }
- }
- });
- }
- }
}
diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java
index 0a5d5ee13cf..b65f159f02a 100644
--- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java
+++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java
@@ -30,6 +30,7 @@
import com.gregtechceu.gtceu.api.registry.GTRegistries;
import com.gregtechceu.gtceu.api.registry.registrate.GTRegistrate;
import com.gregtechceu.gtceu.common.data.*;
+import com.gregtechceu.gtceu.common.data.datafixer.GTDataFixers;
import com.gregtechceu.gtceu.common.data.loot.*;
import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils;
import com.gregtechceu.gtceu.common.data.materials.AlloyBlastPropertyAddition;
@@ -180,6 +181,8 @@ public static void init() {
MachineOwner.init();
SpoilableBehavior.init(modBus);
+ GTDataFixers.init();
+
FusionReactorMachine.registerFusionTier(GTValues.LuV, " (MKI)");
FusionReactorMachine.registerFusionTier(GTValues.ZPM, " (MKII)");
FusionReactorMachine.registerFusionTier(GTValues.UV, " (MKIII)");
diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/StoneTypes.java b/src/main/java/com/gregtechceu/gtceu/common/block/StoneTypes.java
index 96706d4a420..8ec9e8610bb 100644
--- a/src/main/java/com/gregtechceu/gtceu/common/block/StoneTypes.java
+++ b/src/main/java/com/gregtechceu/gtceu/common/block/StoneTypes.java
@@ -22,7 +22,7 @@ public enum StoneTypes implements StringRepresentable {
DEEPSLATE("deepslate", MapColor.DEEPSLATE, true, () -> Blocks.DEEPSLATE::defaultBlockState, GTMaterials.Deepslate,
false),
RED_GRANITE("red_granite", MapColor.COLOR_RED, true, () -> GTBlocks.RED_GRANITE::getDefaultState,
- GTMaterials.GraniteRed),
+ GTMaterials.RedGranite),
MARBLE("marble", MapColor.QUARTZ, true, () -> GTBlocks.MARBLE::getDefaultState, GTMaterials.Marble),
ANDESITE("andesite", MapColor.STONE, true, () -> Blocks.ANDESITE::defaultBlockState, GTMaterials.Andesite, false),
GRANITE("granite", MapColor.DIRT, true, () -> Blocks.GRANITE::defaultBlockState, GTMaterials.Granite, false),
diff --git a/src/main/java/com/gregtechceu/gtceu/common/block/SurfaceRockBlock.java b/src/main/java/com/gregtechceu/gtceu/common/block/SurfaceRockBlock.java
index 3f452d3633c..6722bcc1c1b 100644
--- a/src/main/java/com/gregtechceu/gtceu/common/block/SurfaceRockBlock.java
+++ b/src/main/java/com/gregtechceu/gtceu/common/block/SurfaceRockBlock.java
@@ -178,11 +178,11 @@ protected void createBlockStateDefinition(StateDefinition.Builder builder
- .fluid(GTMaterials.OilHeavy::getFluid)
+ .fluid(GTMaterials.HeavyOil::getFluid)
.weight(15)
.yield(100, 200)
.depletionAmount(1)
@@ -36,7 +36,7 @@ public class GTBedrockFluids {
.dimensions(overworld()));
public static BedrockFluidDefinition LIGHT_OIL = create(GTCEu.id("light_oil_deposit"), builder -> builder
- .fluid(GTMaterials.OilLight::getFluid)
+ .fluid(GTMaterials.LightOil::getFluid)
.weight(25)
.yield(175, 300)
.depletionAmount(1)
diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java
index 75ea4194c00..11e98eae74c 100644
--- a/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java
+++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java
@@ -243,7 +243,7 @@ private static void registerDuctPipeBlock(int index) {
GTCEu.id("block/casings/solid/machine_casing_inert_ptfe"));
public static final BlockEntry CASING_HSSE_STURDY = createCasingBlock("sturdy_machine_casing",
GTCEu.id("block/casings/solid/machine_casing_sturdy_hsse"));
- public static final BlockEntry CASING_PALLADIUM_SUBSTATION = createCasingBlock("palladium_substation",
+ public static final BlockEntry CASING_PALLADIUM_SUBSTATION = createCasingBlock("palladium_substation_casing",
GTCEu.id("block/casings/solid/machine_casing_palladium_substation"));
public static final BlockEntry CASING_TEMPERED_GLASS = createGlassCasingBlock("tempered_glass",
GTCEu.id("block/casings/transparent/tempered_glass"), () -> RenderType::translucent);
@@ -277,14 +277,14 @@ private static void registerDuctPipeBlock(int index) {
}
// Assembly Line
- public static final BlockEntry CASING_GRATE = createCasingBlock("assembly_line_grating",
+ public static final BlockEntry CASING_ASSEMBLY_GRATE = createCasingBlock("assembly_line_grating",
GTCEu.id("block/casings/pipe/machine_casing_grate"));
- public static final BlockEntry CASING_ASSEMBLY_CONTROL = createCasingBlock("assembly_line_casing",
+ public static final BlockEntry CASING_ASSEMBLY_CONTROL = createCasingBlock("assembly_control_casing",
GTCEu.id("block/casings/mechanic/machine_casing_assembly_control"));
public static final BlockEntry CASING_LAMINATED_GLASS = createGlassCasingBlock("laminated_glass",
GTCEu.id("block/casings/transparent/laminated_glass"), () -> RenderType::cutoutMipped);
- public static final BlockEntry CASING_ASSEMBLY_LINE = createActiveCasing("assembly_line_unit",
- "block/variant/assembly_line");
+ public static final BlockEntry CASING_ASSEMBLY_UNIT = createActiveCasing("assembly_line_unit",
+ "block/variant/assembly_line_unit");
// Gear Boxes
public static final BlockEntry CASING_BRONZE_GEARBOX = createCasingBlock("bronze_gearbox",
@@ -299,7 +299,7 @@ private static void registerDuctPipeBlock(int index) {
GTCEu.id("block/casings/gearbox/machine_casing_gearbox_tungstensteel"));
// Turbine Casings
- public static final BlockEntry CASING_STEEL_TURBINE = createCasingBlock("steel_turbine_casing",
+ public static final BlockEntry CASING_MAGNALIUM_TURBINE = createCasingBlock("magnalium_turbine_casing",
GTCEu.id("block/casings/mechanic/machine_casing_turbine_steel"));
public static final BlockEntry CASING_TITANIUM_TURBINE = createCasingBlock("titanium_turbine_casing",
GTCEu.id("block/casings/mechanic/machine_casing_turbine_titanium"));
@@ -370,9 +370,9 @@ private static void registerDuctPipeBlock(int index) {
public static final BlockEntry HERMETIC_CASING_UHV = createHermeticCasing(UHV);
public static final BlockEntry BRONZE_HULL = createSteamCasing("bronze_machine_casing", "bronze");
- public static final BlockEntry BRONZE_BRICKS_HULL = createSteamCasing("bronze_brick_casing", "bricked_bronze");
+ public static final BlockEntry BRONZE_BRICKS_HULL = createSteamCasing("bricked_bronze_casing", "bricked_bronze");
public static final BlockEntry STEEL_HULL = createSteamCasing("steel_machine_casing", "steel");
- public static final BlockEntry STEEL_BRICKS_HULL = createSteamCasing("steel_brick_casing", "bricked_steel");
+ public static final BlockEntry STEEL_BRICKS_HULL = createSteamCasing("bricked_wrought_iron_casing", "bricked_steel");
// Heating Coils
public static final BlockEntry COIL_CUPRONICKEL = createCoilBlock(CoilBlock.CoilType.CUPRONICKEL);
diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java
index 2b40544a542..b5f1eb80462 100644
--- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java
+++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java
@@ -169,7 +169,7 @@ public static void init() {
rock.setIgnored(Marble, GTMemoizer.memoizeBlockSupplier(() -> GTBlocks.MARBLE.get()));
rock.setIgnored(Granite, Blocks.GRANITE);
rock.setIgnored(Granite, Blocks.POLISHED_GRANITE);
- rock.setIgnored(GraniteRed, GTMemoizer.memoizeBlockSupplier(() -> GTBlocks.RED_GRANITE.get()));
+ rock.setIgnored(RedGranite, GTMemoizer.memoizeBlockSupplier(() -> GTBlocks.RED_GRANITE.get()));
rock.setIgnored(Andesite, Blocks.ANDESITE);
rock.setIgnored(Andesite, Blocks.POLISHED_ANDESITE);
rock.setIgnored(Diorite, Blocks.DIORITE);
@@ -744,7 +744,7 @@ private static void excludeAllGemsButNormal(Material material) {
public static Material CyclohexanoneOxime;
public static Material Caprolactam;
public static Material PlatinumSludgeResidue;
- public static Material PalladiumRaw;
+ public static Material RawPalladium;
public static Material RarestMetalMixture;
public static Material AmmoniumChloride;
public static Material AcidicOsmiumSolution;
@@ -781,9 +781,9 @@ private static void excludeAllGemsButNormal(Material material) {
public static Material ConstructionFoam;
public static Material Oil;
- public static Material OilHeavy;
+ public static Material HeavyOil;
public static Material RawOil;
- public static Material OilLight;
+ public static Material LightOil;
public static Material NaturalGas;
public static Material SulfuricHeavyFuel;
public static Material HeavyFuel;
@@ -923,7 +923,7 @@ private static void excludeAllGemsButNormal(Material material) {
public static Material GarnetYellow;
public static Material Marble;
public static Material Deepslate;
- public static Material GraniteRed;
+ public static Material RedGranite;
public static Material Blackstone;
public static Material VanadiumMagnetite;
public static Material QuartzSand;
diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java
new file mode 100644
index 00000000000..af1a5a99ffd
--- /dev/null
+++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java
@@ -0,0 +1,246 @@
+package com.gregtechceu.gtceu.common.data.datafixer;
+
+import com.gregtechceu.gtceu.GTCEu;
+import com.gregtechceu.gtceu.api.datafixer.DataFixHelper;
+import com.gregtechceu.gtceu.api.datafixer.FixedDataFixerBuilder;
+import com.gregtechceu.gtceu.api.datafixer.LazyDataFixer;
+import com.gregtechceu.gtceu.api.datafixer.fixes.FluidRenameFix;
+import com.gregtechceu.gtceu.api.datafixer.fixes.MaterialRenameFix;
+import com.gregtechceu.gtceu.common.datafixer.fixes.*;
+import com.gregtechceu.gtceu.common.datafixer.schemas.*;
+import com.gregtechceu.gtceu.config.ConfigHolder;
+
+import net.minecraft.SharedConstants;
+import net.minecraft.util.datafix.fixes.*;
+import net.minecraft.util.datafix.schemas.NamespacedSchema;
+
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import com.mojang.datafixers.DSL;
+import com.mojang.datafixers.DataFixUtils;
+import com.mojang.datafixers.DataFixer;
+import com.mojang.datafixers.schemas.Schema;
+import lombok.Getter;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.function.BiFunction;
+import java.util.function.UnaryOperator;
+import java.util.regex.Pattern;
+
+/**
+ * Register new datafixers in {@link #addFixers(FixedDataFixerBuilder)}. Remember to bump {@link GTCEu#GT_DATA_VERSION}
+ * in
+ * every PR that changes existing save data and add a schema & fixer for it here.
+ *
+ *