From dc8e116f7d9ea99bee4b66bc522433855a4e1b4f Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Thu, 21 May 2026 15:20:51 +0300 Subject: [PATCH 01/83] Implement DataFixerUpper --- .../com/gregtechceu/gtceu/api/GTCEuAPI.java | 2 + .../api/datafixer/DataFixesInternals.java | 100 +++++++++ .../api/datafixer/DataFixesInternalsImpl.java | 102 +++++++++ .../gtceu/api/datafixer/EmptySchema.java | 52 +++++ .../gtceu/api/datafixer/FirstSchema.java | 50 +++++ .../gregtechceu/gtceu/api/datafixer/LICENSE | 205 ++++++++++++++++++ .../api/datafixer/NoOpDataFixesInternals.java | 65 ++++++ .../api/datafixer/fixes/ToolBehaviorFix.java | 30 +++ .../api/datafixer/fixes/package-info.java | 4 + .../gtceu/api/datafixer/package-info.java | 4 + .../common/data/datafixer/GTReferences.java | 12 + .../gtceu/common/datafixer/schemas/V0.java | 162 ++++++++++++++ .../datafixer/schemas/package-info.java | 4 + .../gtceu/common/datafixers/TagFixer.java | 39 ---- .../gtceu/config/ConfigHolder.java | 12 + .../mixins/datafixer/DataFixTypesMixin.java | 26 +++ .../core/mixins/datafixer/NbtUtilsMixin.java | 17 ++ src/main/resources/gtceu.mixins.json | 2 + 18 files changed, 849 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptySchema.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/FirstSchema.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/ToolBehaviorFix.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/package-info.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/package-info.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/package-info.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java create mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java create mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java b/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java index e9bdd6edacf..45738ace2ae 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java +++ b/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java @@ -26,6 +26,8 @@ public class GTCEuAPI { + public static final int GT_DATA_VERSION = 2; + /** Will always be available */ public static GTCEu instance; /** Will be available at the Construction stage */ diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java new file mode 100644 index 00000000000..0e4983ff1dd --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java @@ -0,0 +1,100 @@ +/* + * Copyright 2022 QuiltMC + * Modified by the Steam 'n' Rails (Railways) team + * + * 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. + */ +package com.gregtechceu.gtceu.api.datafixer; + +import com.gregtechceu.gtceu.config.ConfigHolder; +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.DataFixUtils; +import com.mojang.datafixers.DataFixer; +import com.mojang.datafixers.DataFixerBuilder; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; +import net.minecraft.SharedConstants; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.datafix.DataFixers; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.*; + +import java.util.function.BiFunction; +import java.util.function.Consumer; + +import static com.google.common.base.Preconditions.checkArgument; + +@ApiStatus.Internal +public abstract class DataFixesInternals { + + public static final String GT_DATA_VERSION_TAG = "GTCEu_DataVersion"; + private static final Logger LOGGER = LogManager.getLogger("GTCEu/DFU"); + + public static final BiFunction BASE_SCHEMA = (version, parent) -> { + checkArgument(version == 0, "version must be 0"); + checkArgument(parent == null, "parent must be null"); + return get().createBaseSchema(); + }; + + public record DataFixerEntry(DataFixer dataFixer, int currentVersion) {} + + @Contract(pure = true) + @Range(from = 0, to = Integer.MAX_VALUE) + public static int getModDataVersion(Dynamic compound) { + return compound.get(GT_DATA_VERSION_TAG).asInt(0); + } + + private static @Nullable DataFixesInternals instance; + + public static DataFixesInternals get() { + if (instance == null) { + // Init config in case it's not loaded yet + if (!ConfigHolder.getInstance().compat.doDataFixers) { + instance = new NoOpDataFixesInternals(); + return instance; + } + + try { + int vanillaDataVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); + Schema latestVanillaSchema = DataFixers.getDataFixer().getSchema(DataFixUtils.makeKey(vanillaDataVersion)); + + instance = new DataFixesInternalsImpl(latestVanillaSchema); + } catch (Exception ex) { + LOGGER.warn("Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft build is hosed."); + LOGGER.warn("Using no-op implementation."); + LOGGER.warn("Full error: ", ex); + + instance = new NoOpDataFixesInternals(); + } + } + + return instance; + } + + public abstract @Nullable DataFixer createDataFixer(String name, int currentVersion, + Consumer fixers); + + public abstract void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, + DataFixer dataFixer); + + public abstract @Nullable DataFixerEntry getFixerEntry(); + + @Contract(value = "-> new", pure = true) + public abstract Schema createBaseSchema(); + + public abstract Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, + Dynamic dynamic); + + public abstract CompoundTag addModDataVersions(CompoundTag compound); +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java new file mode 100644 index 00000000000..578718efde2 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java @@ -0,0 +1,102 @@ +/* + * Copyright 2022 QuiltMC + * Modified by the Steam 'n' Rails (Railways) team + * + * 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. + */ +package com.gregtechceu.gtceu.api.datafixer; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.gregtechceu.gtceu.common.datafixer.schemas.V0; +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.DataFixer; +import com.mojang.datafixers.DataFixerBuilder; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; +import net.minecraft.SharedConstants; +import net.minecraft.nbt.CompoundTag; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Range; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; +import java.util.function.Consumer; + +@ApiStatus.Internal +public final class DataFixesInternalsImpl extends DataFixesInternals { + + private final Schema latestVanillaSchema; + + private @Nullable DataFixerEntry dataFixer; + + public DataFixesInternalsImpl(Schema latestVanillaSchema) { + this.latestVanillaSchema = latestVanillaSchema; + + this.dataFixer = null; + } + + @Override + public synchronized DataFixer createDataFixer(String name, int currentVersion, Consumer fixers) { + DataFixerBuilder builder = new DataFixerBuilder(currentVersion); + fixers.accept(builder); + + DataFixer fixer; + if (SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE.isEmpty()) { + fixer = builder.buildUnoptimized(); + } else { + Executor executor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() + .setNameFormat(name + " Datafixer Bootstrap").setDaemon(true).setPriority(1).build()); + fixer = builder.buildOptimized(SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE, executor); + } + DataFixesInternals.get().registerFixer(currentVersion, fixer); + return fixer; + } + + @Override + public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer) { + if (this.dataFixer != null) { + throw new IllegalArgumentException("GTCEu already has a registered data fixer"); + } + + this.dataFixer = new DataFixerEntry(dataFixer, currentVersion); + } + + @Override + public @Nullable DataFixerEntry getFixerEntry() { + return dataFixer; + } + + @Override + public Schema createBaseSchema() { + return new V0(0, this.latestVanillaSchema); + } + + @Override + public Dynamic updateWithAllFixers(DSL.TypeReference type, Dynamic dynamic) { + if (dataFixer != null) { + int modDataVersion = DataFixesInternals.getModDataVersion(dynamic); + dynamic = dataFixer.dataFixer().update(type, dynamic, modDataVersion, dataFixer.currentVersion()); + } + + return dynamic; + } + + @Override + public CompoundTag addModDataVersions(CompoundTag compound) { + if (dataFixer != null) + compound.putInt(GT_DATA_VERSION_TAG, dataFixer.currentVersion()); + + return compound; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptySchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptySchema.java new file mode 100644 index 00000000000..d52a41cd072 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptySchema.java @@ -0,0 +1,52 @@ +/* + * 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. + */ +package com.gregtechceu.gtceu.api.datafixer; + +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.Type; +import com.mojang.datafixers.types.templates.TypeTemplate; +import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; +import org.jetbrains.annotations.Range; + +import java.util.Map; +import java.util.function.Supplier; + +/** + * Represents an empty {@link Schema}, having no parent and containing no type definitions. + */ +public final class EmptySchema extends FirstSchema { + + /** + * Constructs an empty schema. + * + * @param versionKey the data version key + */ + public EmptySchema(@Range(from = 0, to = Integer.MAX_VALUE) int versionKey) { + super(versionKey); + } + + // 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/FirstSchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FirstSchema.java new file mode 100644 index 00000000000..a04730bf6d5 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FirstSchema.java @@ -0,0 +1,50 @@ +/* + * 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. + */ +package com.gregtechceu.gtceu.api.datafixer; + +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.TypeTemplate; +import org.jetbrains.annotations.Range; + +import java.util.Map; +import java.util.function.Supplier; + +public class FirstSchema extends Schema { + + /** + * Creates a schema. + * + * @param versionKey the data version key + */ + public FirstSchema(@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(); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE new file mode 100644 index 00000000000..ad5b29c1e36 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE @@ -0,0 +1,205 @@ +Certain portions of the datafixer are taken from the +Quilt Standard Library (https://github.com/QuiltMC/quilt-standard-libraries), +and as such are licensed under the following license: + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java new file mode 100644 index 00000000000..39f5d1fe285 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java @@ -0,0 +1,65 @@ +/* + * Copyright 2022 QuiltMC + * Modified by the Steam 'n' Rails (Railways) team + * + * 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. + */ +package com.gregtechceu.gtceu.api.datafixer; + +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.DataFixer; +import com.mojang.datafixers.DataFixerBuilder; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; +import net.minecraft.nbt.CompoundTag; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Range; + +import java.util.function.Consumer; + +public class NoOpDataFixesInternals extends DataFixesInternals { + + private final Schema schema; + + public NoOpDataFixesInternals() { + schema = new EmptySchema(0); + } + + @Override + public @Nullable DataFixer createDataFixer(String name, int currentVersion, Consumer fixers) { + return null; + } + + @Override + public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer) {} + + @Override + public @Nullable DataFixerEntry getFixerEntry() { + return null; + } + + @Override + public Schema createBaseSchema() { + return schema; + } + + @Override + public Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, Dynamic dynamic) { + return dynamic; + } + + @Override + public CompoundTag addModDataVersions(CompoundTag compound) { + return compound; + } +} 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..c90a13f48e2 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/ToolBehaviorFix.java @@ -0,0 +1,30 @@ +package com.gregtechceu.gtceu.api.datafixer.fixes; + +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; +import net.minecraft.util.datafix.fixes.ItemStackTagFix; + +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/common/data/datafixer/GTReferences.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java new file mode 100644 index 00000000000..f810e6524ee --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java @@ -0,0 +1,12 @@ +package com.gregtechceu.gtceu.common.data.datafixer; + +import com.mojang.datafixers.DSL; + +public class GTReferences { + + public static final DSL.TypeReference MATERIAL_STACK = () -> "material_stack"; + public static final DSL.TypeReference MATERIAL_NAME = () -> "material_name"; + + public static final DSL.TypeReference FLUID_STACK = () -> "fluid_stack"; + public static final DSL.TypeReference FLUID_NAME = () -> "fluid_name"; +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java new file mode 100644 index 00000000000..e84b704629a --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -0,0 +1,162 @@ +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; +import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.Hook; +import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + +import java.util.Locale; +import java.util.Map; +import java.util.function.Supplier; + +import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; +import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ELECTRIC_TIERS; + +public class V0 extends NamespacedSchema { + + public V0(int versionKey, Schema parent) { + super(versionKey, parent); + } + + // spotless:off + @Override + public void registerTypes(Schema schema, Map> entityTypes, + Map> blockEntityTypes) { + super.registerTypes(schema, entityTypes, blockEntityTypes); + + schema.registerType(true, References.ITEM_STACK, () -> DSL.hook( + DSL.optionalFields( + "id", References.ITEM_NAME.in(schema), + "tag", DSL.optionalFields( + "EntityTag", References.ENTITY_TREE.in(schema), + "BlockEntityTag", References.BLOCK_ENTITY.in(schema), + "CanDestroy", DSL.list(References.BLOCK_NAME.in(schema)), + "CanPlaceOn", DSL.list(References.BLOCK_NAME.in(schema)), + "Items", DSL.list(References.ITEM_STACK.in(schema)) + ) + ), + V705Accessor.gtceu$getAddNamesHookFunction(), Hook.HookFunction.IDENTITY) + ); + + schema.registerType(false, GTReferences.MATERIAL_NAME, () -> DSL.constType(namespacedString())); + + schema.registerType(true, GTReferences.FLUID_STACK, () -> DSL.hook( + DSL.optionalFields( + "FluidName", GTReferences.FLUID_NAME.in(schema), + "Tag", DSL.remainder() + ), + Hook.HookFunction.IDENTITY, Hook.HookFunction.IDENTITY) + ); + schema.registerType(false, GTReferences.FLUID_NAME, () -> DSL.constType(namespacedString())); + } + + protected static TypeTemplate simpleMachine(Schema schema) { + return DSL.optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema), + "importFluids", notifiableFluidTank(schema), + "exportFluids", notifiableFluidTank(schema), + "energyContainer", notifiableEnergyContainer(schema), + DSL.optionalFields( + "chargerInventory", itemHandler(schema), + "circuitInventory", notifiableItemHandler(schema) + ) + ); + } + + protected static void addForTiers(Schema schema, Map> map, + String name, Supplier template, int... tiers) { + for (int tier : GTValues.ALL_TIERS) { + schema.register(map, "gtceu:" + GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, template); + } + } + + @Override + public Map> registerBlockEntities(Schema schema) { + Map> map = super.registerBlockEntities(schema); + + addForTiers(schema, map, "machine_hull", DSL::remainder, ALL_TIERS); + Supplier simpleMachine = () -> V0.simpleMachine(schema); + addForTiers(schema, map, "electric_furnace", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "alloy_smelter", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "arc_furnace", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "assembler", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "autoclave", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "bender", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "brewery", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "canner", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "centrifuge", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "chemical_bath", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "chemical_reactor", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "compressor", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "cutter", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "distillery", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "electrolyzer", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "electromagnetic_separator", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "extractor", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "extruder", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "fermenter", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "fluid_heater", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "fluid_solidifier", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "forge_hammer", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "forming_press", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "lathe", simpleMachine, ELECTRIC_TIERS); + // addForTiers(schema, map, "scanner", simpleMachine, ELECTRIC_TIERS); // Skip scanner; it's added later + addForTiers(schema, map, "mixer", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "ore_washer", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "packer", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "polarizer", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "laser_engraver", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "sifter", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "thermal_centrifuge", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "wiremill", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "circuit_assembler", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "macerator", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "gas_collector", simpleMachine, ELECTRIC_TIERS); + addForTiers(schema, map, "rock_crusher", simpleMachine, ELECTRIC_TIERS); + + for (MachineDefinition definition : GTRegistries.MACHINES) { + registerInventory(schema, map, definition.getId().toString()); + } + return map; + } + + protected static TypeTemplate itemHandler(Schema schema) { + return DSL.field("Items", DSL.list(References.ITEM_STACK.in(schema))); + } + + protected static TypeTemplate notifiableItemHandler(Schema schema) { + return DSL.field("storage", itemHandler(schema)); + } + + protected static TypeTemplate notifiableFluidTank(Schema schema) { + return DSL.field("storages", DSL.list(GTReferences.FLUID_STACK.in(schema)))); + } + + protected static TypeTemplate notifiableEnergyContainer(Schema schema) { + return DSL.fields( + "energyStored", DSL.constType(DSL.longType()) + ); + } + + protected static void registerInventory(Schema schema, Map> map, String name) { + schema.register(map, name, () -> DSL.or( + DSL.optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema) + ), + DSL.or( + DSL.optionalFields("inventory", notifiableItemHandler(schema)), + DSL.optionalFields("cache", notifiableItemHandler(schema)) + ) + )); + } + // spotless:on +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/package-info.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/package-info.java new file mode 100644 index 00000000000..a5712064fb1 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java b/src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java deleted file mode 100644 index 7bf24e1a6a8..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixers/TagFixer.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.gregtechceu.gtceu.common.datafixers; - -import com.gregtechceu.gtceu.utils.GTMath; - -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; - -import java.util.Locale; - -public class TagFixer { - - public static final String[] FLUID_TAGS = { - "currentMilliBucketsPerTick", - "globalTransferSizeMillibuckets", - "minValue", - "maxValue", - }; - - // This is necessary for updating from old versions due to FluidStack long -> int changes - // Any fluid-related long tags need to be turned into int tags - public static void fixFluidTags(CompoundTag tag) { - if (tag.contains("cover", Tag.TAG_COMPOUND)) { - CompoundTag t = tag.getCompound("cover"); - for (String key : t.getAllKeys()) { - var cover = t.getCompound(key); - var id = cover.getCompound("uid").getString("id"); - if ((id.toLowerCase(Locale.ROOT).contains("fluid") || id.toLowerCase(Locale.ROOT).contains("pump"))) { - var data = cover.getCompound("payload").getCompound("d"); - for (String fix_key : FLUID_TAGS) { - if (data.contains(fix_key, Tag.TAG_LONG)) { - var l = data.getLong(fix_key); - data.putInt(fix_key, GTMath.saturatedCast(l)); - } - } - } - } - } - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 8e617deda31..4ed7710a333 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -30,6 +30,11 @@ public static void init() { } } + public static ConfigHolder getInstance() { + init(); + return INSTANCE; + } + @Configurable public RecipeConfigs recipes = new RecipeConfigs(); @Configurable @@ -186,6 +191,13 @@ public static class RecipeConfigs { public static class CompatibilityConfigs { + @Configurable + @Configurable.Comment({ "Whether to run datafixers on world load.", + "Do note that mods like ModernFix will interfere with this.", + "Default: true" }) + @Configurable.UpdateRestriction(UpdateRestrictions.MAIN_MENU) + public boolean doDataFixers = true; + @Configurable @Configurable.Comment("Config options regarding GTEU compatibility with other energy systems") public EnergyCompatConfig energy = new EnergyCompatConfig(); diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java new file mode 100644 index 00000000000..8c88462d8ca --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java @@ -0,0 +1,26 @@ +package com.gregtechceu.gtceu.core.mixins.datafixer; + +import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.mojang.datafixers.DSL; +import com.mojang.serialization.Dynamic; +import net.minecraft.util.datafix.DataFixTypes; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(DataFixTypes.class) +public class DataFixTypesMixin { + + @Shadow + @Final + private DSL.TypeReference type; + + // ModifyReturnValue to inject our fixes *after* vanilla ones + @ModifyReturnValue(method = "update(Lcom/mojang/datafixers/DataFixer;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic;", + at = @At(value = "RETURN")) + private Dynamic gtceu$injectDataFixers(Dynamic value) { + return DataFixesInternals.get().updateWithAllFixers(this.type, value); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java new file mode 100644 index 00000000000..cd4c230d297 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java @@ -0,0 +1,17 @@ +package com.gregtechceu.gtceu.core.mixins.datafixer; + +import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(NbtUtils.class) +public class NbtUtilsMixin { + + @ModifyReturnValue(method = "addDataVersion", at = @At("RETURN")) + private static CompoundTag gtceu$addModDataVersions(CompoundTag tag) { + return DataFixesInternals.get().addModDataVersions(tag); + } +} diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index 84336bfed86..981e9c422a3 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -64,6 +64,8 @@ "TagManagerMixin", "TagValueAccessor", "client.ItemEntityMixin", + "datafixer.DataFixTypesMixin", + "datafixer.NbtUtilsMixin", "dev.datagen.FixParallelKeyMappingRegistrationMixin", "dev.test.GameTestRegistryMixin", "emi.EmiRecipeFillerMixin", From 7c1cc76c03ea4bbaeb60427d54d8ab985019d900 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Thu, 21 May 2026 15:21:29 +0300 Subject: [PATCH 02/83] start adding GT fixers --- .../gtceu/common/CommonEventListener.java | 6 -- .../gregtechceu/gtceu/common/CommonProxy.java | 3 + .../common/data/datafixer/GTDataFixers.java | 95 +++++++++++++++++++ .../common/data/datafixer/package-info.java | 4 + .../datafixer/fixes/OilVariantsRenameFix.java | 17 ++++ .../common/datafixer/fixes/package-info.java | 4 + .../gtceu/common/datafixer/schemas/V1.java | 26 +++++ .../core/mixins/datafixer/V705Accessor.java | 16 ++++ src/main/resources/gtceu.mixins.json | 1 + 9 files changed, 166 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/data/datafixer/package-info.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/package-info.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java create mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index aa13751d7bd..2fa0734b89a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -588,17 +588,11 @@ private static boolean isMaterialStackFluidOnly(@NotNull MaterialStack ms) { @SubscribeEvent public static void remapIds(MissingMappingsEvent 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("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()); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index ccd0d830521..49e29163c03 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -27,6 +27,7 @@ import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.*; import com.gregtechceu.gtceu.common.data.GTPlaceholders; +import com.gregtechceu.gtceu.common.data.datafixer.GTDataFixers; import com.gregtechceu.gtceu.common.data.machines.GTMachineUtils; import com.gregtechceu.gtceu.common.data.materials.GTFoods; import com.gregtechceu.gtceu.common.item.tool.rotation.CustomBlockRotations; @@ -197,6 +198,8 @@ public static void init() { SyncedKeyMappings.init(); MachineOwner.init(); + 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/data/datafixer/GTDataFixers.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java new file mode 100644 index 00000000000..d77303e17ce --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -0,0 +1,95 @@ +package com.gregtechceu.gtceu.common.data.datafixer; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.gregtechceu.gtceu.common.datafixer.fixes.*; +import com.gregtechceu.gtceu.common.datafixer.schemas.V1; +import com.gregtechceu.gtceu.config.ConfigHolder; + +import net.minecraft.util.datafix.fixes.AddNewChoices; +import net.minecraft.util.datafix.fixes.BlockRenameFix; +import net.minecraft.util.datafix.fixes.ItemRenameFix; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + +import com.mojang.datafixers.DataFixerBuilder; +import com.mojang.datafixers.schemas.Schema; + +import java.util.Map; +import java.util.Objects; +import java.util.function.BiFunction; +import java.util.function.UnaryOperator; +import java.util.regex.Pattern; + +import static com.gregtechceu.gtceu.api.datafixer.DataFixesInternals.BASE_SCHEMA; + +@SuppressWarnings("SameParameterValue") +public class GTDataFixers { + + private static final BiFunction SAME = Schema::new; + private static final BiFunction SAME_NAMESPACED = NamespacedSchema::new; + + public static void init() { + if (!ConfigHolder.INSTANCE.compat.doDataFixers) { + return; + } + + GTCEu.LOGGER.info("Registering data fixers"); + + DataFixesInternals api = DataFixesInternals.get(); + api.createDataFixer("GTCEu", GTCEuAPI.GT_DATA_VERSION, GTDataFixers::addFixers); + } + + public static void addFixers(DataFixerBuilder builder) { + Schema schemaV0 = builder.addSchema(0, BASE_SCHEMA); + builder.addFixer(new AddNewChoices(schemaV0, "Add GT block entities", References.BLOCK_ENTITY)); + + Schema schemaV1 = builder.addSchema(1, V1::new); + + Schema schemaV4 = builder.addSchema(4, SAME_NAMESPACED); + createBlockItemRenameFix(builder, schemaV4, "RTM Alloy Coil Block", + createRenamer("tungstensteel_coil_block", "rtm_alloy_coil_block")); + + Schema schemaV5 = builder.addSchema(5, SAME_NAMESPACED); + builder.addFixer(ItemRenameFix.create(schemaV5, "Advanced Nanomuscle Chestplate rename fix", + createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); + + /* + createBlockItemRenameFix(builder, schemaV5, "U238", + createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); + createBlockItemRenameFix(builder, schemaV5, "Pu239", + createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); + createBlockItemRenameFix(builder, schemaV5, "Red Granite", + createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); + createBlockItemRenameFix(builder, schemaV5, "Tungstensteel", + createRenamer(Pattern.compile("gtceu:(.*)tungstensteel"), "gtceu:$1tungsten_steel")); + + createBlockItemRenameFix(builder, schemaV5, "Raw Oil", + createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); + */ + + Schema schemaV6 = builder.addSchema(6, SAME_NAMESPACED); + + createBlockItemRenameFix(builder, schemaV6, "Palladium Substation Casing", + createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); + } + + private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, + UnaryOperator renamer) { + builder.addFixer(ItemRenameFix.create(schema, name + " rename", renamer)); + builder.addFixer(BlockRenameFix.create(schema, name + " rename fix", renamer)); + } + + private static UnaryOperator createRenamer(String oldName, String newName) { + return id -> Objects.equals(NamespacedSchema.ensureNamespaced(id), oldName) ? newName : id; + } + + private static UnaryOperator createRenamer(Map renameMap) { + return id -> renameMap.getOrDefault(NamespacedSchema.ensureNamespaced(id), id); + } + + private static UnaryOperator createRenamer(Pattern check, String replaceWith) { + return id -> check.matcher(NamespacedSchema.ensureNamespaced(id)).replaceAll(replaceWith); + } +} \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/package-info.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/package-info.java new file mode 100644 index 00000000000..d3f47b5873d --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.common.data.datafixer; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java new file mode 100644 index 00000000000..016fc5e7994 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java @@ -0,0 +1,17 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.google.common.collect.ImmutableMap; + +import java.util.Map; + +public class OilVariantsRenameFix { + + public static final Map RENAMED_IDS = ImmutableMap.builder() + .put("gtceu:oil_heavy", "gtceu:heavy_oil") + .put("gtceu:oil_light", "gtceu:light_oil") + .put("gtceu:oil_medium", "gtceu:raw_oil") + .put("gtceu:oil_heavy_bucket", "gtceu:heavy_oil_bucket") + .put("gtceu:oil_light_bucket", "gtceu:light_oil_bucket") + .put("gtceu:oil_medium_bucket", "gtceu:raw_oil_bucket") + .build(); +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/package-info.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/package-info.java new file mode 100644 index 00000000000..beb1ec92e54 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/package-info.java @@ -0,0 +1,4 @@ +@NotNullByDefault +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import org.jetbrains.annotations.NotNullByDefault; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java new file mode 100644 index 00000000000..eb9f682641e --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java @@ -0,0 +1,26 @@ +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + +import java.util.Map; +import java.util.function.Supplier; + +public class V1 extends NamespacedSchema { + + public V1(int versionKey, Schema parent) { + super(versionKey, parent); + } + + @Override + public void registerTypes(Schema schema, Map> entityTypes, + Map> blockEntityTypes) { + super.registerTypes(schema, entityTypes, blockEntityTypes); + } + + @Override + public Map> registerBlockEntities(Schema schema) { + return super.registerBlockEntities(schema); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java new file mode 100644 index 00000000000..9f762dd1d93 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java @@ -0,0 +1,16 @@ +package com.gregtechceu.gtceu.core.mixins.datafixer; + +import com.mojang.datafixers.types.templates.Hook; +import lombok.experimental.Accessors; +import net.minecraft.util.datafix.schemas.V705; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(V705.class) +public interface V705Accessor { + + @Accessor("ADD_NAMES") + static Hook.HookFunction gtceu$getAddNamesHookFunction() { + throw new AssertionError(); + } +} diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index 981e9c422a3..ea864de46de 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -66,6 +66,7 @@ "client.ItemEntityMixin", "datafixer.DataFixTypesMixin", "datafixer.NbtUtilsMixin", + "datafixer.V705Accessor", "dev.datagen.FixParallelKeyMappingRegistrationMixin", "dev.test.GameTestRegistryMixin", "emi.EmiRecipeFillerMixin", From 44f0e4f8b58cbe9e2bba91d829f5d51734a4b922 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 10:34:53 +0300 Subject: [PATCH 03/83] Move `GT_DATA_VERSION` field to GTCEu.java --- .../java/com/gregtechceu/gtceu/GTCEu.java | 26 +++++++++++++++---- .../com/gregtechceu/gtceu/api/GTCEuAPI.java | 2 -- .../common/data/datafixer/GTDataFixers.java | 3 +-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index e7b1de43d39..8a5aa50cc55 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -34,6 +34,22 @@ public class GTCEu { public static final Path GTCEU_FOLDER = getGameDir().resolve("gtceu"); + /** + * Only used for datafixers. Bump whenever a block changes id, save data layout changes, etc.
+ * Should be bumped up to the next multiple of 10 the first time it is bumped after a release, then by 1 for each + * subsequent change. + * + *

+ * Versions: + *

    + *
  • 10: 7.5.3
  • + *
  • 20: 8.0.0-SNAPSHOT+HASH3
  • + *
  • 81: 8.0.0
  • + *
  • 81: 8.0.0
  • + *
+ */ + public static final int GT_DATA_VERSION = 80; + public GTCEu() { GTCEu.init(); GTCEuAPI.instance = this; @@ -96,7 +112,7 @@ public static boolean isDataGen() { /** * A friendly reminder that the server instance is populated on the server side only, so null/side check it! - * + * * @return the current minecraft server instance */ public static MinecraftServer getMinecraftServer() { @@ -113,7 +129,7 @@ public static boolean isModLoaded(String modId) { /** * For async stuff use this, otherwise use {@link GTCEu isClientSide} - * + * * @return if the current thread is the client thread */ public static boolean isClientThread() { @@ -123,7 +139,7 @@ public static boolean isClientThread() { /** * @return if the game is the PHYSICAL client, e.g. not a dedicated server. * @apiNote Do not use this to check if you're currently on the server thread for side-specific actions! - * It does NOT work for that. Use {@link #isClientThread()} instead. + * It does NOT work for that. Use {@link #isClientThread()} instead. * @see #isClientThread() */ public static boolean isClientSide() { @@ -132,9 +148,9 @@ public static boolean isClientSide() { /** * This check isn't the same for client and server! - * + * * @return if it's safe to access the current instance {@link net.minecraft.world.level.Level Level} on client or if - * it's safe to access any level on server. + * it's safe to access any level on server. */ public static boolean canGetServerLevel() { if (isClientSide()) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java b/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java index 45738ace2ae..e9bdd6edacf 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java +++ b/src/main/java/com/gregtechceu/gtceu/api/GTCEuAPI.java @@ -26,8 +26,6 @@ public class GTCEuAPI { - public static final int GT_DATA_VERSION = 2; - /** Will always be available */ public static GTCEu instance; /** Will be available at the Construction stage */ 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 index d77303e17ce..e78c402ee9e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.common.data.datafixer; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; import com.gregtechceu.gtceu.common.datafixer.fixes.*; import com.gregtechceu.gtceu.common.datafixer.schemas.V1; @@ -38,7 +37,7 @@ public static void init() { GTCEu.LOGGER.info("Registering data fixers"); DataFixesInternals api = DataFixesInternals.get(); - api.createDataFixer("GTCEu", GTCEuAPI.GT_DATA_VERSION, GTDataFixers::addFixers); + api.createDataFixer("GTCEu", GTCEu.GT_DATA_VERSION, GTDataFixers::addFixers); } public static void addFixers(DataFixerBuilder builder) { From b4450142da15399a7e5e463ce9f537c1cf56ecdd Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 10:35:48 +0300 Subject: [PATCH 04/83] Formatting changes --- .../gtceu/api/datafixer/DataFixesInternals.java | 3 +-- .../gtceu/api/datafixer/DataFixesInternalsImpl.java | 9 ++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java index 0e4983ff1dd..6f57132b16e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java @@ -93,8 +93,7 @@ public abstract void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int @Contract(value = "-> new", pure = true) public abstract Schema createBaseSchema(); - public abstract Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, - Dynamic dynamic); + public abstract Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, Dynamic dynamic); public abstract CompoundTag addModDataVersions(CompoundTag compound); } diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java index 578718efde2..cc3f06e8439 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java @@ -84,12 +84,11 @@ public Schema createBaseSchema() { @Override public Dynamic updateWithAllFixers(DSL.TypeReference type, Dynamic dynamic) { - if (dataFixer != null) { - int modDataVersion = DataFixesInternals.getModDataVersion(dynamic); - dynamic = dataFixer.dataFixer().update(type, dynamic, modDataVersion, dataFixer.currentVersion()); + if (dataFixer == null) { + return dynamic; } - - return dynamic; + int modDataVersion = DataFixesInternals.getModDataVersion(dynamic); + return dataFixer.dataFixer().update(type, dynamic, modDataVersion, dataFixer.currentVersion()); } @Override From 9b20cd0a22a4aff9e12b708d54c0ccf1b60f52ad Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 16:24:50 +0300 Subject: [PATCH 05/83] Add the remaining 150 or so GT machines to V0 schema --- .../gtceu/api/datafixer/types/ExtraDSL.java | 453 +++++++++++++++ .../common/data/datafixer/GTDataFixers.java | 3 +- .../gtceu/common/datafixer/schemas/V0.java | 529 ++++++++++++++---- .../core/mixins/datafixer/V705Accessor.java | 16 - src/main/resources/gtceu.mixins.json | 1 - 5 files changed, 887 insertions(+), 115 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/types/ExtraDSL.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java 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..bee671c6777 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/types/ExtraDSL.java @@ -0,0 +1,453 @@ +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 and( + optional(field(name, element)), + remainderType() + ); + } + + static Type, Pair, Dynamic>>> optionalFields( + final String name1, final Type element1, + final String name2, final Type element2 + ) { + return and( + optional(field(name1, element1)), + optional(field(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 and( + optional(field(name1, element1)), + optional(field(name2, element2)), + optional(field(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 and( + optional(field(name1, element1)), + optional(field(name2, element2)), + optional(field(name3, element3)), + optionalFields( + name4, element4 + ) + ); + } + + 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 and( + optional(field(name1, element1)), + optional(field(name2, element2)), + optional(field(name3, element3)), + optionalFields( + name4, element4, + name5, element5 + ) + ); + } + + 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 and( + optional(field(name1, element1)), + optional(field(name2, element2)), + optional(field(name3, element3)), + optionalFields( + name4, element4, + name5, element5, + name6, element6 + ) + ); + } + + 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/common/data/datafixer/GTDataFixers.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java index e78c402ee9e..6b7a405463e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -41,8 +41,7 @@ public static void init() { } public static void addFixers(DataFixerBuilder builder) { - Schema schemaV0 = builder.addSchema(0, BASE_SCHEMA); - builder.addFixer(new AddNewChoices(schemaV0, "Add GT block entities", References.BLOCK_ENTITY)); + builder.addSchema(0, BASE_SCHEMA); Schema schemaV1 = builder.addSchema(1, V1::new); diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index e84b704629a..ad3cb84a354 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -1,23 +1,29 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; +import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; -import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; + import com.mojang.datafixers.DSL; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.Hook; import com.mojang.datafixers.types.templates.TypeTemplate; + import net.minecraft.util.datafix.fixes.References; import net.minecraft.util.datafix.schemas.NamespacedSchema; +import net.minecraftforge.fml.loading.LoadingModList; import java.util.Locale; import java.util.Map; import java.util.function.Supplier; +import static com.gregtechceu.gtceu.api.GTValues.*; +import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.*; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; -import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ELECTRIC_TIERS; +import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; +import static com.mojang.datafixers.DSL.*; public class V0 extends NamespacedSchema { @@ -31,132 +37,463 @@ public void registerTypes(Schema schema, Map> ent Map> blockEntityTypes) { super.registerTypes(schema, entityTypes, blockEntityTypes); - schema.registerType(true, References.ITEM_STACK, () -> DSL.hook( - DSL.optionalFields( - "id", References.ITEM_NAME.in(schema), - "tag", DSL.optionalFields( - "EntityTag", References.ENTITY_TREE.in(schema), - "BlockEntityTag", References.BLOCK_ENTITY.in(schema), - "CanDestroy", DSL.list(References.BLOCK_NAME.in(schema)), - "CanPlaceOn", DSL.list(References.BLOCK_NAME.in(schema)), - "Items", DSL.list(References.ITEM_STACK.in(schema)) - ) - ), - V705Accessor.gtceu$getAddNamesHookFunction(), Hook.HookFunction.IDENTITY) - ); - - schema.registerType(false, GTReferences.MATERIAL_NAME, () -> DSL.constType(namespacedString())); + schema.registerType(false, GTReferences.MATERIAL_NAME, () -> constType(namespacedString())); - schema.registerType(true, GTReferences.FLUID_STACK, () -> DSL.hook( - DSL.optionalFields( + schema.registerType(true, GTReferences.FLUID_STACK, () -> hook( + optionalFields( "FluidName", GTReferences.FLUID_NAME.in(schema), - "Tag", DSL.remainder() + "Tag", remainder() ), Hook.HookFunction.IDENTITY, Hook.HookFunction.IDENTITY) ); - schema.registerType(false, GTReferences.FLUID_NAME, () -> DSL.constType(namespacedString())); + schema.registerType(false, GTReferences.FLUID_NAME, () -> constType(namespacedString())); } - protected static TypeTemplate simpleMachine(Schema schema) { - return DSL.optionalFields( + @Override + public Map> registerBlockEntities(Schema schema) { + Map> map = super.registerBlockEntities(schema); + + // region steam + final Supplier steamMachine = () -> optionalFields( + "steamTank", notifiableFluidTank(schema) + ); + final Supplier steamBoiler = () -> optionalFields( + "waterTank", notifiableFluidTank(schema), + steamMachine.get() + ); + registerSteamMachine(schema, map, "steam_solid_boiler", () -> optionalFields( + "fuelHandler", notifiableItemHandler(schema), + "ashHandler", notifiableItemHandler(schema), + steamBoiler.get() + )); + registerSteamMachine(schema, map, "steam_liquid_boiler", () -> optionalFields( + "fuelTank", notifiableFluidTank(schema), + steamBoiler.get() + )); + registerSteamMachine(schema, map, "steam_solar_boiler", steamBoiler); + registerSimpleSteamMachine(schema, map, "extractor"); + registerSimpleSteamMachine(schema, map, "steam_macerator"); + registerSimpleSteamMachine(schema, map, "compressor"); + registerSimpleSteamMachine(schema, map, "forge_hammer"); + registerSimpleSteamMachine(schema, map, "furnace"); + registerSimpleSteamMachine(schema, map, "alloy_smelter"); + registerSimpleSteamMachine(schema, map, "rock_crusher"); + schema.register(map, "steam_miner", () -> optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema), + "steamTank", notifiableFluidTank(schema) + )); + // endregion + + // region simple + registerForTiers(schema, map, "machine_hull", DSL::remainder, ALL_TIERS); + registerSimpleMachine(schema, map, "electric_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "alloy_smelter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "arc_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "autoclave", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "bender", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "brewery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "canner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "chemical_bath", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "chemical_reactor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "compressor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "cutter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "distillery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "electrolyzer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "electromagnetic_separator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "extractor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "extruder", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "fermenter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "fluid_heater", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "fluid_solidifier", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "forge_hammer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "forming_press", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "lathe", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "scanner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "mixer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "ore_washer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "packer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "polarizer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "laser_engraver", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "sifter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "thermal_centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "wiremill", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "circuit_assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "macerator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gas_collector", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "rock_crusher", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "air_scrubber", LOW_TIERS); + registerSimpleMachine(schema, map, "combustion", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "steam_turbine", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gas_turbine", ELECTRIC_TIERS); + // endregion + + // region electric + final Supplier energyContainer = () -> optionalFields( + "energyContainer", notifiableEnergyContainer(schema) + ); + final int[] transformerTiers = GTValues.tiersBetween(ULV, GTCEuAPI.isHighTier() ? OpV : UV); + registerForTiers(schema, map, "transformer_1a", energyContainer, transformerTiers); + registerForTiers(schema, map, "transformer_2a", energyContainer, transformerTiers); + registerForTiers(schema, map, "transformer_4a", energyContainer, transformerTiers); + registerForTiers(schema, map, "transformer_16a", energyContainer, transformerTiers); + + registerForTiers(schema, map, "1a_energy_converter", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "4a_energy_converter", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "8a_energy_converter", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "16a_energy_converter", energyContainer, ALL_TIERS); + + schema.registerSimple(map, "long_distance_item_pipeline_endpoint"); + schema.registerSimple(map, "long_distance_fluid_pipeline_endpoint"); + schema.registerSimple(map, "long_distance_fluid_pipeline_endpoint"); + + final Supplier batteryBuffer = () -> optionalFields( + "batteryInventory", itemHandler(schema), + energyContainer.get() + ); + registerForTiers(schema, map, "battery_buffer_4x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "battery_buffer_8x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "battery_buffer_16x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "charger_4x", batteryBuffer, ALL_TIERS); + + registerForTiers(schema, map, "pump", () -> optionalFields( + "cache", notifiableFluidTank(schema), + energyContainer.get() + ), LV, MV, HV, EV); + registerForTiers(schema, map, "fisher", () -> optionalFields( + "cache", notifiableItemHandler(schema), + "baitHandler", notifiableItemHandler(schema), + "chargerInventory", itemHandler(schema), + energyContainer.get() + ), LV, MV, HV, EV, IV, LuV); + registerForTiers(schema, map, "block_breaker", () -> optionalFields( + "cache", notifiableItemHandler(schema), + "chargerInventory", itemHandler(schema), + energyContainer.get() + ), LV, MV, HV, EV); + registerSimpleMachine(schema, map, "miner", LV, MV, HV); + registerForTiers(schema, map, "world_accelerator", energyContainer, LV, MV, HV, EV, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "item_collector", () -> optionalFields( + "output", notifiableItemHandler(schema), + "chargerInventory", itemHandler(schema), + "filterInventory", itemHandler(schema), + energyContainer.get() + ), LV, MV, HV, EV); + // endregion + + // region storage + final Supplier itemStorage = () -> optionalFields( + "inventory", notifiableItemHandler(schema) + ); + registerForTiers(schema, map, "buffer", () -> optionalFields( + "tank", notifiableFluidTank(schema), + itemStorage.get() + ), LV, MV, HV); + schema.registerSimple(map, "creative_energy"); + schema.registerSimple(map, "creative_computation_provider"); + + final Supplier quantumChest = () -> optionalFields( + "lockedFluid", GTReferences.FLUID_STACK.in(schema), + "stored", GTReferences.FLUID_STACK.in(schema) + ); + final Supplier quantumTank = () -> optionalFields( + "lockedItem", itemHandler(schema), + "stored", References.ITEM_STACK.in(schema) + ); + schema.register(map, "creative_chest", quantumChest); + schema.register(map, "creative_tank", quantumTank); + registerForTiers(schema, map, "super_chest", quantumChest, LOW_TIERS); + registerForTiers(schema, map, "quantum_chest", quantumChest, HIGH_TIERS); + registerForTiers(schema, map, "super_tank", quantumTank, LOW_TIERS); + registerForTiers(schema, map, "quantum_tank", quantumTank, HIGH_TIERS); + + schema.register(map, "wood_crate", itemStorage); + schema.register(map, "bronze_crate", itemStorage); + schema.register(map, "steel_crate", itemStorage); + schema.register(map, "aluminium_crate", itemStorage); + schema.register(map, "stainless_steel_crate", itemStorage); + schema.register(map, "titanium_crate", itemStorage); + schema.register(map, "tungsten_steel_crate", itemStorage); + + final Supplier drum = () -> optionalFields( + "stored", GTReferences.FLUID_STACK.in(schema) + ); + schema.register(map, "wood_drum", drum); + schema.register(map, "bronze_drum", drum); + schema.register(map, "steel_drum", drum); + schema.register(map, "aluminium_drum", drum); + schema.register(map, "stainless_steel_drum", drum); + schema.register(map, "gold_drum", drum); + schema.register(map, "titanium_drum", drum); + schema.register(map, "tungsten_steel_drum", drum); + // endregion + + // region part + final Supplier itemBus = () -> optionalFields( + "circuitInventory", notifiableItemHandler(schema), + itemStorage.get() + ); + registerForTiers(schema, map, "input_bus", itemBus, ALL_TIERS); + registerForTiers(schema, map, "output_bus", itemBus, ALL_TIERS); + final Supplier fluidHatch = () -> optionalFields( + "tank", notifiableFluidTank(schema), + "circuitInventory", notifiableItemHandler(schema) + ); + registerForTiers(schema, map, "input_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "input_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "input_hatch_9x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "output_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "output_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "output_hatch_9x", fluidHatch, ALL_TIERS); + + registerForTiers(schema, map, "energy_input_hatch", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_4a", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_4a", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_16a", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_16a", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "substation_input_hatch_64a", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "substation_output_hatch_64a", energyContainer, ALL_TIERS); + + registerForTiers(schema, map, "muffler_hatch", itemStorage, ELECTRIC_TIERS); + + schema.register(map, "steam_input_bus", itemBus); + schema.register(map, "steam_output_bus", itemBus); + schema.register(map, "steam_input_hatch", fluidHatch); + schema.registerSimple(map, "coke_oven_hatch"); + schema.register(map, "pump_hatch", fluidHatch); + final Supplier maintenanceHatch = () -> optionalFields( + "itemStackHandler", notifiableItemHandler(schema) + ); + schema.register(map, "maintenance_hatch", maintenanceHatch); + schema.register(map, "configurable_maintenance_hatch", maintenanceHatch); + schema.register(map, "cleaning_maintenance_hatch", maintenanceHatch); + schema.register(map, "auto_maintenance_hatch", maintenanceHatch); + + registerForTiers(schema, map, "item_passthrough_hatch", itemBus, ELECTRIC_TIERS); + registerForTiers(schema, map, "fluid_passthrough_hatch", fluidHatch, ELECTRIC_TIERS); + schema.register(map, "reservoir_hatch", fluidHatch); + final Supplier dualHatch = () -> optionalFields( + "tank", notifiableFluidTank(schema), + itemBus.get() + ); + registerForTiers(schema, map, "dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); + registerForTiers(schema, map, "dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); + + registerForTiers(schema, map, "diode", energyContainer, ELECTRIC_TIERS); + registerForTiers(schema, map, "rotor_holder", () -> optionalFields( + "rotorMaterial", GTReferences.MATERIAL_NAME.in(schema), + itemStorage.get() + ), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); + + final Supplier laserHatch = () -> optionalFields( + "buffer", notifiableEnergyContainer(schema) + ); + registerForTiers(schema, map, "256a_laser_target_hatch", laserHatch, HIGH_TIERS); + registerForTiers(schema, map, "256a_laser_source_hatch", laserHatch, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_target_hatch", laserHatch, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_source_hatch", laserHatch, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_target_hatch", laserHatch, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_source_hatch", laserHatch, HIGH_TIERS); + + schema.registerSimple(map, "monitor"); + schema.registerSimple(map, "advanced_monitor"); + // endregion + + // region multiblock + schema.registerSimple(map, "bronze_large_boiler"); + schema.registerSimple(map, "steel_large_boiler"); + schema.registerSimple(map, "titanium_large_boiler"); + schema.registerSimple(map, "tungstensteel_large_boiler"); + + final Supplier primitiveMachine = () -> optionalFields( "importItems", notifiableItemHandler(schema), "exportItems", notifiableItemHandler(schema), "importFluids", notifiableFluidTank(schema), - "exportFluids", notifiableFluidTank(schema), - "energyContainer", notifiableEnergyContainer(schema), - DSL.optionalFields( - "chargerInventory", itemHandler(schema), - "circuitInventory", notifiableItemHandler(schema) - ) + "exportFluids", notifiableFluidTank(schema) ); - } + schema.register(map, "coke_oven", primitiveMachine); + schema.register(map, "primitive_blast_furnace", primitiveMachine); + + schema.registerSimple(map, "electric_blast_furnace"); + schema.registerSimple(map, "large_chemical_reactor"); + schema.registerSimple(map, "implosion_compressor"); + schema.registerSimple(map, "pyrolyse_oven"); + schema.registerSimple(map, "multi_smelter"); + schema.registerSimple(map, "cracker"); + schema.registerSimple(map, "distillation_tower"); + schema.registerSimple(map, "vacuum_freezer"); + schema.registerSimple(map, "assembly_line"); + schema.registerSimple(map, "primitive_pump"); + schema.registerSimple(map, "steam_grinder"); + schema.registerSimple(map, "steam_oven"); + registerForTiers(schema, map, "fusion_reactor", DSL::remainder, LuV, ZPM, UV); + registerForTiers(schema, map, "fluid_drilling_rig", DSL::remainder, MV, HV, EV); + registerForTiers(schema, map, "large_miner", DSL::remainder, EV, IV, LuV); + schema.registerSimple(map, "cleanroom"); + schema.registerSimple(map, "large_combustion_engine"); + schema.registerSimple(map, "extreme_combustion_engine"); + schema.registerSimple(map, "steam_large_turbine"); + schema.registerSimple(map, "gas_large_turbine"); + schema.registerSimple(map, "plasma_large_turbine"); + schema.registerSimple(map, "active_transformer"); + schema.registerSimple(map, "power_substation"); + registerForTiers(schema, map, "bedrock_ore_miner", DSL::remainder, MV, HV, EV); + schema.registerSimple(map, "wooden_tank_valve"); + schema.registerSimple(map, "wooden_multiblock_tank"); + schema.registerSimple(map, "bronze_tank_valve"); + schema.registerSimple(map, "bronze_multiblock_tank"); + schema.registerSimple(map, "steel_tank_valve"); + schema.registerSimple(map, "steel_multiblock_tank"); + + schema.registerSimple(map, "central_monitor"); + + // region GCYM + registerForTiers(schema, map, "parallel_hatch", laserHatch, IV, LuV, ZPM, UV); + schema.registerSimple(map, "large_maceration_tower"); + schema.registerSimple(map, "large_chemical_bath"); + schema.registerSimple(map, "large_centrifuge"); + schema.registerSimple(map, "large_mixer"); + schema.registerSimple(map, "large_electrolyzer"); + schema.registerSimple(map, "large_electromagnet"); + schema.registerSimple(map, "large_packer"); + schema.registerSimple(map, "large_assembler"); + schema.registerSimple(map, "large_circuit_assembler"); + schema.registerSimple(map, "large_arc_smelter"); + schema.registerSimple(map, "large_engraving_laser"); + schema.registerSimple(map, "large_sifting_funnel"); + schema.registerSimple(map, "alloy_blast_smelter"); + schema.registerSimple(map, "large_autoclave"); + schema.registerSimple(map, "large_material_press"); + schema.registerSimple(map, "large_brewer"); + schema.registerSimple(map, "large_cutter"); + schema.registerSimple(map, "large_extractor"); + schema.registerSimple(map, "large_extruder"); + schema.registerSimple(map, "large_solidifier"); + schema.registerSimple(map, "large_wiremill"); + schema.registerSimple(map, "mega_blast_furnace"); // TODO add fixer to rename to "rotary_hearth_furnace" + schema.registerSimple(map, "mega_vacuum_freezer"); // TODO add fixer to rename to "bulk_blast_chiller" + // endregion + // endregion - protected static void addForTiers(Schema schema, Map> map, - String name, Supplier template, int... tiers) { - for (int tier : GTValues.ALL_TIERS) { - schema.register(map, "gtceu:" + GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, template); + // region research + schema.registerSimple(map, "research_station"); + schema.register(map, "object_holder", () -> optionalFields( + "heldItems", notifiableItemHandler(schema) + )); + schema.registerSimple(map, "data_bank"); + schema.registerSimple(map, "network_switch"); + schema.registerSimple(map, "high_performance_computation_array"); + schema.registerSimple(map, "computation_transmitter_hatch"); + schema.registerSimple(map, "computation_receiver_hatch"); + schema.registerSimple(map, "data_transmitter_hatch"); + schema.registerSimple(map, "data_receiver_hatch"); + final Supplier dataAccessHatch = () -> optionalFields( + "importItems", notifiableItemHandler(schema) + ); + schema.register(map, "basic_data_access_hatch", dataAccessHatch); + schema.register(map, "data_access_hatch", dataAccessHatch); + schema.register(map, "advanced_data_access_hatch", dataAccessHatch); + schema.register(map, "creative_data_access_hatch", dataAccessHatch); + schema.registerSimple(map, "hpca_empty_component"); + schema.registerSimple(map, "hpca_computation_component"); + schema.registerSimple(map, "hpca_advanced_computation_component"); + schema.registerSimple(map, "hpca_heat_sink_component"); + schema.registerSimple(map, "hpca_active_cooler_component"); + schema.registerSimple(map, "hpca_bridge_component"); + // endregion + + // region AE2 compat + if (LoadingModList.get().getModFileById(MODID_APPENG) != null) { // only add these if AE2 is loaded + schema.register(map, "me_input_bus", itemBus); + schema.register(map, "me_stocking_input_bus", itemBus); + schema.register(map, "me_output_bus", itemBus); + schema.register(map, "me_input_hatch", fluidHatch); + schema.register(map, "me_stocking_input_hatch", fluidHatch); + schema.register(map, "me_output_hatch", fluidHatch); + schema.register(map, "me_pattern_buffer", () -> optionalFields( + "patternInventory", itemHandler(schema), + "shareInventory", notifiableItemHandler(schema), + "shareTank", notifiableFluidTank(schema), + "internalInventory", list( + fields( + "inventory", list(References.ITEM_STACK.in(schema)), + "fluidInventory", list(GTReferences.FLUID_STACK.in(schema)) + ) + ), + itemBus.get() + )); + schema.registerSimple(map, "me_pattern_buffer_proxy"); + } + // endregion + + // register all remaining machines as very 'plain' types + for (MachineDefinition definition : GTRegistries.MACHINES) { + String id = definition.getId().toString(); + if (!map.containsKey(id)) { + registerSimple(map, id); + } } + + return map; } @Override - public Map> registerBlockEntities(Schema schema) { - Map> map = super.registerBlockEntities(schema); + public void register(final Map> map, final String name, final Supplier template) { + map.put("gtceu:" + name, template); + } - addForTiers(schema, map, "machine_hull", DSL::remainder, ALL_TIERS); - Supplier simpleMachine = () -> V0.simpleMachine(schema); - addForTiers(schema, map, "electric_furnace", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "alloy_smelter", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "arc_furnace", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "assembler", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "autoclave", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "bender", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "brewery", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "canner", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "centrifuge", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "chemical_bath", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "chemical_reactor", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "compressor", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "cutter", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "distillery", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "electrolyzer", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "electromagnetic_separator", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "extractor", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "extruder", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "fermenter", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "fluid_heater", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "fluid_solidifier", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "forge_hammer", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "forming_press", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "lathe", simpleMachine, ELECTRIC_TIERS); - // addForTiers(schema, map, "scanner", simpleMachine, ELECTRIC_TIERS); // Skip scanner; it's added later - addForTiers(schema, map, "mixer", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "ore_washer", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "packer", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "polarizer", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "laser_engraver", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "sifter", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "thermal_centrifuge", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "wiremill", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "circuit_assembler", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "macerator", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "gas_collector", simpleMachine, ELECTRIC_TIERS); - addForTiers(schema, map, "rock_crusher", simpleMachine, ELECTRIC_TIERS); + protected static void registerSimpleMachine(Schema schema, Map> map, String name, int... tiers) { + registerForTiers(schema, map, name, () -> optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema), + "importFluids", notifiableFluidTank(schema), + "exportFluids", notifiableFluidTank(schema), + "energyContainer", notifiableEnergyContainer(schema), + "chargerInventory", itemHandler(schema), + "circuitInventory", notifiableItemHandler(schema) + ), tiers); + } - for (MachineDefinition definition : GTRegistries.MACHINES) { - registerInventory(schema, map, definition.getId().toString()); + protected static void registerForTiers(Schema schema, Map> map, + String name, Supplier template, int... tiers) { + for (int tier : tiers) { + schema.register(map, GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, template); } - return map; + } + + protected static void registerSteamMachine(Schema schema, Map> map, + String name, Supplier template) { + schema.register(map, "lp_%s".formatted(name), template); + schema.register(map, "hp_%s".formatted(name), template); + } + + protected static void registerSimpleSteamMachine(Schema schema, Map> map, String name) { + registerSteamMachine(schema, map, name, () -> optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema), + "steamTank", notifiableFluidTank(schema) + )); } protected static TypeTemplate itemHandler(Schema schema) { - return DSL.field("Items", DSL.list(References.ITEM_STACK.in(schema))); + return field("Items", list(References.ITEM_STACK.in(schema))); } protected static TypeTemplate notifiableItemHandler(Schema schema) { - return DSL.field("storage", itemHandler(schema)); + return field("storage", itemHandler(schema)); } protected static TypeTemplate notifiableFluidTank(Schema schema) { - return DSL.field("storages", DSL.list(GTReferences.FLUID_STACK.in(schema)))); + return field("storages", list(GTReferences.FLUID_STACK.in(schema))); } protected static TypeTemplate notifiableEnergyContainer(Schema schema) { - return DSL.fields( - "energyStored", DSL.constType(DSL.longType()) + return fields( + "energyStored", constType(longType()) ); } - - protected static void registerInventory(Schema schema, Map> map, String name) { - schema.register(map, name, () -> DSL.or( - DSL.optionalFields( - "importItems", notifiableItemHandler(schema), - "exportItems", notifiableItemHandler(schema) - ), - DSL.or( - DSL.optionalFields("inventory", notifiableItemHandler(schema)), - DSL.optionalFields("cache", notifiableItemHandler(schema)) - ) - )); - } // spotless:on } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java deleted file mode 100644 index 9f762dd1d93..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.gregtechceu.gtceu.core.mixins.datafixer; - -import com.mojang.datafixers.types.templates.Hook; -import lombok.experimental.Accessors; -import net.minecraft.util.datafix.schemas.V705; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -@Mixin(V705.class) -public interface V705Accessor { - - @Accessor("ADD_NAMES") - static Hook.HookFunction gtceu$getAddNamesHookFunction() { - throw new AssertionError(); - } -} diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index ea864de46de..981e9c422a3 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -66,7 +66,6 @@ "client.ItemEntityMixin", "datafixer.DataFixTypesMixin", "datafixer.NbtUtilsMixin", - "datafixer.V705Accessor", "dev.datagen.FixParallelKeyMappingRegistrationMixin", "dev.test.GameTestRegistryMixin", "emi.EmiRecipeFillerMixin", From b8a26d7ee8096d022f7bdf338ee4032ebd485f77 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 16:28:54 +0300 Subject: [PATCH 06/83] Convert (almost) all existing "fixers" into proper data fixers --- .../gtceu/api/machine/MetaMachine.java | 6 - .../gtceu/common/CommonEventListener.java | 119 ------------------ .../common/data/datafixer/GTDataFixers.java | 85 ++++++++----- .../datafixer/fixes/AutoOutputTraitFix.java | 48 +++++++ .../gtceu/common/datafixer/schemas/V1.java | 18 +-- .../utils/data/TagCompatibilityFixer.java | 19 --- 6 files changed, 114 insertions(+), 181 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java 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 e0df58c23e4..6a5f509701d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MetaMachine.java @@ -153,12 +153,6 @@ public MetaMachine(BlockEntityCreationInfo info) { // ***** Machine Lifecycle ******// ////////////////////////////////////// - @Override - public void load(CompoundTag tag) { - TagCompatibilityFixer.fixMachineAutoOutputTag(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.
diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 2fa0734b89a..8f8f36fa138 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -587,125 +587,6 @@ private static boolean isMaterialStackFluidOnly(@NotNull MaterialStack ms) { @SubscribeEvent public static void remapIds(MissingMappingsEvent event) { - event.getMappings(Registries.BLOCK, GTCEu.MOD_ID).forEach(mapping -> { - 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("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()); - } - if (mapping.getKey().equals(GTCEu.id("avanced_nanomuscle_chestplate"))) { - mapping.remap(GTItems.NANO_CHESTPLATE_ADVANCED.get()); - } - 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.isNull()) { - 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 : TagPrefix.values()) { String first = prefix.invertedName ? toLowerCaseUnderscore(prefix.name) : "(.+?)"; String last = prefix.invertedName ? "(.+?)" : toLowerCaseUnderscore(prefix.name); 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 index 6b7a405463e..0bc560dd704 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -2,21 +2,24 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; -import com.gregtechceu.gtceu.common.datafixer.fixes.*; -import com.gregtechceu.gtceu.common.datafixer.schemas.V1; +import com.gregtechceu.gtceu.common.datafixer.fixes.AutoOutputTraitFix; +import com.gregtechceu.gtceu.common.datafixer.schemas.*; import com.gregtechceu.gtceu.config.ConfigHolder; -import net.minecraft.util.datafix.fixes.AddNewChoices; -import net.minecraft.util.datafix.fixes.BlockRenameFix; -import net.minecraft.util.datafix.fixes.ItemRenameFix; -import net.minecraft.util.datafix.fixes.References; +import net.minecraft.SharedConstants; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.datafix.fixes.*; import net.minecraft.util.datafix.schemas.NamespacedSchema; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.DataFixerBuilder; import com.mojang.datafixers.schemas.Schema; import java.util.Map; import java.util.Objects; +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; @@ -26,7 +29,6 @@ @SuppressWarnings("SameParameterValue") public class GTDataFixers { - private static final BiFunction SAME = Schema::new; private static final BiFunction SAME_NAMESPACED = NamespacedSchema::new; public static void init() { @@ -36,58 +38,83 @@ public static void init() { GTCEu.LOGGER.info("Registering data fixers"); - DataFixesInternals api = DataFixesInternals.get(); - api.createDataFixer("GTCEu", GTCEu.GT_DATA_VERSION, GTDataFixers::addFixers); + DataFixerBuilder builder = new DataFixerBuilder(GTCEu.GT_DATA_VERSION); + addFixers(builder); + + DataFixer fixer; + if (SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE.isEmpty()) { + fixer = builder.buildUnoptimized(); + } else { + Executor executor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() + .setNameFormat("GTCEu Datafixer Bootstrap").setDaemon(true).setPriority(1).build()); + fixer = builder.buildOptimized(SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE, executor); + } + DataFixesInternals.get().registerFixer(GTCEu.GT_DATA_VERSION, fixer); } public static void addFixers(DataFixerBuilder builder) { builder.addSchema(0, BASE_SCHEMA); Schema schemaV1 = builder.addSchema(1, V1::new); - - Schema schemaV4 = builder.addSchema(4, SAME_NAMESPACED); - createBlockItemRenameFix(builder, schemaV4, "RTM Alloy Coil Block", + createBlockItemRenameFix(builder, schemaV1, "RTM Alloy Coil Block", createRenamer("tungstensteel_coil_block", "rtm_alloy_coil_block")); - Schema schemaV5 = builder.addSchema(5, SAME_NAMESPACED); - builder.addFixer(ItemRenameFix.create(schemaV5, "Advanced Nanomuscle Chestplate rename fix", + builder.addFixer(ItemRenameFix.create(schemaV1, "Advanced Nanomuscle Chestplate rename fix", createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); + createBlockItemRenameFix(builder, schemaV1, "Palladium Substation Casing", + createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); + + builder.addFixer(BlockRenameFix.create(schemaV1, "Rename Tungstensteel Fluid Cell", + createRenamer("gtceu:tungstensteel_fluid_cell", "gtceu:tungsten_steel_fluid_cell"))); + + createBlockItemRenameFix(builder, schemaV1, "Rename Low Pressure Steam Miner", + createRenamer("gtceu:steam_miner", "gtceu:lp_steam_miner")); + + builder.addFixer(ItemRenameFix.create(schemaV1, "Rename electric wire cutters", + createRenamer(Pattern.compile("([lhi])v_([a-z0-9/._-]+)_wirecutter"), "$1v_$2_wire_cutter"))); + + // separator + + Schema schemaV10 = builder.addSchema(10, SAME_NAMESPACED); + builder.addFixer(new AutoOutputTraitFix(schemaV10)); + /* - createBlockItemRenameFix(builder, schemaV5, "U238", + createBlockItemRenameFix(builder, schemaV11, "U238", createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); - createBlockItemRenameFix(builder, schemaV5, "Pu239", + createBlockItemRenameFix(builder, schemaV11, "Pu239", createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); - createBlockItemRenameFix(builder, schemaV5, "Red Granite", + createBlockItemRenameFix(builder, schemaV11, "Red Granite", createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); - createBlockItemRenameFix(builder, schemaV5, "Tungstensteel", + createBlockItemRenameFix(builder, schemaV11, "Tungstensteel", createRenamer(Pattern.compile("gtceu:(.*)tungstensteel"), "gtceu:$1tungsten_steel")); - createBlockItemRenameFix(builder, schemaV5, "Raw Oil", + createBlockItemRenameFix(builder, schemaV11, "Raw Oil", createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); */ - - Schema schemaV6 = builder.addSchema(6, SAME_NAMESPACED); - - createBlockItemRenameFix(builder, schemaV6, "Palladium Substation Casing", - createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { - builder.addFixer(ItemRenameFix.create(schema, name + " rename", renamer)); - builder.addFixer(BlockRenameFix.create(schema, name + " rename fix", renamer)); + builder.addFixer(ItemRenameFix.create(schema, "Rename " + name, renamer)); + builder.addFixer(BlockRenameFix.create(schema, "Rename " + name, renamer)); + builder.addFixer(BlockEntityRenameFix.create(schema, "Rename " + name, renamer)); } private static UnaryOperator createRenamer(String oldName, String newName) { - return id -> Objects.equals(NamespacedSchema.ensureNamespaced(id), oldName) ? newName : id; + return id -> Objects.equals(ensureNamespaced(id), oldName) ? newName : id; } private static UnaryOperator createRenamer(Map renameMap) { - return id -> renameMap.getOrDefault(NamespacedSchema.ensureNamespaced(id), id); + return id -> renameMap.getOrDefault(ensureNamespaced(id), id); } private static UnaryOperator createRenamer(Pattern check, String replaceWith) { - return id -> check.matcher(NamespacedSchema.ensureNamespaced(id)).replaceAll(replaceWith); + return id -> check.matcher(ensureNamespaced(id)).replaceAll(replaceWith); + } + + public static String ensureNamespaced(String string) { + ResourceLocation loc = GTCEu.id(string); + return loc != null ? loc.toString() : string; } } \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java new file mode 100644 index 00000000000..b099b9e6747 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java @@ -0,0 +1,48 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import net.minecraft.util.datafix.fixes.References; + +import com.mojang.datafixers.*; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; + +import java.util.Map; + +public class AutoOutputTraitFix extends DataFix { + + private static final Map FIELD_RENAMES = Map.of( + "outputFacingItems", "itemOutputDirection", + "outputFacingFluids", "fluidOutputDirection", + "autoOutputItems", "autoOutputItems", + "autoOutputFluids", "autoOutputFluids", + "allowInputFromOutputSideItems", "allowItemInputFromOutputSide", + "allowInputFromOutputSideFluids", "allowFluidInputFromOutputSide" + ); + + public AutoOutputTraitFix(Schema outputSchema) { + super(outputSchema, false); + } + + @Override + protected TypeRewriteRule makeRule() { + return this.fixTypeEverywhereTyped("AutoOutputTraitFix", this.getInputSchema().getType(References.BLOCK_ENTITY), typed -> { + return typed.update(DSL.remainderFinder(), remainder -> { + Dynamic traitValue = remainder.emptyMap(); + for (var entry : FIELD_RENAMES.entrySet()) { + String oldName = entry.getKey(); + String newName = entry.getValue(); + + var oldField = remainder.get(oldName).result(); + if (oldField.isPresent()) { + traitValue = traitValue.set(newName, oldField.get()); + remainder = remainder.remove(oldName); + } + } + + remainder.set("autoOutput", traitValue); + + return remainder; + }); + }); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java index eb9f682641e..66feec14b07 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java @@ -1,26 +1,28 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; +import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; + public class V1 extends NamespacedSchema { public V1(int versionKey, Schema parent) { super(versionKey, parent); } - @Override - public void registerTypes(Schema schema, Map> entityTypes, - Map> blockEntityTypes) { - super.registerTypes(schema, entityTypes, blockEntityTypes); - } - @Override public Map> registerBlockEntities(Schema schema) { - return super.registerBlockEntities(schema); + Map> map = super.registerBlockEntities(schema); + + map.remove("steam_miner"); + registerSimpleSteamMachine(schema, map, "steam_miner"); + + return map; } } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java index f6ee9efc56f..0b1d925b314 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java @@ -9,25 +9,6 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TagCompatibilityFixer { - public static void fixMachineAutoOutputTag(CompoundTag machineTag) { - if (!machineTag.contains("autoOutput")) { - var outputTag = new CompoundTag(); - Tag itemOutputDirection = machineTag.get("outputFacingItems"); - Tag fluidOutputDirection = machineTag.get("outputFacingFluids"); - Tag autoOutputItems = machineTag.get("autoOutputItems"); - Tag autoOutputFluids = machineTag.get("autoOutputFluids"); - Tag allowInputItems = machineTag.get("allowInputFromOutputSideItems"); - Tag allowInputFluids = machineTag.get("allowInputFromOutputSideFluids"); - if (itemOutputDirection != null) outputTag.put("itemOutputDirection", itemOutputDirection); - if (fluidOutputDirection != null) outputTag.put("fluidOutputDirection", fluidOutputDirection); - if (autoOutputItems != null) outputTag.put("autoOutputItems", autoOutputItems); - if (autoOutputFluids != null) outputTag.put("autoOutputFluids", autoOutputFluids); - if (allowInputItems != null) outputTag.put("allowItemInputFromOutputSide", allowInputItems); - if (allowInputFluids != null) outputTag.put("allowFluidInputFromOutputSide", allowInputFluids); - machineTag.put("autoOutput", outputTag); - } - } - public static Tag stripLDLibPayloadWrapper(Tag t) { if (!(t instanceof CompoundTag tag)) return t; if (tag.contains("p") && tag.contains("t")) { From 7c41454153ced1e4125a48f564880b6efcf2e884 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 16:29:03 +0300 Subject: [PATCH 07/83] Add TODO --- .../com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java index 0b1d925b314..0333aa969a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java @@ -9,6 +9,7 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TagCompatibilityFixer { + // TODO convert into datafixer public static Tag stripLDLibPayloadWrapper(Tag t) { if (!(t instanceof CompoundTag tag)) return t; if (tag.contains("p") && tag.contains("t")) { From 0886cd9a2f8825f8849350ef29d07ab4f088542e Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 16:29:18 +0300 Subject: [PATCH 08/83] Exclude OPTIONS fixer type from being processed by us --- .../gtceu/core/mixins/datafixer/DataFixTypesMixin.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java index 8c88462d8ca..b66b095b7b5 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java @@ -21,6 +21,9 @@ public class DataFixTypesMixin { @ModifyReturnValue(method = "update(Lcom/mojang/datafixers/DataFixer;Lcom/mojang/serialization/Dynamic;II)Lcom/mojang/serialization/Dynamic;", at = @At(value = "RETURN")) private Dynamic gtceu$injectDataFixers(Dynamic value) { + // skip applying datafixers to options.txt; doing that loads the fixers too early + if ((Object) this == DataFixTypes.OPTIONS) return value; + return DataFixesInternals.get().updateWithAllFixers(this.type, value); } } From 827cb71f3a75df1ac62b9848214214be8e7b7c51 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 16:29:32 +0300 Subject: [PATCH 09/83] saner GT data version & explanatory comment --- src/main/java/com/gregtechceu/gtceu/GTCEu.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index 8a5aa50cc55..221f9d8c1d9 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -40,15 +40,15 @@ public class GTCEu { * subsequent change. * *

- * Versions: + * Example versions: *

    - *
  • 10: 7.5.3
  • - *
  • 20: 8.0.0-SNAPSHOT+HASH3
  • - *
  • 81: 8.0.0
  • - *
  • 81: 8.0.0
  • + *
  • 0: 7.5.3
  • + *
  • 10: 8.0.0-SNAPSHOT+HASH1
  • // TODO set the correct hash here + *
  • 11: 8.0.0-SNAPSHOT+HASH2
  • + *
  • 20: 8.0.1-SNAPSHOT+HASH2
  • *
*/ - public static final int GT_DATA_VERSION = 80; + public static final int GT_DATA_VERSION = 10; public GTCEu() { GTCEu.init(); From 2eadd020c90ed976d1dd377891517f637b7aafea Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 17:08:42 +0300 Subject: [PATCH 10/83] Lazy --- .../api/datafixer/DataFixesInternals.java | 3 -- .../api/datafixer/DataFixesInternalsImpl.java | 17 -------- .../gtceu/api/datafixer/LazyDataFixer.java | 42 +++++++++++++++++++ .../api/datafixer/NoOpDataFixesInternals.java | 5 --- .../common/data/datafixer/GTDataFixers.java | 23 +++++----- 5 files changed, 54 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java index 6f57132b16e..b8229c616ce 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java @@ -82,9 +82,6 @@ public static DataFixesInternals get() { return instance; } - public abstract @Nullable DataFixer createDataFixer(String name, int currentVersion, - Consumer fixers); - public abstract void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer); diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java index cc3f06e8439..763b7b3eb81 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java @@ -46,23 +46,6 @@ public DataFixesInternalsImpl(Schema latestVanillaSchema) { this.dataFixer = null; } - @Override - public synchronized DataFixer createDataFixer(String name, int currentVersion, Consumer fixers) { - DataFixerBuilder builder = new DataFixerBuilder(currentVersion); - fixers.accept(builder); - - DataFixer fixer; - if (SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE.isEmpty()) { - fixer = builder.buildUnoptimized(); - } else { - Executor executor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() - .setNameFormat(name + " Datafixer Bootstrap").setDaemon(true).setPriority(1).build()); - fixer = builder.buildOptimized(SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE, executor); - } - DataFixesInternals.get().registerFixer(currentVersion, fixer); - return fixer; - } - @Override public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer) { if (this.dataFixer != null) { 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..5aef49e5ee4 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java @@ -0,0 +1,42 @@ +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.embeddedt.modernfix.dfu.DFUBlaster; +import org.jetbrains.annotations.Nullable; + +import java.util.function.Supplier; + +public class LazyDataFixer implements DataFixer { + private @Nullable DataFixer backingDataFixer; + private final Supplier dfuSupplier; + + public LazyDataFixer(Supplier dfuSupplier) { + this.backingDataFixer = null; + this.dfuSupplier = dfuSupplier; + } + + private DataFixer getDataFixer() { + synchronized(this) { + if (this.backingDataFixer == null) { + GTCEu.LOGGER.info("Instantiating GTCEu Data Fixers"); + DFUBlaster.blastMaps(); + this.backingDataFixer = this.dfuSupplier.get(); + } + } + + 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/NoOpDataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java index 39f5d1fe285..ba7b5164a74 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java @@ -35,11 +35,6 @@ public NoOpDataFixesInternals() { schema = new EmptySchema(0); } - @Override - public @Nullable DataFixer createDataFixer(String name, int currentVersion, Consumer fixers) { - return null; - } - @Override public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer) {} 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 index 0bc560dd704..0d571a9575d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -38,17 +38,18 @@ public static void init() { GTCEu.LOGGER.info("Registering data fixers"); - DataFixerBuilder builder = new DataFixerBuilder(GTCEu.GT_DATA_VERSION); - addFixers(builder); - - DataFixer fixer; - if (SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE.isEmpty()) { - fixer = builder.buildUnoptimized(); - } else { - Executor executor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() - .setNameFormat("GTCEu Datafixer Bootstrap").setDaemon(true).setPriority(1).build()); - fixer = builder.buildOptimized(SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE, executor); - } + DataFixer fixer = new LazyDataFixer(() -> { + DataFixerBuilder builder = new DataFixerBuilder(GTCEu.GT_DATA_VERSION); + addFixers(builder); + + if (SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE.isEmpty()) { + return builder.buildUnoptimized(); + } else { + Executor executor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() + .setNameFormat("GTCEu Datafixer Bootstrap").setDaemon(true).setPriority(1).build()); + return builder.buildOptimized(SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE, executor); + } + }); DataFixesInternals.get().registerFixer(GTCEu.GT_DATA_VERSION, fixer); } From ba1ed0e7528f000c21d79dc15ccf756c6dd498ef Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 23 May 2026 17:08:58 +0300 Subject: [PATCH 11/83] Fix namespaced IDs --- .../gtceu/common/data/datafixer/GTDataFixers.java | 13 ++++--------- .../gtceu/common/datafixer/schemas/V0.java | 7 +++++-- 2 files changed, 9 insertions(+), 11 deletions(-) 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 index 0d571a9575d..188fb8d10d7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -2,12 +2,12 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.gregtechceu.gtceu.api.datafixer.LazyDataFixer; import com.gregtechceu.gtceu.common.datafixer.fixes.AutoOutputTraitFix; import com.gregtechceu.gtceu.common.datafixer.schemas.*; import com.gregtechceu.gtceu.config.ConfigHolder; import net.minecraft.SharedConstants; -import net.minecraft.resources.ResourceLocation; import net.minecraft.util.datafix.fixes.*; import net.minecraft.util.datafix.schemas.NamespacedSchema; @@ -103,19 +103,14 @@ private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema sc } private static UnaryOperator createRenamer(String oldName, String newName) { - return id -> Objects.equals(ensureNamespaced(id), oldName) ? newName : id; + return id -> Objects.equals(NamespacedSchema.ensureNamespaced(id), oldName) ? newName : id; } private static UnaryOperator createRenamer(Map renameMap) { - return id -> renameMap.getOrDefault(ensureNamespaced(id), id); + return id -> renameMap.getOrDefault(NamespacedSchema.ensureNamespaced(id), id); } private static UnaryOperator createRenamer(Pattern check, String replaceWith) { - return id -> check.matcher(ensureNamespaced(id)).replaceAll(replaceWith); - } - - public static String ensureNamespaced(String string) { - ResourceLocation loc = GTCEu.id(string); - return loc != null ? loc.toString() : string; + return id -> check.matcher(NamespacedSchema.ensureNamespaced(id)).replaceAll(replaceWith); } } \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index ad3cb84a354..2d2d00e07fe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -441,8 +441,11 @@ public Map> registerBlockEntities(Schema schema) } @Override - public void register(final Map> map, final String name, final Supplier template) { - map.put("gtceu:" + name, template); + public void register(final Map> map, String name, final Supplier template) { + if (name.indexOf(':') == -1) { + name = "gtceu:" + name; + } + map.put(name, template); } protected static void registerSimpleMachine(Schema schema, Map> map, String name, int... tiers) { From f8f89826e2da07a4f286284c85239acc094a0da4 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 14:43:18 +0300 Subject: [PATCH 12/83] Rename `getModDataVersion` to `getGTDataVersion` and `addModDataVersions` to `addGTDataVersion` --- .../api/datafixer/DataFixesInternals.java | 37 ++++++++++++++----- .../api/datafixer/DataFixesInternalsImpl.java | 4 +- .../api/datafixer/NoOpDataFixesInternals.java | 2 +- .../core/mixins/datafixer/NbtUtilsMixin.java | 4 +- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java index b8229c616ce..6abb08fb9c2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java @@ -16,22 +16,22 @@ */ package com.gregtechceu.gtceu.api.datafixer; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.config.ConfigHolder; import com.mojang.datafixers.DSL; import com.mojang.datafixers.DataFixUtils; import com.mojang.datafixers.DataFixer; -import com.mojang.datafixers.DataFixerBuilder; import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; import net.minecraft.SharedConstants; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; import net.minecraft.util.datafix.DataFixers; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.*; import java.util.function.BiFunction; -import java.util.function.Consumer; import static com.google.common.base.Preconditions.checkArgument; @@ -49,12 +49,6 @@ public abstract class DataFixesInternals { public record DataFixerEntry(DataFixer dataFixer, int currentVersion) {} - @Contract(pure = true) - @Range(from = 0, to = Integer.MAX_VALUE) - public static int getModDataVersion(Dynamic compound) { - return compound.get(GT_DATA_VERSION_TAG).asInt(0); - } - private static @Nullable DataFixesInternals instance; public static DataFixesInternals get() { @@ -92,5 +86,30 @@ public abstract void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int public abstract Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, Dynamic dynamic); - public abstract CompoundTag addModDataVersions(CompoundTag compound); + public abstract CompoundTag addGTDataVersion(CompoundTag tag); + + @Contract(pure = true) + @Range(from = 0, to = Integer.MAX_VALUE) + public static int getGTDataVersion(Dynamic dynamic) { + return getGTDataVersion(dynamic, -1); + } + + @Contract(pure = true) + @Range(from = 0, 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 = 0, to = Integer.MAX_VALUE) + public static int getGTDataVersion(CompoundTag tag) { + return getGTDataVersion(tag, -1); + } + + @Contract(pure = true) + @Range(from = 0, 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; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java index 763b7b3eb81..30ffc42b39f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java @@ -70,12 +70,12 @@ public Dynamic updateWithAllFixers(DSL.TypeReference type, Dynamic dyn if (dataFixer == null) { return dynamic; } - int modDataVersion = DataFixesInternals.getModDataVersion(dynamic); + int modDataVersion = DataFixesInternals.getGTDataVersion(dynamic); return dataFixer.dataFixer().update(type, dynamic, modDataVersion, dataFixer.currentVersion()); } @Override - public CompoundTag addModDataVersions(CompoundTag compound) { + public CompoundTag addGTDataVersion(CompoundTag compound) { if (dataFixer != null) compound.putInt(GT_DATA_VERSION_TAG, dataFixer.currentVersion()); diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java index ba7b5164a74..ae6db92157b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java @@ -54,7 +54,7 @@ public Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, Dynami } @Override - public CompoundTag addModDataVersions(CompoundTag compound) { + public CompoundTag addGTDataVersion(CompoundTag compound) { return compound; } } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java index cd4c230d297..9e4bfbb1a62 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java @@ -11,7 +11,7 @@ public class NbtUtilsMixin { @ModifyReturnValue(method = "addDataVersion", at = @At("RETURN")) - private static CompoundTag gtceu$addModDataVersions(CompoundTag tag) { - return DataFixesInternals.get().addModDataVersions(tag); + private static CompoundTag gtceu$addGTDataVersion(CompoundTag tag) { + return DataFixesInternals.get().addGTDataVersion(tag); } } From fd604667735b26122c07f6da2e662144449c27e0 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 14:48:32 +0300 Subject: [PATCH 13/83] Delete DataFixerEntry --- .../api/datafixer/DataFixesInternals.java | 4 --- .../api/datafixer/DataFixesInternalsImpl.java | 27 +++++++------------ .../api/datafixer/NoOpDataFixesInternals.java | 10 +------ 3 files changed, 10 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java index 6abb08fb9c2..28f738fafd8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java @@ -47,8 +47,6 @@ public abstract class DataFixesInternals { return get().createBaseSchema(); }; - public record DataFixerEntry(DataFixer dataFixer, int currentVersion) {} - private static @Nullable DataFixesInternals instance; public static DataFixesInternals get() { @@ -79,8 +77,6 @@ public static DataFixesInternals get() { public abstract void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer); - public abstract @Nullable DataFixerEntry getFixerEntry(); - @Contract(value = "-> new", pure = true) public abstract Schema createBaseSchema(); diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java index 30ffc42b39f..19dace5a0b1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java @@ -16,29 +16,24 @@ */ package com.gregtechceu.gtceu.api.datafixer; -import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.common.datafixer.schemas.V0; import com.mojang.datafixers.DSL; import com.mojang.datafixers.DataFixer; -import com.mojang.datafixers.DataFixerBuilder; import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; -import net.minecraft.SharedConstants; + import net.minecraft.nbt.CompoundTag; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Range; -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; -import java.util.function.Consumer; - @ApiStatus.Internal public final class DataFixesInternalsImpl extends DataFixesInternals { private final Schema latestVanillaSchema; - private @Nullable DataFixerEntry dataFixer; + private @Nullable DataFixer dataFixer; public DataFixesInternalsImpl(Schema latestVanillaSchema) { this.latestVanillaSchema = latestVanillaSchema; @@ -52,12 +47,7 @@ public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVe throw new IllegalArgumentException("GTCEu already has a registered data fixer"); } - this.dataFixer = new DataFixerEntry(dataFixer, currentVersion); - } - - @Override - public @Nullable DataFixerEntry getFixerEntry() { - return dataFixer; + this.dataFixer = dataFixer; } @Override @@ -67,17 +57,18 @@ public Schema createBaseSchema() { @Override public Dynamic updateWithAllFixers(DSL.TypeReference type, Dynamic dynamic) { - if (dataFixer == null) { + if (this.dataFixer == null) { return dynamic; } int modDataVersion = DataFixesInternals.getGTDataVersion(dynamic); - return dataFixer.dataFixer().update(type, dynamic, modDataVersion, dataFixer.currentVersion()); + return this.dataFixer.update(type, dynamic, modDataVersion, GTCEu.GT_DATA_VERSION); } @Override public CompoundTag addGTDataVersion(CompoundTag compound) { - if (dataFixer != null) - compound.putInt(GT_DATA_VERSION_TAG, dataFixer.currentVersion()); + if (this.dataFixer != null) { + compound.putInt(GT_DATA_VERSION_TAG, GTCEu.GT_DATA_VERSION); + } return compound; } diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java index ae6db92157b..0d8e9ee2a1f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java @@ -18,14 +18,11 @@ import com.mojang.datafixers.DSL; import com.mojang.datafixers.DataFixer; -import com.mojang.datafixers.DataFixerBuilder; import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; import net.minecraft.nbt.CompoundTag; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.Range; -import java.util.function.Consumer; +import org.jetbrains.annotations.Range; public class NoOpDataFixesInternals extends DataFixesInternals { @@ -38,11 +35,6 @@ public NoOpDataFixesInternals() { @Override public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer) {} - @Override - public @Nullable DataFixerEntry getFixerEntry() { - return null; - } - @Override public Schema createBaseSchema() { return schema; From 05bdc3dfb5e36c67875431198b7b910ab4bdec10 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 14:49:37 +0300 Subject: [PATCH 14/83] Make vanilla schema initialization lazy --- .../gtceu/api/datafixer/DataFixesInternals.java | 7 ++++--- .../gtceu/api/datafixer/DataFixesInternalsImpl.java | 8 +++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java index 28f738fafd8..4324905968b 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java @@ -58,10 +58,11 @@ public static DataFixesInternals get() { } try { - int vanillaDataVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); - Schema latestVanillaSchema = DataFixers.getDataFixer().getSchema(DataFixUtils.makeKey(vanillaDataVersion)); - instance = new DataFixesInternalsImpl(latestVanillaSchema); + instance = new DataFixesInternalsImpl(() -> { + int vanillaDataVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); + return DataFixers.getDataFixer().getSchema(DataFixUtils.makeKey(vanillaDataVersion)); + }); } catch (Exception ex) { LOGGER.warn("Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft build is hosed."); LOGGER.warn("Using no-op implementation."); diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java index 19dace5a0b1..2691fbacea1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java @@ -28,14 +28,16 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Range; +import java.util.function.Supplier; + @ApiStatus.Internal public final class DataFixesInternalsImpl extends DataFixesInternals { - private final Schema latestVanillaSchema; + private final Supplier latestVanillaSchema; private @Nullable DataFixer dataFixer; - public DataFixesInternalsImpl(Schema latestVanillaSchema) { + public DataFixesInternalsImpl(Supplier latestVanillaSchema) { this.latestVanillaSchema = latestVanillaSchema; this.dataFixer = null; @@ -52,7 +54,7 @@ public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVe @Override public Schema createBaseSchema() { - return new V0(0, this.latestVanillaSchema); + return new V0(0, this.latestVanillaSchema.get()); } @Override From 1f9615a605b0e526060abad4d2518d91e5c80c45 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 14:50:53 +0300 Subject: [PATCH 15/83] Add extra utility functions for updating from specific source data versions --- .../gtceu/api/datafixer/DataFixesInternals.java | 14 +++++++++++++- .../api/datafixer/DataFixesInternalsImpl.java | 5 ++--- .../api/datafixer/NoOpDataFixesInternals.java | 17 ++++++++++++++++- .../mixins/datafixer/DataFixTypesMixin.java | 2 +- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java index 4324905968b..4a11781deb1 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java @@ -81,7 +81,19 @@ public abstract void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int @Contract(value = "-> new", pure = true) public abstract Schema createBaseSchema(); - public abstract Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, Dynamic dynamic); + public Dynamic updateToCurrentVersion(DSL.TypeReference type, Dynamic dynamic) { + return update(type, dynamic, getGTDataVersion(dynamic), GTCEu.GT_DATA_VERSION); + } + + public abstract Dynamic update(DSL.TypeReference type, Dynamic dynamic, int version, int newVersion); + + public CompoundTag updateToCurrentVersion(DSL.TypeReference dataFixTypes, CompoundTag tag) { + return this.update(dataFixTypes, tag, getGTDataVersion(tag), GTCEu.GT_DATA_VERSION); + } + + public CompoundTag update(DSL.TypeReference dataFixTypes, CompoundTag tag, int version, int newVersion) { + return (CompoundTag) this.update(dataFixTypes, new Dynamic<>(NbtOps.INSTANCE, tag), version, newVersion).getValue(); + } public abstract CompoundTag addGTDataVersion(CompoundTag tag); diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java index 2691fbacea1..86ffc61fc8c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java @@ -58,12 +58,11 @@ public Schema createBaseSchema() { } @Override - public Dynamic updateWithAllFixers(DSL.TypeReference type, Dynamic dynamic) { + public Dynamic update(DSL.TypeReference type, Dynamic dynamic, int version, int newVersion) { if (this.dataFixer == null) { return dynamic; } - int modDataVersion = DataFixesInternals.getGTDataVersion(dynamic); - return this.dataFixer.update(type, dynamic, modDataVersion, GTCEu.GT_DATA_VERSION); + return this.dataFixer.update(type, dynamic, version, newVersion); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java index 0d8e9ee2a1f..0fade864e5d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java @@ -41,10 +41,25 @@ public Schema createBaseSchema() { } @Override - public Dynamic updateWithAllFixers(DSL.TypeReference dataFixTypes, Dynamic dynamic) { + public Dynamic updateToCurrentVersion(DSL.TypeReference type, Dynamic dynamic) { return dynamic; } + @Override + public Dynamic update(DSL.TypeReference type, Dynamic dynamic, int version, int newVersion) { + return dynamic; + } + + @Override + public CompoundTag updateToCurrentVersion(DSL.TypeReference dataFixTypes, CompoundTag tag) { + return tag; + } + + @Override + public CompoundTag update(DSL.TypeReference dataFixTypes, CompoundTag tag, int version, int newVersion) { + return tag; + } + @Override public CompoundTag addGTDataVersion(CompoundTag compound) { return compound; diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java index b66b095b7b5..0a6ff5d4539 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java @@ -24,6 +24,6 @@ public class DataFixTypesMixin { // skip applying datafixers to options.txt; doing that loads the fixers too early if ((Object) this == DataFixTypes.OPTIONS) return value; - return DataFixesInternals.get().updateWithAllFixers(this.type, value); + return DataFixesInternals.get().updateToCurrentVersion(this.type, value); } } From d09c87f6ca043285e790bfd80d6d30413c6d6e96 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 14:51:18 +0300 Subject: [PATCH 16/83] Inject fixers to Forge registry ID maps --- .../common/data/datafixer/GTReferences.java | 2 + .../gtceu/common/datafixer/schemas/V0.java | 21 ++++++++++ .../mixins/datafixer/ForgeHooksMixin.java | 39 +++++++++++++++++++ src/main/resources/gtceu.mixins.json | 4 ++ 4 files changed, 66 insertions(+) create mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java index f810e6524ee..16f34303073 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java @@ -9,4 +9,6 @@ public class GTReferences { public static final DSL.TypeReference FLUID_STACK = () -> "fluid_stack"; public static final DSL.TypeReference FLUID_NAME = () -> "fluid_name"; + + public static final DSL.TypeReference FORGE_REGISTRY_DATA = () -> "forge_registry_data"; } \ No newline at end of file diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 2d2d00e07fe..e7acf2bdef2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -37,6 +37,27 @@ public void registerTypes(Schema schema, Map> ent Map> blockEntityTypes) { super.registerTypes(schema, entityTypes, blockEntityTypes); + // add forge registry id map to the level schema + schema.registerType(false, GTReferences.FORGE_REGISTRY_DATA, () -> optionalFields( + "minecraft:block", optionalFields( + "ids", compoundList(References.BLOCK_NAME.in(schema), constType(intType())), + "aliases", compoundList(DSL.constType(namespacedString()), References.BLOCK_NAME.in(schema)) + ), + "minecraft:item", optionalFields( + "ids", compoundList(References.ITEM_NAME.in(schema), constType(intType())), + "aliases", compoundList(DSL.constType(namespacedString()), References.ITEM_NAME.in(schema)) + ), + "minecraft:fluid", optionalFields( + "ids", compoundList(GTReferences.FLUID_NAME.in(schema), constType(intType())), + "aliases", compoundList(DSL.constType(namespacedString()), GTReferences.FLUID_NAME.in(schema)) + ), + "minecraft:entity_type", optionalFields( + "ids", compoundList(References.ENTITY_NAME.in(schema), constType(intType())), + "aliases", compoundList(DSL.constType(namespacedString()), References.ENTITY_NAME.in(schema)) + ) + )); + + schema.registerType(false, GTReferences.MATERIAL_NAME, () -> constType(namespacedString())); schema.registerType(true, GTReferences.FLUID_STACK, () -> hook( diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java new file mode 100644 index 00000000000..5d0c6b4d242 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java @@ -0,0 +1,39 @@ +package com.gregtechceu.gtceu.core.mixins.datafixer; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraftforge.common.ForgeHooks; + +import com.llamalad7.mixinextras.expression.Definition; +import com.llamalad7.mixinextras.expression.Expression; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(value = ForgeHooks.class, remap = false) +public class ForgeHooksMixin { + + @Definition(id = "CompoundTag", type = CompoundTag.class) + @Definition(id = "fmlData", local = @Local(name = "fmlData", type = CompoundTag.class), remap = false) + @Expression("fmlData = @(new CompoundTag())") + @ModifyExpressionValue(method = "writeAdditionalLevelSaveData", at = @At("MIXINEXTRAS:EXPRESSION")) + private static CompoundTag gtceu$addDataVersions(CompoundTag fmlData) { + return NbtUtils.addCurrentDataVersion(fmlData); + } + + @Definition(id = "tag", local = @Local(type = CompoundTag.class, name = "tag")) + @Definition(id = "getCompound", method = "Lnet/minecraft/nbt/CompoundTag;getCompound(Ljava/lang/String;)Lnet/minecraft/nbt/CompoundTag;", remap = true) + @Expression("tag.getCompound('Registries')") + @ModifyExpressionValue(method = "readAdditionalLevelSaveData", at = @At(value = "MIXINEXTRAS:EXPRESSION")) + private static CompoundTag gtceu$fixRegistriesTag(CompoundTag regs, + @Local(name = "tag") CompoundTag tag) { + int currentVersion = DataFixesInternals.getGTDataVersion(tag); + return DataFixesInternals.get() + .update(GTReferences.FORGE_REGISTRY_DATA, regs, currentVersion, GTCEu.GT_DATA_VERSION); + } +} diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index 981e9c422a3..0c922c73f2f 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -1,6 +1,9 @@ { "required": true, "minVersion": "0.8", + "mixinextras": { + "minVersion": "0.5.0-rc.3" + }, "refmap": "gtceu.refmap.json", "package": "com.gregtechceu.gtceu.core.mixins", "compatibilityLevel": "JAVA_17", @@ -65,6 +68,7 @@ "TagValueAccessor", "client.ItemEntityMixin", "datafixer.DataFixTypesMixin", + "datafixer.ForgeHooksMixin", "datafixer.NbtUtilsMixin", "dev.datagen.FixParallelKeyMappingRegistrationMixin", "dev.test.GameTestRegistryMixin", From c2a3319f6e03a3fa0be9a7c1efcf0006d471a5b4 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 16:07:41 +0300 Subject: [PATCH 17/83] Simplify datafixer handling; we don't need handling for multiple mods' fixers --- .../gtceu/api/datafixer/DataFixHelper.java | 90 ++++++++ .../api/datafixer/DataFixesInternals.java | 124 ----------- .../api/datafixer/DataFixesInternalsImpl.java | 76 ------- .../gtceu/api/datafixer/EmptyDataFixer.java | 88 ++++++++ .../gtceu/api/datafixer/EmptySchema.java | 52 ----- .../gtceu/api/datafixer/FirstSchema.java | 50 ----- .../gregtechceu/gtceu/api/datafixer/LICENSE | 205 ------------------ .../gtceu/api/datafixer/LazyDataFixer.java | 31 ++- .../api/datafixer/NoOpDataFixesInternals.java | 67 ------ .../common/data/datafixer/GTDataFixers.java | 50 +++-- .../mixins/datafixer/DataFixTypesMixin.java | 4 +- .../mixins/datafixer/ForgeHooksMixin.java | 7 +- .../core/mixins/datafixer/NbtUtilsMixin.java | 4 +- 13 files changed, 245 insertions(+), 603 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptyDataFixer.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptySchema.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/FirstSchema.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java 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..bac8ad46a6b --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java @@ -0,0 +1,90 @@ +package com.gregtechceu.gtceu.api.datafixer; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.common.data.datafixer.GTDataFixers; + +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.DataFixUtils; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; + +import net.minecraft.SharedConstants; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtOps; +import net.minecraft.util.datafix.DataFixers; + +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 = 0, to = Integer.MAX_VALUE) + public static int getGTDataVersion(Dynamic dynamic) { + return getGTDataVersion(dynamic, -1); + } + + @Contract(pure = true) + @Range(from = 0, 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 = 0, to = Integer.MAX_VALUE) + public static int getGTDataVersion(CompoundTag tag) { + return getGTDataVersion(tag, -1); + } + + @Contract(pure = true) + @Range(from = 0, 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/DataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java deleted file mode 100644 index 4a11781deb1..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternals.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright 2022 QuiltMC - * Modified by the Steam 'n' Rails (Railways) team - * - * 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. - */ -package com.gregtechceu.gtceu.api.datafixer; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.config.ConfigHolder; -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.DataFixUtils; -import com.mojang.datafixers.DataFixer; -import com.mojang.datafixers.schemas.Schema; -import com.mojang.serialization.Dynamic; -import net.minecraft.SharedConstants; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.util.datafix.DataFixers; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.jetbrains.annotations.*; - -import java.util.function.BiFunction; - -import static com.google.common.base.Preconditions.checkArgument; - -@ApiStatus.Internal -public abstract class DataFixesInternals { - - public static final String GT_DATA_VERSION_TAG = "GTCEu_DataVersion"; - private static final Logger LOGGER = LogManager.getLogger("GTCEu/DFU"); - - public static final BiFunction BASE_SCHEMA = (version, parent) -> { - checkArgument(version == 0, "version must be 0"); - checkArgument(parent == null, "parent must be null"); - return get().createBaseSchema(); - }; - - private static @Nullable DataFixesInternals instance; - - public static DataFixesInternals get() { - if (instance == null) { - // Init config in case it's not loaded yet - if (!ConfigHolder.getInstance().compat.doDataFixers) { - instance = new NoOpDataFixesInternals(); - return instance; - } - - try { - - instance = new DataFixesInternalsImpl(() -> { - int vanillaDataVersion = SharedConstants.getCurrentVersion().getDataVersion().getVersion(); - return DataFixers.getDataFixer().getSchema(DataFixUtils.makeKey(vanillaDataVersion)); - }); - } catch (Exception ex) { - LOGGER.warn("Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft build is hosed."); - LOGGER.warn("Using no-op implementation."); - LOGGER.warn("Full error: ", ex); - - instance = new NoOpDataFixesInternals(); - } - } - - return instance; - } - - public abstract void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, - DataFixer dataFixer); - - @Contract(value = "-> new", pure = true) - public abstract Schema createBaseSchema(); - - public Dynamic updateToCurrentVersion(DSL.TypeReference type, Dynamic dynamic) { - return update(type, dynamic, getGTDataVersion(dynamic), GTCEu.GT_DATA_VERSION); - } - - public abstract Dynamic update(DSL.TypeReference type, Dynamic dynamic, int version, int newVersion); - - public CompoundTag updateToCurrentVersion(DSL.TypeReference dataFixTypes, CompoundTag tag) { - return this.update(dataFixTypes, tag, getGTDataVersion(tag), GTCEu.GT_DATA_VERSION); - } - - public CompoundTag update(DSL.TypeReference dataFixTypes, CompoundTag tag, int version, int newVersion) { - return (CompoundTag) this.update(dataFixTypes, new Dynamic<>(NbtOps.INSTANCE, tag), version, newVersion).getValue(); - } - - public abstract CompoundTag addGTDataVersion(CompoundTag tag); - - @Contract(pure = true) - @Range(from = 0, to = Integer.MAX_VALUE) - public static int getGTDataVersion(Dynamic dynamic) { - return getGTDataVersion(dynamic, -1); - } - - @Contract(pure = true) - @Range(from = 0, 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 = 0, to = Integer.MAX_VALUE) - public static int getGTDataVersion(CompoundTag tag) { - return getGTDataVersion(tag, -1); - } - - @Contract(pure = true) - @Range(from = 0, 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; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java deleted file mode 100644 index 86ffc61fc8c..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixesInternalsImpl.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2022 QuiltMC - * Modified by the Steam 'n' Rails (Railways) team - * - * 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. - */ -package com.gregtechceu.gtceu.api.datafixer; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.common.datafixer.schemas.V0; -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.DataFixer; -import com.mojang.datafixers.schemas.Schema; -import com.mojang.serialization.Dynamic; - -import net.minecraft.nbt.CompoundTag; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.Range; - -import java.util.function.Supplier; - -@ApiStatus.Internal -public final class DataFixesInternalsImpl extends DataFixesInternals { - - private final Supplier latestVanillaSchema; - - private @Nullable DataFixer dataFixer; - - public DataFixesInternalsImpl(Supplier latestVanillaSchema) { - this.latestVanillaSchema = latestVanillaSchema; - - this.dataFixer = null; - } - - @Override - public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer) { - if (this.dataFixer != null) { - throw new IllegalArgumentException("GTCEu already has a registered data fixer"); - } - - this.dataFixer = dataFixer; - } - - @Override - public Schema createBaseSchema() { - return new V0(0, this.latestVanillaSchema.get()); - } - - @Override - public Dynamic update(DSL.TypeReference type, Dynamic dynamic, int version, int newVersion) { - if (this.dataFixer == null) { - return dynamic; - } - return this.dataFixer.update(type, dynamic, version, newVersion); - } - - @Override - public CompoundTag addGTDataVersion(CompoundTag compound) { - if (this.dataFixer != null) { - compound.putInt(GT_DATA_VERSION_TAG, GTCEu.GT_DATA_VERSION); - } - - return compound; - } -} 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/EmptySchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptySchema.java deleted file mode 100644 index d52a41cd072..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/EmptySchema.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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. - */ -package com.gregtechceu.gtceu.api.datafixer; - -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.schemas.Schema; -import com.mojang.datafixers.types.Type; -import com.mojang.datafixers.types.templates.TypeTemplate; -import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; -import org.jetbrains.annotations.Range; - -import java.util.Map; -import java.util.function.Supplier; - -/** - * Represents an empty {@link Schema}, having no parent and containing no type definitions. - */ -public final class EmptySchema extends FirstSchema { - - /** - * Constructs an empty schema. - * - * @param versionKey the data version key - */ - public EmptySchema(@Range(from = 0, to = Integer.MAX_VALUE) int versionKey) { - super(versionKey); - } - - // 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/FirstSchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FirstSchema.java deleted file mode 100644 index a04730bf6d5..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/FirstSchema.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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. - */ -package com.gregtechceu.gtceu.api.datafixer; - -import com.mojang.datafixers.schemas.Schema; -import com.mojang.datafixers.types.templates.TypeTemplate; -import org.jetbrains.annotations.Range; - -import java.util.Map; -import java.util.function.Supplier; - -public class FirstSchema extends Schema { - - /** - * Creates a schema. - * - * @param versionKey the data version key - */ - public FirstSchema(@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(); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE deleted file mode 100644 index ad5b29c1e36..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LICENSE +++ /dev/null @@ -1,205 +0,0 @@ -Certain portions of the datafixer are taken from the -Quilt Standard Library (https://github.com/QuiltMC/quilt-standard-libraries), -and as such are licensed under the following license: - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java index 5aef49e5ee4..0d36eb500a8 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java @@ -1,3 +1,20 @@ +/* + * 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; @@ -6,16 +23,20 @@ import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; -import org.embeddedt.modernfix.dfu.DFUBlaster; 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 dfuSupplier; + private final Supplier<@Nullable DataFixer> dfuSupplier; - public LazyDataFixer(Supplier dfuSupplier) { + public LazyDataFixer(Supplier<@Nullable DataFixer> dfuSupplier) { this.backingDataFixer = null; this.dfuSupplier = dfuSupplier; } @@ -24,9 +45,11 @@ private DataFixer getDataFixer() { synchronized(this) { if (this.backingDataFixer == null) { GTCEu.LOGGER.info("Instantiating GTCEu Data Fixers"); - DFUBlaster.blastMaps(); this.backingDataFixer = this.dfuSupplier.get(); } + if (this.backingDataFixer == null) { + this.backingDataFixer = EmptyDataFixer.INSTANCE; + } } return this.backingDataFixer; diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java deleted file mode 100644 index 0fade864e5d..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/NoOpDataFixesInternals.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2022 QuiltMC - * Modified by the Steam 'n' Rails (Railways) team - * - * 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. - */ -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.serialization.Dynamic; -import net.minecraft.nbt.CompoundTag; - -import org.jetbrains.annotations.Range; - -public class NoOpDataFixesInternals extends DataFixesInternals { - - private final Schema schema; - - public NoOpDataFixesInternals() { - schema = new EmptySchema(0); - } - - @Override - public void registerFixer(@Range(from = 0, to = Integer.MAX_VALUE) int currentVersion, DataFixer dataFixer) {} - - @Override - public Schema createBaseSchema() { - return schema; - } - - @Override - public Dynamic updateToCurrentVersion(DSL.TypeReference type, Dynamic dynamic) { - return dynamic; - } - - @Override - public Dynamic update(DSL.TypeReference type, Dynamic dynamic, int version, int newVersion) { - return dynamic; - } - - @Override - public CompoundTag updateToCurrentVersion(DSL.TypeReference dataFixTypes, CompoundTag tag) { - return tag; - } - - @Override - public CompoundTag update(DSL.TypeReference dataFixTypes, CompoundTag tag, int version, int newVersion) { - return tag; - } - - @Override - public CompoundTag addGTDataVersion(CompoundTag compound) { - return compound; - } -} 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 index 188fb8d10d7..6c271536a3d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.common.data.datafixer; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.gregtechceu.gtceu.api.datafixer.LazyDataFixer; import com.gregtechceu.gtceu.common.datafixer.fixes.AutoOutputTraitFix; import com.gregtechceu.gtceu.common.datafixer.schemas.*; @@ -12,49 +12,65 @@ 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.DataFixerBuilder; 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; -import static com.gregtechceu.gtceu.api.datafixer.DataFixesInternals.BASE_SCHEMA; - @SuppressWarnings("SameParameterValue") public class GTDataFixers { private static final BiFunction SAME_NAMESPACED = NamespacedSchema::new; - public static void init() { + @Getter + private static final @Nullable DataFixer dataFixer = createFixer(SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE); + + public static void init() {} + + private static @Nullable DataFixer createFixer(final Set typesToOptimize) { if (!ConfigHolder.INSTANCE.compat.doDataFixers) { - return; + return null; } - GTCEu.LOGGER.info("Registering data fixers"); + DataFixHelper.LOGGER.info("Registering data fixers"); + + + return new LazyDataFixer(() -> { + try { + DataFixerBuilder builder = new DataFixerBuilder(GTCEu.GT_DATA_VERSION); + addFixers(builder); - DataFixer fixer = new LazyDataFixer(() -> { - DataFixerBuilder builder = new DataFixerBuilder(GTCEu.GT_DATA_VERSION); - addFixers(builder); + if (typesToOptimize.isEmpty()) { + return builder.buildUnoptimized(); + } else { + Executor executor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() + .setNameFormat("GTCEu Datafixer Bootstrap").setDaemon(true).setPriority(1).build()); + return builder.buildOptimized(typesToOptimize, executor); + } + } catch (Exception ex) { + DataFixHelper.LOGGER.warn("Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft build is hosed."); + DataFixHelper.LOGGER.warn("Using no-op implementation."); + DataFixHelper.LOGGER.warn("Full error: ", ex); - if (SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE.isEmpty()) { - return builder.buildUnoptimized(); - } else { - Executor executor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder() - .setNameFormat("GTCEu Datafixer Bootstrap").setDaemon(true).setPriority(1).build()); - return builder.buildOptimized(SharedConstants.DATA_FIX_TYPES_TO_OPTIMIZE, executor); + return null; } }); - DataFixesInternals.get().registerFixer(GTCEu.GT_DATA_VERSION, fixer); } public static void addFixers(DataFixerBuilder builder) { - builder.addSchema(0, BASE_SCHEMA); + builder.addSchema(new V0(DataFixUtils.makeKey(0), DataFixHelper.getLatestVanillaSchema())); Schema schemaV1 = builder.addSchema(1, V1::new); createBlockItemRenameFix(builder, schemaV1, "RTM Alloy Coil Block", diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java index 0a6ff5d4539..324c3678592 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.core.mixins.datafixer; -import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.mojang.datafixers.DSL; import com.mojang.serialization.Dynamic; @@ -24,6 +24,6 @@ public class DataFixTypesMixin { // skip applying datafixers to options.txt; doing that loads the fixers too early if ((Object) this == DataFixTypes.OPTIONS) return value; - return DataFixesInternals.get().updateToCurrentVersion(this.type, value); + return DataFixHelper.updateToCurrentVersion(this.type, value); } } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java index 5d0c6b4d242..12fc7c77953 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java @@ -1,7 +1,7 @@ package com.gregtechceu.gtceu.core.mixins.datafixer; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; import net.minecraft.nbt.CompoundTag; @@ -32,8 +32,7 @@ public class ForgeHooksMixin { @ModifyExpressionValue(method = "readAdditionalLevelSaveData", at = @At(value = "MIXINEXTRAS:EXPRESSION")) private static CompoundTag gtceu$fixRegistriesTag(CompoundTag regs, @Local(name = "tag") CompoundTag tag) { - int currentVersion = DataFixesInternals.getGTDataVersion(tag); - return DataFixesInternals.get() - .update(GTReferences.FORGE_REGISTRY_DATA, regs, currentVersion, GTCEu.GT_DATA_VERSION); + int currentVersion = DataFixHelper.getGTDataVersion(tag); + return DataFixHelper.update(GTReferences.FORGE_REGISTRY_DATA, regs, currentVersion, GTCEu.GT_DATA_VERSION); } } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java index 9e4bfbb1a62..88f32528aa4 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java @@ -1,6 +1,6 @@ package com.gregtechceu.gtceu.core.mixins.datafixer; -import com.gregtechceu.gtceu.api.datafixer.DataFixesInternals; +import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; @@ -12,6 +12,6 @@ public class NbtUtilsMixin { @ModifyReturnValue(method = "addDataVersion", at = @At("RETURN")) private static CompoundTag gtceu$addGTDataVersion(CompoundTag tag) { - return DataFixesInternals.get().addGTDataVersion(tag); + return DataFixHelper.addGTDataVersion(tag); } } From 194ae3df4a217e175cd8901ed0eeb259145efac8 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 16:09:15 +0300 Subject: [PATCH 18/83] Remove `TagPrefix.invertedName`; that code was for updating to **1.0.20.b** and certainly no longer required by anything --- .../gtceu/api/data/tag/TagPrefix.java | 9 +--- .../gtceu/common/CommonEventListener.java | 50 ------------------- 2 files changed, 1 insertion(+), 58 deletions(-) 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 c438c7e0167..0bfad34f0c0 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 @@ -203,7 +203,7 @@ public boolean isEmpty() { .requiresCorrectToolForDrops().strength(4.5F, 9.0F), new ResourceLocation("block/end_stone"), true, false, true); - public static final TagPrefix rawOre = new TagPrefix("raw", true) + public static final TagPrefix rawOre = new TagPrefix("raw") .idPattern("raw_%s") .defaultTagPath("raw_materials/%s") .unformattedTagPath("raw_materials") @@ -983,8 +983,6 @@ public record BlockProperties(Supplier> renderType, @Getter @Setter private String idPattern; - @Getter - public final boolean invertedName; protected final List tags = new ArrayList<>(); @Setter @@ -1050,13 +1048,8 @@ public record BlockProperties(Supplier> renderType, protected final Set> miningToolTag = new HashSet<>(); public TagPrefix(String name) { - this(name, false); - } - - public TagPrefix(String name, boolean invertedName) { this.name = name; this.idPattern = "%s_" + getLowerCaseName(); - this.invertedName = invertedName; this.langValue = "%s " + FormattingUtil.toEnglishName(getLowerCaseName()); PREFIXES.put(name, this); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 8f8f36fa138..16cd7a56dd2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -2,7 +2,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; -import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.BlockAttributes; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; @@ -20,12 +19,10 @@ import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialStack; 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.FluidBuilder; import com.gregtechceu.gtceu.api.fluids.FluidState; import com.gregtechceu.gtceu.api.fluids.store.FluidStorageKeys; import com.gregtechceu.gtceu.api.item.armor.ArmorComponentItem; -import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.misc.virtualregistry.VirtualEnderRegistry; import com.gregtechceu.gtceu.api.pattern.MultiblockWorldSavedData; @@ -39,7 +36,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.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; @@ -65,9 +61,7 @@ import com.gregtechceu.gtceu.integration.map.cache.server.ServerCache; import com.gregtechceu.gtceu.utils.TaskHandler; -import net.minecraft.core.registries.Registries; import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Difficulty; @@ -79,13 +73,11 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.monster.Zombie; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.PotionItem; 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.minecraftforge.common.ForgeMod; import net.minecraftforge.common.capabilities.ForgeCapabilities; @@ -105,17 +97,10 @@ import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.registries.MissingMappingsEvent; -import com.tterrag.registrate.util.entry.BlockEntry; -import com.tterrag.registrate.util.entry.ItemEntry; import org.jetbrains.annotations.NotNull; import java.util.List; -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 { @@ -584,39 +569,4 @@ public static void addAlloyBlastProperty(@NotNull Material material) { private static boolean isMaterialStackFluidOnly(@NotNull MaterialStack ms) { return !ms.material().hasProperty(PropertyKey.DUST) && ms.material().hasProperty(PropertyKey.FLUID); } - - @SubscribeEvent - public static void remapIds(MissingMappingsEvent event) { - for (TagPrefix prefix : TagPrefix.values()) { - 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 block = GTMaterialBlocks.MATERIAL_BLOCKS.get(prefix, - GTCEuAPI.materialManager.getRegistry(GTCEu.MOD_ID).get(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()) { - BlockEntry block = GTMaterialBlocks.MATERIAL_BLOCKS.get(prefix, - GTCEuAPI.materialManager.getRegistry(GTCEu.MOD_ID).get(matcher.group(1))); - if (block != null && block.isPresent()) { - mapping.remap(block.asItem()); - } else { - ItemEntry item = GTMaterialItems.MATERIAL_ITEMS.get(prefix, - GTCEuAPI.materialManager.getRegistry(GTCEu.MOD_ID).get(matcher.group(1))); - if (item != null && item.isPresent()) { - mapping.remap(item.asItem()); - } - } - } - }); - } - } } From 66106143a6fb2a89249bf25992e5e4f93adef49e Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 16:09:44 +0300 Subject: [PATCH 19/83] change schema variable names and some strings --- .../common/data/datafixer/GTDataFixers.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) 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 index 6c271536a3d..503a5a6b5eb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -72,29 +72,29 @@ public static void init() {} public static void addFixers(DataFixerBuilder builder) { builder.addSchema(new V0(DataFixUtils.makeKey(0), DataFixHelper.getLatestVanillaSchema())); - Schema schemaV1 = builder.addSchema(1, V1::new); - createBlockItemRenameFix(builder, schemaV1, "RTM Alloy Coil Block", + Schema v1 = builder.addSchema(1, V1::new); + createBlockItemRenameFix(builder, v1, "Rename RTM Alloy Coil Block", createRenamer("tungstensteel_coil_block", "rtm_alloy_coil_block")); - builder.addFixer(ItemRenameFix.create(schemaV1, "Advanced Nanomuscle Chestplate rename fix", + builder.addFixer(ItemRenameFix.create(v1, "Rename Advanced Nanomuscle Chestplate", createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); - createBlockItemRenameFix(builder, schemaV1, "Palladium Substation Casing", + createBlockItemRenameFix(builder, v1, "Rename Palladium Substation Casing", createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); - builder.addFixer(BlockRenameFix.create(schemaV1, "Rename Tungstensteel Fluid Cell", + builder.addFixer(BlockRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", createRenamer("gtceu:tungstensteel_fluid_cell", "gtceu:tungsten_steel_fluid_cell"))); - createBlockItemRenameFix(builder, schemaV1, "Rename Low Pressure Steam Miner", + createBlockItemRenameFix(builder, v1, "Rename Low Pressure Steam Miner", createRenamer("gtceu:steam_miner", "gtceu:lp_steam_miner")); - builder.addFixer(ItemRenameFix.create(schemaV1, "Rename electric wire cutters", + builder.addFixer(ItemRenameFix.create(v1, "Rename electric wire cutters", createRenamer(Pattern.compile("([lhi])v_([a-z0-9/._-]+)_wirecutter"), "$1v_$2_wire_cutter"))); // separator - Schema schemaV10 = builder.addSchema(10, SAME_NAMESPACED); - builder.addFixer(new AutoOutputTraitFix(schemaV10)); + Schema v10 = builder.addSchema(10, SAME_NAMESPACED); + builder.addFixer(new AutoOutputTraitFix(v10)); /* createBlockItemRenameFix(builder, schemaV11, "U238", @@ -113,9 +113,9 @@ public static void addFixers(DataFixerBuilder builder) { private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { - builder.addFixer(ItemRenameFix.create(schema, "Rename " + name, renamer)); - builder.addFixer(BlockRenameFix.create(schema, "Rename " + name, renamer)); - builder.addFixer(BlockEntityRenameFix.create(schema, "Rename " + name, renamer)); + builder.addFixer(ItemRenameFix.create(schema, name, renamer)); + builder.addFixer(BlockRenameFix.create(schema, name, renamer)); + builder.addFixer(BlockEntityRenameFix.create(schema, name, renamer)); } private static UnaryOperator createRenamer(String oldName, String newName) { From a6ad0707ef36e4a51b0db00c96ab0fc0c83369b2 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 16:09:56 +0300 Subject: [PATCH 20/83] remove unnecessary hook() from fluid stack type --- .../gtceu/common/datafixer/schemas/V0.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index e7acf2bdef2..96489042424 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -8,7 +8,6 @@ import com.mojang.datafixers.DSL; import com.mojang.datafixers.schemas.Schema; -import com.mojang.datafixers.types.templates.Hook; import com.mojang.datafixers.types.templates.TypeTemplate; import net.minecraft.util.datafix.fixes.References; @@ -60,13 +59,10 @@ public void registerTypes(Schema schema, Map> ent schema.registerType(false, GTReferences.MATERIAL_NAME, () -> constType(namespacedString())); - schema.registerType(true, GTReferences.FLUID_STACK, () -> hook( - optionalFields( - "FluidName", GTReferences.FLUID_NAME.in(schema), - "Tag", remainder() - ), - Hook.HookFunction.IDENTITY, Hook.HookFunction.IDENTITY) - ); + schema.registerType(true, GTReferences.FLUID_STACK, () -> optionalFields( + "FluidName", GTReferences.FLUID_NAME.in(schema), + "Tag", remainder() + )); schema.registerType(false, GTReferences.FLUID_NAME, () -> constType(namespacedString())); } From 1e77cbb3286a1d4179e84c18544b1858b877129c Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Wed, 27 May 2026 16:42:47 +0300 Subject: [PATCH 21/83] Remove defined fields that don't use named types (like items/fluids) --- .../gtceu/common/datafixer/schemas/V0.java | 78 +++++++------------ 1 file changed, 30 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 96489042424..262551fc1da 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -148,27 +148,23 @@ public Map> registerBlockEntities(Schema schema) // endregion // region electric - final Supplier energyContainer = () -> optionalFields( - "energyContainer", notifiableEnergyContainer(schema) - ); final int[] transformerTiers = GTValues.tiersBetween(ULV, GTCEuAPI.isHighTier() ? OpV : UV); - registerForTiers(schema, map, "transformer_1a", energyContainer, transformerTiers); - registerForTiers(schema, map, "transformer_2a", energyContainer, transformerTiers); - registerForTiers(schema, map, "transformer_4a", energyContainer, transformerTiers); - registerForTiers(schema, map, "transformer_16a", energyContainer, transformerTiers); + registerForTiers(schema, map, "transformer_1a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "transformer_2a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "transformer_4a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "transformer_16a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "1a_energy_converter", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "4a_energy_converter", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "8a_energy_converter", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "16a_energy_converter", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "1a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "4a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "8a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "16a_energy_converter", DSL::remainder, ALL_TIERS); schema.registerSimple(map, "long_distance_item_pipeline_endpoint"); schema.registerSimple(map, "long_distance_fluid_pipeline_endpoint"); schema.registerSimple(map, "long_distance_fluid_pipeline_endpoint"); final Supplier batteryBuffer = () -> optionalFields( - "batteryInventory", itemHandler(schema), - energyContainer.get() + "batteryInventory", itemHandler(schema) ); registerForTiers(schema, map, "battery_buffer_4x", batteryBuffer, ALL_TIERS); registerForTiers(schema, map, "battery_buffer_8x", batteryBuffer, ALL_TIERS); @@ -176,27 +172,23 @@ public Map> registerBlockEntities(Schema schema) registerForTiers(schema, map, "charger_4x", batteryBuffer, ALL_TIERS); registerForTiers(schema, map, "pump", () -> optionalFields( - "cache", notifiableFluidTank(schema), - energyContainer.get() + "cache", notifiableFluidTank(schema) ), LV, MV, HV, EV); registerForTiers(schema, map, "fisher", () -> optionalFields( "cache", notifiableItemHandler(schema), "baitHandler", notifiableItemHandler(schema), - "chargerInventory", itemHandler(schema), - energyContainer.get() + "chargerInventory", itemHandler(schema) ), LV, MV, HV, EV, IV, LuV); registerForTiers(schema, map, "block_breaker", () -> optionalFields( "cache", notifiableItemHandler(schema), - "chargerInventory", itemHandler(schema), - energyContainer.get() + "chargerInventory", itemHandler(schema) ), LV, MV, HV, EV); registerSimpleMachine(schema, map, "miner", LV, MV, HV); - registerForTiers(schema, map, "world_accelerator", energyContainer, LV, MV, HV, EV, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "world_accelerator", DSL::remainder, LV, MV, HV, EV, IV, LuV, ZPM, UV); registerForTiers(schema, map, "item_collector", () -> optionalFields( "output", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema), - "filterInventory", itemHandler(schema), - energyContainer.get() + "filterInventory", itemHandler(schema) ), LV, MV, HV, EV); // endregion @@ -265,14 +257,14 @@ public Map> registerBlockEntities(Schema schema) registerForTiers(schema, map, "output_hatch_4x", fluidHatch, ALL_TIERS); registerForTiers(schema, map, "output_hatch_9x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_4a", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_4a", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_16a", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_16a", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "substation_input_hatch_64a", energyContainer, ALL_TIERS); - registerForTiers(schema, map, "substation_output_hatch_64a", energyContainer, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_4a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_4a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_16a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_16a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "substation_input_hatch_64a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "substation_output_hatch_64a", DSL::remainder, ALL_TIERS); registerForTiers(schema, map, "muffler_hatch", itemStorage, ELECTRIC_TIERS); @@ -299,21 +291,18 @@ public Map> registerBlockEntities(Schema schema) registerForTiers(schema, map, "dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); registerForTiers(schema, map, "dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); - registerForTiers(schema, map, "diode", energyContainer, ELECTRIC_TIERS); + registerForTiers(schema, map, "diode", DSL::remainder, ELECTRIC_TIERS); registerForTiers(schema, map, "rotor_holder", () -> optionalFields( "rotorMaterial", GTReferences.MATERIAL_NAME.in(schema), itemStorage.get() ), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); - final Supplier laserHatch = () -> optionalFields( - "buffer", notifiableEnergyContainer(schema) - ); - registerForTiers(schema, map, "256a_laser_target_hatch", laserHatch, HIGH_TIERS); - registerForTiers(schema, map, "256a_laser_source_hatch", laserHatch, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_target_hatch", laserHatch, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_source_hatch", laserHatch, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_target_hatch", laserHatch, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_source_hatch", laserHatch, HIGH_TIERS); + registerForTiers(schema, map, "256a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "256a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_source_hatch", DSL::remainder, HIGH_TIERS); schema.registerSimple(map, "monitor"); schema.registerSimple(map, "advanced_monitor"); @@ -368,7 +357,7 @@ public Map> registerBlockEntities(Schema schema) schema.registerSimple(map, "central_monitor"); // region GCYM - registerForTiers(schema, map, "parallel_hatch", laserHatch, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "parallel_hatch", DSL::remainder, IV, LuV, ZPM, UV); schema.registerSimple(map, "large_maceration_tower"); schema.registerSimple(map, "large_chemical_bath"); schema.registerSimple(map, "large_centrifuge"); @@ -471,7 +460,6 @@ protected static void registerSimpleMachine(Schema schema, Map Date: Wed, 27 May 2026 17:13:30 +0300 Subject: [PATCH 22/83] add javadoc describing what, why & how --- .../common/data/datafixer/GTDataFixers.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 index 503a5a6b5eb..485c87f4553 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -29,6 +29,24 @@ import java.util.function.UnaryOperator; import java.util.regex.Pattern; +/** + * Register new datafixers in {@link #addFixers(DataFixerBuilder)}. Remember to bump {@link GTCEu#GT_DATA_VERSION} 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 {@link #SAME_NAMESPACED} for the schema. + * Register machines (and other block entities) in a schema overriding {@link Schema#registerBlockEntities}. + * + *

+ *

DO NOT ADD NEW MACHINES TO {@link V0}!! THEY SHOULD BE IN NEW, CORRECTLY VERSIONED, SCHEMAS!!

+ * Reference vanilla schemas for more information on that, examples linked below. Also check how they're used in + * vanilla's {@link net.minecraft.util.datafix.DataFixers DataFixers}.
+ * {@link net.minecraft.util.datafix.schemas.V1460 V1460}, {@link net.minecraft.util.datafix.schemas.V1906 V1906} + * + *

+ * Note how only fields that use other registered types (such as item/fluid stacks) are defined. The same should be + * done for all types. + */ @SuppressWarnings("SameParameterValue") public class GTDataFixers { From 8fc7b86ee7b704ad955e70db396e5c6893bb09d5 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 17:18:27 +0300 Subject: [PATCH 23/83] Add "automatic" namespaced schema util thing --- .../schemas/AutomaticNamespacedSchema.java | 87 +++++++++++++++++++ .../gtceu/api/datafixer/types/ExtraDSL.java | 64 +++++++------- .../gtceu/common/datafixer/schemas/V0.java | 23 ++--- .../gtceu/common/datafixer/schemas/V1.java | 9 +- 4 files changed, 129 insertions(+), 54 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java new file mode 100644 index 00000000000..f3559150c05 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java @@ -0,0 +1,87 @@ +package com.gregtechceu.gtceu.api.datafixer.schemas; + +import com.gregtechceu.gtceu.common.datafixer.schemas.V0; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + +import java.util.Map; +import java.util.function.Supplier; + +public class AutomaticNamespacedSchema extends NamespacedSchema { + + private String automaticNamespace; + + public AutomaticNamespacedSchema(int versionKey, Schema parent, String automaticNamespace) { + super(versionKey, parent); + this.automaticNamespace = automaticNamespace; + } + + @Override + public void register(final Map> map, String name, + final Supplier template) { + if (name.indexOf(':') == -1) { + name = automaticNamespace + ":" + name; + } else if (name.indexOf(':') == 0) { + // protect against typos/copy-paste errors + name = automaticNamespace + name; + } + super.register(map, name, template); + } + + /** + * Register block entity types to the schema by overriding this and calling {@link #register} (and {@link #remove}). + * There are also a variety of utility functions in {@linkplain Schema vanilla's} and {@linkplain V0 GT's} schemas + * you may use. + * + *

+ * Warning: Do not modify the returned map directly. If you do, the values you put in it will default to the + * {@code minecraft} namespace, which is most likely not what you want. Use the aforementioned utility functions + * instead. + */ + @Override + public Map> registerBlockEntities(Schema schema) { + String originalNamespace = this.automaticNamespace; + try { + // revert the namespace to minecraft for the parent schema automatically + this.automaticNamespace = "minecraft"; + return super.registerBlockEntities(schema); + } finally { + // after processing vanilla things, go back to the assigned namespace + this.automaticNamespace = originalNamespace; + } + } + + /** + * Register block entity types to the schema by overriding this and calling {@link #register} (and {@link #remove}). + * There are also a variety of utility functions in {@linkplain Schema vanilla's} and {@linkplain V0 GT's} schemas + * you may use. + * + *

+ * Warning: Do not modify the returned map directly. If you do, the values you put in it will default to the + * {@code minecraft} namespace, which is most likely not what you want. Use the aforementioned utility functions + * instead. + */ + @Override + public Map> registerEntities(Schema schema) { + String originalNamespace = this.automaticNamespace; + try { + // revert the namespace to minecraft for the parent schema automatically + this.automaticNamespace = "minecraft"; + return super.registerEntities(schema); + } finally { + // after processing vanilla things, go back to the assigned namespace + this.automaticNamespace = originalNamespace; + } + } + + public void remove(final Map> map, String name) { + if (name.indexOf(':') == -1) { + name = automaticNamespace + ":" + name; + } else if (name.indexOf(':') == 0) { + // protect against typos/copy-paste errors + name = automaticNamespace + name; + } + map.remove(name); + } +} 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 index bee671c6777..dafc53b4e01 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/types/ExtraDSL.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/types/ExtraDSL.java @@ -270,19 +270,16 @@ static TypeTemplate optionalFields( } static Type, Dynamic>> optionalFields(final String name, final Type element) { - return and( - optional(field(name, element)), - remainderType() - ); + return optionalFields(name, element, remainderType()); } static Type, Pair, Dynamic>>> optionalFields( final String name1, final Type element1, final String name2, final Type element2 ) { - return and( - optional(field(name1, element1)), - optional(field(name2, element2)), + return optionalFields( + name1, element1, + name2, element2, remainderType() ); } @@ -292,10 +289,10 @@ static Type, Pair, Pair element2, final String name3, final Type element3 ) { - return and( - optional(field(name1, element1)), - optional(field(name2, element2)), - optional(field(name3, element3)), + return optionalFields( + name1, element1, + name2, element2, + name3, element3, remainderType() ); } @@ -306,13 +303,12 @@ static Type, Pair, Pair element3, final String name4, final Type element4 ) { - return and( - optional(field(name1, element1)), - optional(field(name2, element2)), - optional(field(name3, element3)), - optionalFields( - name4, element4 - ) + return optionalFields( + name1, element1, + name2, element2, + name3, element3, + name4, element4, + remainderType() ); } @@ -323,14 +319,13 @@ static Type, Pair, Pair element4, final String name5, final Type element5 ) { - return and( - optional(field(name1, element1)), - optional(field(name2, element2)), - optional(field(name3, element3)), - optionalFields( - name4, element4, - name5, element5 - ) + return optionalFields( + name1, element1, + name2, element2, + name3, element3, + name4, element4, + name5, element5, + remainderType() ); } @@ -342,15 +337,14 @@ static Type, Pair, Pair< final String name5, final Type element5, final String name6, final Type element6 ) { - return and( - optional(field(name1, element1)), - optional(field(name2, element2)), - optional(field(name3, element3)), - optionalFields( - name4, element4, - name5, element5, - name6, element6 - ) + return optionalFields( + name1, element1, + name2, element2, + name3, element3, + name4, element4, + name5, element5, + name6, element6, + remainderType() ); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 262551fc1da..678bdc21e2e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -1,7 +1,9 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; +import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; @@ -11,7 +13,6 @@ import com.mojang.datafixers.types.templates.TypeTemplate; import net.minecraft.util.datafix.fixes.References; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import net.minecraftforge.fml.loading.LoadingModList; import java.util.Locale; @@ -24,10 +25,10 @@ import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; import static com.mojang.datafixers.DSL.*; -public class V0 extends NamespacedSchema { +public class V0 extends AutomaticNamespacedSchema { public V0(int versionKey, Schema parent) { - super(versionKey, parent); + super(versionKey, parent, GTCEu.MOD_ID); } // spotless:off @@ -40,19 +41,19 @@ public void registerTypes(Schema schema, Map> ent schema.registerType(false, GTReferences.FORGE_REGISTRY_DATA, () -> optionalFields( "minecraft:block", optionalFields( "ids", compoundList(References.BLOCK_NAME.in(schema), constType(intType())), - "aliases", compoundList(DSL.constType(namespacedString()), References.BLOCK_NAME.in(schema)) + "aliases", compoundList(constType(namespacedString()), References.BLOCK_NAME.in(schema)) ), "minecraft:item", optionalFields( "ids", compoundList(References.ITEM_NAME.in(schema), constType(intType())), - "aliases", compoundList(DSL.constType(namespacedString()), References.ITEM_NAME.in(schema)) + "aliases", compoundList(constType(namespacedString()), References.ITEM_NAME.in(schema)) ), "minecraft:fluid", optionalFields( "ids", compoundList(GTReferences.FLUID_NAME.in(schema), constType(intType())), - "aliases", compoundList(DSL.constType(namespacedString()), GTReferences.FLUID_NAME.in(schema)) + "aliases", compoundList(constType(namespacedString()), GTReferences.FLUID_NAME.in(schema)) ), "minecraft:entity_type", optionalFields( "ids", compoundList(References.ENTITY_NAME.in(schema), constType(intType())), - "aliases", compoundList(DSL.constType(namespacedString()), References.ENTITY_NAME.in(schema)) + "aliases", compoundList(constType(namespacedString()), References.ENTITY_NAME.in(schema)) ) )); @@ -446,14 +447,6 @@ public Map> registerBlockEntities(Schema schema) return map; } - @Override - public void register(final Map> map, String name, final Supplier template) { - if (name.indexOf(':') == -1) { - name = "gtceu:" + name; - } - map.put(name, template); - } - protected static void registerSimpleMachine(Schema schema, Map> map, String name, int... tiers) { registerForTiers(schema, map, name, () -> optionalFields( "importItems", notifiableItemHandler(schema), diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java index 66feec14b07..4e398f040ae 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java @@ -1,6 +1,7 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; -import net.minecraft.util.datafix.schemas.NamespacedSchema; +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; @@ -10,17 +11,17 @@ import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; -public class V1 extends NamespacedSchema { +public class V1 extends AutomaticNamespacedSchema { public V1(int versionKey, Schema parent) { - super(versionKey, parent); + super(versionKey, parent, GTCEu.MOD_ID); } @Override public Map> registerBlockEntities(Schema schema) { Map> map = super.registerBlockEntities(schema); - map.remove("steam_miner"); + remove(map, "steam_miner"); registerSimpleSteamMachine(schema, map, "steam_miner"); return map; From 0e2b9352a2b38c880b6436411b3345f72711ba8d Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 17:19:09 +0300 Subject: [PATCH 24/83] Create LDLib payload wrapper remover fix --- .../NBTSerializableTransformer.java | 2 +- .../collections/ListTransformer.java | 3 +- .../collections/ObjectArrayTransformer.java | 3 +- .../common/data/datafixer/GTDataFixers.java | 6 ++ .../fixes/LDLibPayloadWrapperRemovalFix.java | 68 +++++++++++++++++++ .../utils/data/TagCompatibilityFixer.java | 11 --- 6 files changed, 77 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java index 20a03a83877..cff03ee9f1a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java @@ -25,7 +25,7 @@ public Tag serializeNBT(INBTSerializable value, "Sync: Deserialization of INBTSerializable objects requires an existing object, they cannot be instantiated purely from saved data."); return null; } - currentVal.deserializeNBT(TagCompatibilityFixer.stripLDLibPayloadWrapper(tag)); + currentVal.deserializeNBT(tag); return currentVal; } } 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 5b041150889..d948b058432 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 @@ -53,8 +53,7 @@ public Tag serializeNBT(List value, ValueTransformer.TransformerContext(); List finalCurrent = current; 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) finalCurrent.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 85eb9fe50b6..0873f5efa3f 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 @@ -50,8 +50,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/common/data/datafixer/GTDataFixers.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java index 485c87f4553..86b0359997c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.gregtechceu.gtceu.api.datafixer.LazyDataFixer; import com.gregtechceu.gtceu.common.datafixer.fixes.AutoOutputTraitFix; +import com.gregtechceu.gtceu.common.datafixer.fixes.LDLibPayloadWrapperRemovalFix; import com.gregtechceu.gtceu.common.datafixer.schemas.*; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -111,6 +112,11 @@ public static void addFixers(DataFixerBuilder builder) { // separator + Schema v2 = builder.addSchema(2, SAME_NAMESPACED); + builder.addFixer(new LDLibPayloadWrapperRemovalFix(v2)); + + // separator + Schema v10 = builder.addSchema(10, SAME_NAMESPACED); builder.addFixer(new AutoOutputTraitFix(v10)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java new file mode 100644 index 00000000000..3f31c28f012 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java @@ -0,0 +1,68 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.mojang.datafixers.*; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.Type; +import com.mojang.serialization.Dynamic; +import net.minecraft.util.datafix.fixes.References; + +public class LDLibPayloadWrapperRemovalFix extends DataFix { + + public LDLibPayloadWrapperRemovalFix(Schema outputSchema) { + super(outputSchema, true); + } + + @Override + protected TypeRewriteRule makeRule() { + Type blockEntityIn = this.getInputSchema().getType(References.BLOCK_ENTITY); + Type blockEntityOut = this.getOutputSchema().getType(References.BLOCK_ENTITY); + return this.writeFixAndRead("LDLib Payload wrapper removal fix", blockEntityIn, blockEntityOut, LDLibPayloadWrapperRemovalFix::fix); + } + + private static Dynamic fix(Dynamic dynamic) { + var stream = dynamic.asStreamOpt().result(); + if (stream.isPresent()) { + // if the entry is a list, attempt to apply the fixer to its elements + return dynamic.createList(stream.get().map(LDLibPayloadWrapperRemovalFix::stripLDLibPayloadWrapper)); + } + // otherwise assume it's a map and fix all children too + // updateMapValues does nothing if the value isn't a map, so this is fine. + return dynamic.updateMapValues(entry -> entry.mapSecond(LDLibPayloadWrapperRemovalFix::fix)); + } + + /** + * applied to all list elements. + * + *

+ * Reading the code implies only array-like objects get the `{ "t": type, "p": value }` treatment. + */ + public static Dynamic stripLDLibPayloadWrapper(Dynamic dynamic) { + final Dynamic tKey = dynamic.createString("t"); + final Dynamic pKey = dynamic.createString("p"); + + return DataFixUtils.orElse(dynamic.getMapValues().result() + .map(map -> { + // only allow entries with only the specific keys we expect so we don't accidentally touch other stuff + // tag.contains("p") && tag.contains("t") + if (map.size() == 2 && map.containsKey(pKey) && map.containsKey(tKey)) { + // return tag.get("p") + return map.get(pKey); + } else if (map.size() == 1) { + // I don't think this one is something that can happen, but I'm not sure about that, so + // it's staying. + // + // As far as I can see, the only format that's used by LDLib is the above + // `{ "t": type, "p": value }` one. + + var tValue = map.get(tKey).getMapValues().result(); + if (tValue.isPresent()) { + return tValue.get().get(pKey); + } + } + return dynamic.createMap(map); + }) + // also apply the fixer to all child objects + .map(LDLibPayloadWrapperRemovalFix::fix) + , dynamic); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java index bc063adc94d..428e1b23d5f 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java @@ -149,15 +149,4 @@ public static Direction fixUpwardsFacing(Direction frontfacing, Direction upward } return newUpwards; } - - public static Tag stripLDLibPayloadWrapper(Tag t) { - if (!(t instanceof CompoundTag tag)) return t; - if (tag.contains("p") && tag.contains("t")) { - return tag.getCompound("p"); - } - if (tag.contains("t", Tag.TAG_COMPOUND)) { - return tag.getCompound("t").getCompound("p"); - } - return tag; - } } From 7a8e40eeb5e7d5a59b2d5516e8b01cab2c4cb200 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 18:36:13 +0300 Subject: [PATCH 25/83] Convert trait holder fix to a DFU fixer --- .../common/data/datafixer/GTDataFixers.java | 28 +- .../datafixer/fixes/AutoOutputTraitFix.java | 34 +- .../fixes/TraitHolderificationFix.java | 84 ++++ .../gtceu/common/datafixer/schemas/V0.java | 2 +- .../gtceu/common/datafixer/schemas/V3.java | 456 ++++++++++++++++++ .../utils/data/TagCompatibilityFixer.java | 69 --- 6 files changed, 577 insertions(+), 96 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java 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 index 86b0359997c..ea894ce1906 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -3,8 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.gregtechceu.gtceu.api.datafixer.LazyDataFixer; -import com.gregtechceu.gtceu.common.datafixer.fixes.AutoOutputTraitFix; -import com.gregtechceu.gtceu.common.datafixer.fixes.LDLibPayloadWrapperRemovalFix; +import com.gregtechceu.gtceu.common.datafixer.fixes.*; import com.gregtechceu.gtceu.common.datafixer.schemas.*; import com.gregtechceu.gtceu.config.ConfigHolder; @@ -42,11 +41,23 @@ *

DO NOT ADD NEW MACHINES TO {@link V0}!! THEY SHOULD BE IN NEW, CORRECTLY VERSIONED, SCHEMAS!!

* Reference vanilla schemas for more information on that, examples linked below. Also check how they're used in * vanilla's {@link net.minecraft.util.datafix.DataFixers DataFixers}.
- * {@link net.minecraft.util.datafix.schemas.V1460 V1460}, {@link net.minecraft.util.datafix.schemas.V1906 V1906} + * {@link net.minecraft.util.datafix.schemas.V1460 V1460}, {@link net.minecraft.util.datafix.schemas.V1906 V1906}
+ * Also, always add a {@link AddNewChoices} fixer of the appropriate type(s) when adding new types to a schema. * *

- * Note how only fields that use other registered types (such as item/fluid stacks) are defined. The same should be - * done for all 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 {@link Schema#register} like this: + *

{@code
+ * public Map> registerBlockEntities(Schema schema) {
+ *     Map> map = super.registerBlockEntities(schema);
+ *     // ...
+ *     schema.register(map, "my_id_here", () -> traitHolder(schema));
+ *     // ...
+ *     return map;
+ * }
+ * }
+ * We don't use {@link Schema#registerSimple} because we need to register the trait holder type for all machines. */ @SuppressWarnings("SameParameterValue") public class GTDataFixers { @@ -114,11 +125,12 @@ public static void addFixers(DataFixerBuilder builder) { Schema v2 = builder.addSchema(2, SAME_NAMESPACED); builder.addFixer(new LDLibPayloadWrapperRemovalFix(v2)); + builder.addFixer(new AutoOutputTraitFix(v2)); - // separator + Schema v3 = builder.addSchema(3, V3::new); + builder.addFixer(new TraitHolderificationFix(v3)); - Schema v10 = builder.addSchema(10, SAME_NAMESPACED); - builder.addFixer(new AutoOutputTraitFix(v10)); + // separator /* createBlockItemRenameFix(builder, schemaV11, "U238", diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java index b099b9e6747..48c91a5e14f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java @@ -8,6 +8,8 @@ import java.util.Map; +import static com.mojang.datafixers.DSL.*; + public class AutoOutputTraitFix extends DataFix { private static final Map FIELD_RENAMES = Map.of( @@ -25,24 +27,20 @@ public AutoOutputTraitFix(Schema outputSchema) { @Override protected TypeRewriteRule makeRule() { - return this.fixTypeEverywhereTyped("AutoOutputTraitFix", this.getInputSchema().getType(References.BLOCK_ENTITY), typed -> { - return typed.update(DSL.remainderFinder(), remainder -> { - Dynamic traitValue = remainder.emptyMap(); - for (var entry : FIELD_RENAMES.entrySet()) { - String oldName = entry.getKey(); - String newName = entry.getValue(); - - var oldField = remainder.get(oldName).result(); - if (oldField.isPresent()) { - traitValue = traitValue.set(newName, oldField.get()); - remainder = remainder.remove(oldName); - } + return this.fixTypeEverywhereTyped("AutoOutputTraitFix", this.getInputSchema().getType(References.BLOCK_ENTITY), typed -> typed.update(remainderFinder(), dynamic -> { + Dynamic traitValue = dynamic.emptyMap(); + for (var entry : FIELD_RENAMES.entrySet()) { + String oldName = entry.getKey(); + String newName = entry.getValue(); + + var oldField = dynamic.get(oldName).result(); + if (oldField.isPresent()) { + traitValue = traitValue.set(newName, oldField.get()); + dynamic = dynamic.remove(oldName); } - - remainder.set("autoOutput", traitValue); - - return remainder; - }); - }); + } + dynamic.set("autoOutput", traitValue); + return dynamic; + })); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java new file mode 100644 index 00000000000..9db22f37e96 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java @@ -0,0 +1,84 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.mojang.datafixers.DataFix; +import com.mojang.datafixers.OpticFinder; +import com.mojang.datafixers.TypeRewriteRule; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.Type; +import com.mojang.serialization.Dynamic; +import net.minecraft.util.datafix.fixes.References; + +import static com.mojang.datafixers.DSL.remainderFinder; + +public class TraitHolderificationFix extends DataFix { + + public TraitHolderificationFix(Schema outputSchema) { + super(outputSchema, true); + } + + @Override + protected TypeRewriteRule makeRule() { + Type blockEntityIn = this.getInputSchema().getType(References.BLOCK_ENTITY); + Type blockEntityOut = this.getOutputSchema().getType(References.BLOCK_ENTITY); + + OpticFinder batterySlotFinder = blockEntityIn.findField("tag"); + + // spotless:off + return TypeRewriteRule.seq( + this.fixTypeEverywhereTyped("TraitHolderDataFix - autoOutput", blockEntityIn, blockEntityOut, typed -> typed.update(remainderFinder(), TraitHolderificationFix::copyAutoOutputToTraitHolder)), + this.fixTypeEverywhereTyped("TraitHolderDataFix - batterySlot", blockEntityIn, blockEntityOut, typed -> typed.update(remainderFinder(), TraitHolderificationFix::fixBatteryAndCopyToTraitHolder)), + this.fixTypeEverywhereTyped("TraitHolderDataFix - circuitSlot", blockEntityIn, blockEntityOut, typed -> typed.update(remainderFinder(), TraitHolderificationFix::fixCircuitAndCopyToTraitHolder)) + ); + // spotless:on + } + + private static Dynamic addTraitHolderField(Dynamic dynamic) { + var traitHolder = dynamic.get("traitHolder").result(); + if (traitHolder.isEmpty()) { + dynamic = dynamic.set("traitHolder", dynamic.emptyMap()); + } + return dynamic; + } + + private static Dynamic copyAutoOutputToTraitHolder(Dynamic dynamic) { + dynamic = addTraitHolderField(dynamic); + + final var field = dynamic.get("autoOutput").result(); + if (field.isPresent()) { + dynamic = dynamic.update("traitHolder", val -> val.set("autoOutput", field.get())); + } + return dynamic; + } + + private static Dynamic fixBatteryAndCopyToTraitHolder(Dynamic dynamic) { + dynamic = addTraitHolderField(dynamic); + + final var field = dynamic.get("chargerInventory").result(); + if (field.isPresent()) { + Dynamic batterySlot = dynamic.emptyMap() + .set("storage", field.get()); + // move the original battery slot field to the trait's object + dynamic = dynamic.set("batterySlot", batterySlot) + // and also copy it to the trait holder + .update("traitHolder", val -> val.set("batterySlot", batterySlot)); + } + return dynamic; + } + + private static Dynamic fixCircuitAndCopyToTraitHolder(Dynamic dynamic) { + dynamic = addTraitHolderField(dynamic); + + final var field = dynamic.get("circuitInventory").result(); + if (field.isPresent()) { + Dynamic circuitSlot = dynamic.emptyMap() + .set("storage", field.get()); + // move the original battery slot field to the trait's object + dynamic = dynamic.set("circuitSlot", circuitSlot) + // and also copy it to the trait holder + // ...twice, to cover both the 'original' name and what SimpleTieredMachine uses + .update("traitHolder", val -> val.set("circuitSlot", circuitSlot) + .set("circuit", circuitSlot)); + } + return dynamic; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 678bdc21e2e..bd8aa382cb9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -440,7 +440,7 @@ public Map> registerBlockEntities(Schema schema) for (MachineDefinition definition : GTRegistries.MACHINES) { String id = definition.getId().toString(); if (!map.containsKey(id)) { - registerSimple(map, id); + schema.registerSimple(map, id); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java new file mode 100644 index 00000000000..a519946c4bd --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java @@ -0,0 +1,456 @@ +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.GTCEuAPI; +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; +import com.gregtechceu.gtceu.api.machine.MachineDefinition; +import com.gregtechceu.gtceu.api.registry.GTRegistries; +import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.fixes.References; +import net.minecraftforge.fml.loading.LoadingModList; + +import java.util.Map; +import java.util.function.Supplier; + + +import static com.gregtechceu.gtceu.api.GTValues.*; +import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.*; +import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; +import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; +import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; +import static com.mojang.datafixers.DSL.*; + +public class V3 extends AutomaticNamespacedSchema { + + public V3(int versionKey, Schema parent) { + super(versionKey, parent, GTCEu.MOD_ID); + } + + // spotless:off + @Override + public Map> registerBlockEntities(Schema schema) { + Map> map = super.registerBlockEntities(schema); + + final Supplier traitHolder = () -> traitHolder(schema); + + // region steam + final Supplier steamMachine = () -> optionalFields( + "steamTank", notifiableFluidTank(schema), + traitHolder(schema) + ); + final Supplier steamBoiler = () -> optionalFields( + "waterTank", notifiableFluidTank(schema), + steamMachine.get() + ); + registerSteamMachine(schema, map, "steam_solid_boiler", () -> optionalFields( + "fuelHandler", notifiableItemHandler(schema), + "ashHandler", notifiableItemHandler(schema), + steamBoiler.get() + )); + registerSteamMachine(schema, map, "steam_liquid_boiler", () -> optionalFields( + "fuelTank", notifiableFluidTank(schema), + steamBoiler.get() + )); + registerSteamMachine(schema, map, "steam_solar_boiler", steamBoiler); + registerSimpleSteamMachine(schema, map, "extractor"); + registerSimpleSteamMachine(schema, map, "steam_macerator"); + registerSimpleSteamMachine(schema, map, "compressor"); + registerSimpleSteamMachine(schema, map, "forge_hammer"); + registerSimpleSteamMachine(schema, map, "furnace"); + registerSimpleSteamMachine(schema, map, "alloy_smelter"); + registerSimpleSteamMachine(schema, map, "rock_crusher"); + schema.register(map, "steam_miner", () -> optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema), + "steamTank", notifiableFluidTank(schema), + traitHolder(schema) + )); + // endregion + + // region simple + registerForTiers(schema, map, "machine_hull", DSL::remainder, ALL_TIERS); + registerSimpleMachine(schema, map, "electric_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "alloy_smelter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "arc_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "autoclave", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "bender", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "brewery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "canner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "chemical_bath", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "chemical_reactor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "compressor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "cutter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "distillery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "electrolyzer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "electromagnetic_separator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "extractor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "extruder", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "fermenter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "fluid_heater", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "fluid_solidifier", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "forge_hammer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "forming_press", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "lathe", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "scanner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "mixer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "ore_washer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "packer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "polarizer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "laser_engraver", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "sifter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "thermal_centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "wiremill", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "circuit_assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "macerator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gas_collector", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "rock_crusher", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "air_scrubber", LOW_TIERS); + registerSimpleMachine(schema, map, "combustion", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "steam_turbine", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gas_turbine", ELECTRIC_TIERS); + // endregion + + // region electric + final int[] transformerTiers = GTValues.tiersBetween(ULV, GTCEuAPI.isHighTier() ? OpV : UV); + registerForTiers(schema, map, "transformer_1a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "transformer_2a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "transformer_4a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "transformer_16a", DSL::remainder, transformerTiers); + + registerForTiers(schema, map, "1a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "4a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "8a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "16a_energy_converter", DSL::remainder, ALL_TIERS); + + schema.register(map, "long_distance_item_pipeline_endpoint", traitHolder); + schema.register(map, "long_distance_fluid_pipeline_endpoint", traitHolder); + schema.register(map, "long_distance_fluid_pipeline_endpoint", traitHolder); + + final Supplier batteryBuffer = () -> optionalFields( + "batteryInventory", itemHandler(schema), + traitHolder(schema) + ); + registerForTiers(schema, map, "battery_buffer_4x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "battery_buffer_8x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "battery_buffer_16x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "charger_4x", batteryBuffer, ALL_TIERS); + + registerForTiers(schema, map, "pump", () -> optionalFields( + "cache", notifiableFluidTank(schema), + traitHolder(schema) + ), LV, MV, HV, EV); + registerForTiers(schema, map, "fisher", () -> optionalFields( + "cache", notifiableItemHandler(schema), + "baitHandler", notifiableItemHandler(schema), + "chargerInventory", itemHandler(schema), + traitHolder(schema) + ), LV, MV, HV, EV, IV, LuV); + registerForTiers(schema, map, "block_breaker", () -> optionalFields( + "cache", notifiableItemHandler(schema), + "chargerInventory", itemHandler(schema), + traitHolder(schema) + ), LV, MV, HV, EV); + registerSimpleMachine(schema, map, "miner", LV, MV, HV); + registerForTiers(schema, map, "world_accelerator", DSL::remainder, LV, MV, HV, EV, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "item_collector", () -> optionalFields( + "output", notifiableItemHandler(schema), + "chargerInventory", itemHandler(schema), + "filterInventory", itemHandler(schema), + traitHolder(schema) + ), LV, MV, HV, EV); + // endregion + + // region storage + final Supplier itemStorage = () -> optionalFields( + "inventory", notifiableItemHandler(schema), + traitHolder(schema) + ); + registerForTiers(schema, map, "buffer", () -> optionalFields( + "tank", notifiableFluidTank(schema), + itemStorage.get() + ), LV, MV, HV); + schema.register(map, "creative_energy", traitHolder); + schema.register(map, "creative_computation_provider", traitHolder); + + final Supplier quantumChest = () -> optionalFields( + "lockedFluid", GTReferences.FLUID_STACK.in(schema), + "stored", GTReferences.FLUID_STACK.in(schema), + traitHolder(schema) + ); + final Supplier quantumTank = () -> optionalFields( + "lockedItem", itemHandler(schema), + "stored", References.ITEM_STACK.in(schema), + traitHolder(schema) + ); + schema.register(map, "creative_chest", quantumChest); + schema.register(map, "creative_tank", quantumTank); + registerForTiers(schema, map, "super_chest", quantumChest, LOW_TIERS); + registerForTiers(schema, map, "quantum_chest", quantumChest, HIGH_TIERS); + registerForTiers(schema, map, "super_tank", quantumTank, LOW_TIERS); + registerForTiers(schema, map, "quantum_tank", quantumTank, HIGH_TIERS); + + schema.register(map, "wood_crate", itemStorage); + schema.register(map, "bronze_crate", itemStorage); + schema.register(map, "steel_crate", itemStorage); + schema.register(map, "aluminium_crate", itemStorage); + schema.register(map, "stainless_steel_crate", itemStorage); + schema.register(map, "titanium_crate", itemStorage); + schema.register(map, "tungsten_steel_crate", itemStorage); + + final Supplier drum = () -> optionalFields( + "stored", GTReferences.FLUID_STACK.in(schema), + traitHolder(schema) + ); + schema.register(map, "wood_drum", drum); + schema.register(map, "bronze_drum", drum); + schema.register(map, "steel_drum", drum); + schema.register(map, "aluminium_drum", drum); + schema.register(map, "stainless_steel_drum", drum); + schema.register(map, "gold_drum", drum); + schema.register(map, "titanium_drum", drum); + schema.register(map, "tungsten_steel_drum", drum); + // endregion + + // region part + final Supplier itemBus = () -> optionalFields( + "circuitSlot", notifiableItemHandler(schema), + itemStorage.get() + ); + registerForTiers(schema, map, "input_bus", itemBus, ALL_TIERS); + registerForTiers(schema, map, "output_bus", itemBus, ALL_TIERS); + final Supplier fluidHatch = () -> optionalFields( + "tank", notifiableFluidTank(schema), + "circuitSlot", notifiableItemHandler(schema), + traitHolder(schema) + ); + registerForTiers(schema, map, "input_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "input_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "input_hatch_9x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "output_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "output_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "output_hatch_9x", fluidHatch, ALL_TIERS); + + registerForTiers(schema, map, "energy_input_hatch", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_4a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_4a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_16a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_16a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "substation_input_hatch_64a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "substation_output_hatch_64a", DSL::remainder, ALL_TIERS); + + registerForTiers(schema, map, "muffler_hatch", itemStorage, ELECTRIC_TIERS); + + schema.register(map, "steam_input_bus", itemBus); + schema.register(map, "steam_output_bus", itemBus); + schema.register(map, "steam_input_hatch", fluidHatch); + schema.register(map, "coke_oven_hatch", traitHolder); + schema.register(map, "pump_hatch", fluidHatch); + final Supplier maintenanceHatch = () -> optionalFields( + "itemStackHandler", notifiableItemHandler(schema), + traitHolder(schema) + ); + schema.register(map, "maintenance_hatch", maintenanceHatch); + schema.register(map, "configurable_maintenance_hatch", maintenanceHatch); + schema.register(map, "cleaning_maintenance_hatch", maintenanceHatch); + schema.register(map, "auto_maintenance_hatch", maintenanceHatch); + + registerForTiers(schema, map, "item_passthrough_hatch", itemBus, ELECTRIC_TIERS); + registerForTiers(schema, map, "fluid_passthrough_hatch", fluidHatch, ELECTRIC_TIERS); + schema.register(map, "reservoir_hatch", fluidHatch); + final Supplier dualHatch = () -> optionalFields( + "tank", notifiableFluidTank(schema), + itemBus.get() + ); + registerForTiers(schema, map, "dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); + registerForTiers(schema, map, "dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); + + registerForTiers(schema, map, "diode", DSL::remainder, ELECTRIC_TIERS); + registerForTiers(schema, map, "rotor_holder", () -> optionalFields( + "rotorMaterial", GTReferences.MATERIAL_NAME.in(schema), + itemStorage.get() + ), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); + + registerForTiers(schema, map, "256a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "256a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + + schema.register(map, "monitor", traitHolder); + schema.register(map, "advanced_monitor", traitHolder); + // endregion + + // region multiblock + schema.register(map, "bronze_large_boiler", traitHolder); + schema.register(map, "steel_large_boiler", traitHolder); + schema.register(map, "titanium_large_boiler", traitHolder); + schema.register(map, "tungstensteel_large_boiler", traitHolder); + + final Supplier primitiveMachine = () -> optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema), + "importFluids", notifiableFluidTank(schema), + "exportFluids", notifiableFluidTank(schema), + traitHolder(schema) + ); + schema.register(map, "coke_oven", primitiveMachine); + schema.register(map, "primitive_blast_furnace", primitiveMachine); + + schema.register(map, "electric_blast_furnace", traitHolder); + schema.register(map, "large_chemical_reactor", traitHolder); + schema.register(map, "implosion_compressor", traitHolder); + schema.register(map, "pyrolyse_oven", traitHolder); + schema.register(map, "multi_smelter", traitHolder); + schema.register(map, "cracker", traitHolder); + schema.register(map, "distillation_tower", traitHolder); + schema.register(map, "vacuum_freezer", traitHolder); + schema.register(map, "assembly_line", traitHolder); + schema.register(map, "primitive_pump", traitHolder); + schema.register(map, "steam_grinder", traitHolder); + schema.register(map, "steam_oven", traitHolder); + registerForTiers(schema, map, "fusion_reactor", DSL::remainder, LuV, ZPM, UV); + registerForTiers(schema, map, "fluid_drilling_rig", DSL::remainder, MV, HV, EV); + registerForTiers(schema, map, "large_miner", DSL::remainder, EV, IV, LuV); + schema.register(map, "cleanroom", traitHolder); + schema.register(map, "large_combustion_engine", traitHolder); + schema.register(map, "extreme_combustion_engine", traitHolder); + schema.register(map, "steam_large_turbine", traitHolder); + schema.register(map, "gas_large_turbine", traitHolder); + schema.register(map, "plasma_large_turbine", traitHolder); + schema.register(map, "active_transformer", traitHolder); + schema.register(map, "power_substation", traitHolder); + registerForTiers(schema, map, "bedrock_ore_miner", DSL::remainder, MV, HV, EV); + schema.register(map, "wooden_tank_valve", traitHolder); + schema.register(map, "wooden_multiblock_tank", traitHolder); + schema.register(map, "bronze_tank_valve", traitHolder); + schema.register(map, "bronze_multiblock_tank", traitHolder); + schema.register(map, "steel_tank_valve", traitHolder); + schema.register(map, "steel_multiblock_tank", traitHolder); + + schema.register(map, "central_monitor", traitHolder); + + // region GCYM + registerForTiers(schema, map, "parallel_hatch", DSL::remainder, IV, LuV, ZPM, UV); + schema.register(map, "large_maceration_tower", traitHolder); + schema.register(map, "large_chemical_bath", traitHolder); + schema.register(map, "large_centrifuge", traitHolder); + schema.register(map, "large_mixer", traitHolder); + schema.register(map, "large_electrolyzer", traitHolder); + schema.register(map, "large_electromagnet", traitHolder); + schema.register(map, "large_packer", traitHolder); + schema.register(map, "large_assembler", traitHolder); + schema.register(map, "large_circuit_assembler", traitHolder); + schema.register(map, "large_arc_smelter", traitHolder); + schema.register(map, "large_engraving_laser", traitHolder); + schema.register(map, "large_sifting_funnel", traitHolder); + schema.register(map, "alloy_blast_smelter", traitHolder); + schema.register(map, "large_autoclave", traitHolder); + schema.register(map, "large_material_press", traitHolder); + schema.register(map, "large_brewer", traitHolder); + schema.register(map, "large_cutter", traitHolder); + schema.register(map, "large_extractor", traitHolder); + schema.register(map, "large_extruder", traitHolder); + schema.register(map, "large_solidifier", traitHolder); + schema.register(map, "large_wiremill", traitHolder); + schema.register(map, "mega_blast_furnace", traitHolder); // TODO add fixer to rename to "rotary_hearth_furnace" + schema.register(map, "mega_vacuum_freezer", traitHolder); // TODO add fixer to rename to "bulk_blast_chiller" + // endregion + // endregion + + // region research + schema.register(map, "research_station", traitHolder); + schema.register(map, "object_holder", () -> optionalFields( + "heldItems", notifiableItemHandler(schema), + traitHolder(schema) + )); + schema.register(map, "data_bank", traitHolder); + schema.register(map, "network_switch", traitHolder); + schema.register(map, "high_performance_computation_array", traitHolder); + schema.register(map, "computation_transmitter_hatch", traitHolder); + schema.register(map, "computation_receiver_hatch", traitHolder); + schema.register(map, "data_transmitter_hatch", traitHolder); + schema.register(map, "data_receiver_hatch", traitHolder); + final Supplier dataAccessHatch = () -> optionalFields( + "importItems", notifiableItemHandler(schema), + traitHolder(schema) + ); + schema.register(map, "basic_data_access_hatch", dataAccessHatch); + schema.register(map, "data_access_hatch", dataAccessHatch); + schema.register(map, "advanced_data_access_hatch", dataAccessHatch); + schema.register(map, "creative_data_access_hatch", dataAccessHatch); + schema.register(map, "hpca_empty_component", traitHolder); + schema.register(map, "hpca_computation_component", traitHolder); + schema.register(map, "hpca_advanced_computation_component", traitHolder); + schema.register(map, "hpca_heat_sink_component", traitHolder); + schema.register(map, "hpca_active_cooler_component", traitHolder); + schema.register(map, "hpca_bridge_component", traitHolder); + // endregion + + // region AE2 compat + if (LoadingModList.get().getModFileById(MODID_APPENG) != null) { // only add these if AE2 is loaded + schema.register(map, "me_input_bus", itemBus); + schema.register(map, "me_stocking_input_bus", itemBus); + schema.register(map, "me_output_bus", itemBus); + schema.register(map, "me_input_hatch", fluidHatch); + schema.register(map, "me_stocking_input_hatch", fluidHatch); + schema.register(map, "me_output_hatch", fluidHatch); + schema.register(map, "me_pattern_buffer", () -> optionalFields( + "patternInventory", itemHandler(schema), + "shareInventory", notifiableItemHandler(schema), + "shareTank", notifiableFluidTank(schema), + "internalInventory", list( + fields( + "inventory", list(References.ITEM_STACK.in(schema)), + "fluidInventory", list(GTReferences.FLUID_STACK.in(schema)) + ) + ), + itemBus.get() + )); + schema.register(map, "me_pattern_buffer_proxy", traitHolder); + } + // endregion + + // register all remaining machines as ""plain"" types + // IDEK if this works because the registry might not be loaded at this point... oh well. + for (MachineDefinition definition : GTRegistries.MACHINES) { + String id = definition.getId().toString(); + if (!map.containsKey(id)) { + schema.register(map, id, () -> traitHolder(schema)); + } + } + + return map; + } + + protected static void registerSimpleMachine(Schema schema, Map> map, String name, int... tiers) { + registerForTiers(schema, map, name, () -> optionalFields( + "importItems", notifiableItemHandler(schema), + "exportItems", notifiableItemHandler(schema), + "importFluids", notifiableFluidTank(schema), + "exportFluids", notifiableFluidTank(schema), + traitHolder(schema) + ), tiers); + } + + protected static TypeTemplate traitHolder(Schema schema) { + return optionalFields( + "traitHolder", optionalFields( + // TODO I'm not sure if this is all of the item/fluid fields? - add missing ones if not + "batterySlot", notifiableItemHandler(schema), + or( + optionalFields("circuit", notifiableItemHandler(schema)), + optionalFields("circuitSlot", notifiableItemHandler(schema)) + ) + ) + ); + } + // spotless:on +} diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java index 428e1b23d5f..c6df0a04729 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java @@ -1,83 +1,14 @@ package com.gregtechceu.gtceu.utils.data; -import com.gregtechceu.gtceu.api.machine.MetaMachine; -import com.gregtechceu.gtceu.api.machine.trait.MachineTrait; -import com.gregtechceu.gtceu.common.machine.trait.AutoOutputTrait; -import com.gregtechceu.gtceu.common.machine.trait.BatterySlotTrait; -import com.gregtechceu.gtceu.common.machine.trait.ProgrammableCircuitSlotTrait; - import net.minecraft.core.Direction; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.Tag; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import java.util.Objects; - // TODO convert into datafixers @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TagCompatibilityFixer { - public static void putTraitTag(MetaMachine machine, CompoundTag machineTag, - Class type, String defaultName, - CompoundTag data) { - var traits = machine.getTraits(type); - - if (traits.size() != 1 || traits.get(0).getTraitName() == null) { - machineTag.put(defaultName, data); - return; - } - - var persistent = traits.get(0).getTraitName(); - machineTag.getCompound("traitHolder").put(Objects.requireNonNull(persistent), data); - } - - public static void fixTraitTags(MetaMachine machine, CompoundTag tag) { - if (!tag.contains("traitHolder")) { - tag.put("traitHolder", new CompoundTag()); - - fixBatterySlotTag(machine, tag); - fixProgrammedCircutTag(machine, tag); - fixMachineAutoOutputTag(machine, tag); - } - } - - public static void fixBatterySlotTag(MetaMachine machine, CompoundTag tag) { - if (tag.contains("chargerInventory")) { - var newTag = new CompoundTag(); - newTag.put("storage", Objects.requireNonNull(tag.get("chargerInventory"))); - - putTraitTag(machine, tag, BatterySlotTrait.class, "batterySlot", newTag); - } - } - - public static void fixProgrammedCircutTag(MetaMachine machine, CompoundTag tag) { - if (tag.contains("circuitInventory")) { - var oldData = tag.getCompound("circuitInventory"); - - putTraitTag(machine, tag, ProgrammableCircuitSlotTrait.class, "circuitSlot", oldData); - } - } - - public static void fixMachineAutoOutputTag(MetaMachine machine, CompoundTag machineTag) { - var outputTag = new CompoundTag(); - Tag itemOutputDirection = machineTag.get("outputFacingItems"); - Tag fluidOutputDirection = machineTag.get("outputFacingFluids"); - Tag autoOutputItems = machineTag.get("autoOutputItems"); - Tag autoOutputFluids = machineTag.get("autoOutputFluids"); - Tag allowInputItems = machineTag.get("allowInputFromOutputSideItems"); - Tag allowInputFluids = machineTag.get("allowInputFromOutputSideFluids"); - if (itemOutputDirection != null) outputTag.put("itemOutputDirection", itemOutputDirection); - if (fluidOutputDirection != null) outputTag.put("fluidOutputDirection", fluidOutputDirection); - if (autoOutputItems != null) outputTag.put("autoOutputItems", autoOutputItems); - if (autoOutputFluids != null) outputTag.put("autoOutputFluids", autoOutputFluids); - if (allowInputItems != null) outputTag.put("allowItemInputFromOutputSide", allowInputItems); - if (allowInputFluids != null) outputTag.put("allowFluidInputFromOutputSide", allowInputFluids); - - putTraitTag(machine, machineTag, AutoOutputTrait.class, "autoOutput", outputTag); - } - public static Direction fixUpwardsFacing(Direction frontfacing, Direction upwardsFacing) { Direction newUpwards; switch (frontfacing) { From d28822bedf9001be3233fd0f5c421c8b256315c0 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 20:11:43 +0300 Subject: [PATCH 26/83] Use types in trait holder-ification fix (I think this is required?) --- .../fixes/TraitHolderificationFix.java | 118 ++++++++++-------- 1 file changed, 65 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java index 9db22f37e96..201778b6b83 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java @@ -1,14 +1,16 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; -import com.mojang.datafixers.DataFix; -import com.mojang.datafixers.OpticFinder; -import com.mojang.datafixers.TypeRewriteRule; +import com.mojang.datafixers.*; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; -import com.mojang.serialization.Dynamic; +import com.mojang.datafixers.util.Either; +import com.mojang.datafixers.util.Unit; import net.minecraft.util.datafix.fixes.References; -import static com.mojang.datafixers.DSL.remainderFinder; +import java.util.function.Function; + +import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.optionalFields; +import static com.mojang.datafixers.DSL.*; public class TraitHolderificationFix extends DataFix { @@ -18,67 +20,77 @@ public TraitHolderificationFix(Schema outputSchema) { @Override protected TypeRewriteRule makeRule() { + // spotless:off + Schema out = this.getOutputSchema(); Type blockEntityIn = this.getInputSchema().getType(References.BLOCK_ENTITY); - Type blockEntityOut = this.getOutputSchema().getType(References.BLOCK_ENTITY); + Type blockEntityOut = out.getType(References.BLOCK_ENTITY); - OpticFinder batterySlotFinder = blockEntityIn.findField("tag"); + var itemHandlerType = field("Items", list(out.getTypeRaw(References.ITEM_STACK))); + var wrappedItemHandlerType = field("storage", itemHandlerType); + var oldType = optionalFields( + "chargerInventory", itemHandlerType, + "circuitInventory", wrappedItemHandlerType + ); - // spotless:off - return TypeRewriteRule.seq( - this.fixTypeEverywhereTyped("TraitHolderDataFix - autoOutput", blockEntityIn, blockEntityOut, typed -> typed.update(remainderFinder(), TraitHolderificationFix::copyAutoOutputToTraitHolder)), - this.fixTypeEverywhereTyped("TraitHolderDataFix - batterySlot", blockEntityIn, blockEntityOut, typed -> typed.update(remainderFinder(), TraitHolderificationFix::fixBatteryAndCopyToTraitHolder)), - this.fixTypeEverywhereTyped("TraitHolderDataFix - circuitSlot", blockEntityIn, blockEntityOut, typed -> typed.update(remainderFinder(), TraitHolderificationFix::fixCircuitAndCopyToTraitHolder)) + var traitHolderType = optionalFields( + "batterySlot", wrappedItemHandlerType, + or( + optionalFields("circuit", wrappedItemHandlerType), + optionalFields("circuitSlot", wrappedItemHandlerType) + ) ); + var newType = optionalFields("traitHolder", traitHolderType); + + return this.fixTypeEverywhereTyped("TraitHolderDataFix", blockEntityIn, blockEntityOut, typed -> { + // move the auto output trait first + typed = typed.update(remainderFinder(), dynamic -> { + final var field = dynamic.get("autoOutput").result(); + if (field.isPresent()) { + dynamic = dynamic.update("traitHolder", val -> val.set("autoOutput", field.get())); + } + return dynamic; + }); + + // then rename the original fields + typed = moveItemHandlerField(typed, "chargerInventory", "batterySlot"); + typed = moveItemHandlerField(typed, "circuitInventory", "circuitSlot"); + + // then copy the renamed fields into the `traitHolder` field + typed = copyFieldToTraitHolder(typed, "batterySlot"); + typed = copyFieldToTraitHolder(typed, "circuitSlot", "circuit"); + typed = copyFieldToTraitHolder(typed, "circuitSlot"); // do circuit slot twice with different names + + return typed; + }); // spotless:on } - private static Dynamic addTraitHolderField(Dynamic dynamic) { - var traitHolder = dynamic.get("traitHolder").result(); - if (traitHolder.isEmpty()) { - dynamic = dynamic.set("traitHolder", dynamic.emptyMap()); - } - return dynamic; + private static Typed moveItemHandlerField(Typed typed, String oldName, String newName) { + return moveItemHandlerFieldHelper(typed, oldName, newName, typed.getType().findFieldType(oldName)) + .update(DSL.remainderFinder(), dynamic -> dynamic.remove(oldName)); } - private static Dynamic copyAutoOutputToTraitHolder(Dynamic dynamic) { - dynamic = addTraitHolderField(dynamic); + private static Typed moveItemHandlerFieldHelper(Typed typed, String oldName, String newName, + Type fieldType) { + Type> type = DSL.optional(DSL.field(oldName, fieldType)); + Type> type1 = optional(field(newName, field("storage", fieldType))); - final var field = dynamic.get("autoOutput").result(); - if (field.isPresent()) { - dynamic = dynamic.update("traitHolder", val -> val.set("autoOutput", field.get())); - } - return dynamic; + return typed.update(type.finder(), type1, Function.identity()); } - private static Dynamic fixBatteryAndCopyToTraitHolder(Dynamic dynamic) { - dynamic = addTraitHolderField(dynamic); - - final var field = dynamic.get("chargerInventory").result(); - if (field.isPresent()) { - Dynamic batterySlot = dynamic.emptyMap() - .set("storage", field.get()); - // move the original battery slot field to the trait's object - dynamic = dynamic.set("batterySlot", batterySlot) - // and also copy it to the trait holder - .update("traitHolder", val -> val.set("batterySlot", batterySlot)); - } - return dynamic; + private static Typed copyFieldToTraitHolder(Typed typed, String name) { + return copyFieldToTraitHolder(typed, name, name); } - private static Dynamic fixCircuitAndCopyToTraitHolder(Dynamic dynamic) { - dynamic = addTraitHolderField(dynamic); - - final var field = dynamic.get("circuitInventory").result(); - if (field.isPresent()) { - Dynamic circuitSlot = dynamic.emptyMap() - .set("storage", field.get()); - // move the original battery slot field to the trait's object - dynamic = dynamic.set("circuitSlot", circuitSlot) - // and also copy it to the trait holder - // ...twice, to cover both the 'original' name and what SimpleTieredMachine uses - .update("traitHolder", val -> val.set("circuitSlot", circuitSlot) - .set("circuit", circuitSlot)); - } - return dynamic; + private static Typed copyFieldToTraitHolder(Typed typed, String oldName, String newName) { + return copyFieldToTraitHolderHelper(typed, oldName, newName, typed.getType().findFieldType(oldName)); + } + + private static Typed copyFieldToTraitHolderHelper(Typed typed, String oldName, String newName, + Type fieldType) { + Type> type = DSL.optional(DSL.field(oldName, fieldType)); + Type, Unit>> type1 = optional(field("traitHolder", optional(field(newName, fieldType)))); + + return typed.update(type.finder(), type1, field -> Either.left(field)); } } From d00add33a98dddbb303f76126b55a3c51499fa79 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 20:12:20 +0300 Subject: [PATCH 27/83] delete stuff that didnt work --- .../fixes/TraitHolderificationFix.java | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java index 201778b6b83..e674d609513 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java @@ -9,7 +9,6 @@ import java.util.function.Function; -import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.optionalFields; import static com.mojang.datafixers.DSL.*; public class TraitHolderificationFix extends DataFix { @@ -20,26 +19,8 @@ public TraitHolderificationFix(Schema outputSchema) { @Override protected TypeRewriteRule makeRule() { - // spotless:off - Schema out = this.getOutputSchema(); Type blockEntityIn = this.getInputSchema().getType(References.BLOCK_ENTITY); - Type blockEntityOut = out.getType(References.BLOCK_ENTITY); - - var itemHandlerType = field("Items", list(out.getTypeRaw(References.ITEM_STACK))); - var wrappedItemHandlerType = field("storage", itemHandlerType); - var oldType = optionalFields( - "chargerInventory", itemHandlerType, - "circuitInventory", wrappedItemHandlerType - ); - - var traitHolderType = optionalFields( - "batterySlot", wrappedItemHandlerType, - or( - optionalFields("circuit", wrappedItemHandlerType), - optionalFields("circuitSlot", wrappedItemHandlerType) - ) - ); - var newType = optionalFields("traitHolder", traitHolderType); + Type blockEntityOut = this.getOutputSchema().getType(References.BLOCK_ENTITY); return this.fixTypeEverywhereTyped("TraitHolderDataFix", blockEntityIn, blockEntityOut, typed -> { // move the auto output trait first @@ -62,7 +43,6 @@ protected TypeRewriteRule makeRule() { return typed; }); - // spotless:on } private static Typed moveItemHandlerField(Typed typed, String oldName, String newName) { From b39e9dc87e4c74716375685574f7a3216a9495ac Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 20:52:15 +0300 Subject: [PATCH 28/83] Upwards facing property fixer --- .../gtceu/api/machine/MetaMachine.java | 19 ---- .../NBTSerializableTransformer.java | 1 - .../collections/ListTransformer.java | 1 - .../collections/ObjectArrayTransformer.java | 1 - .../fixes/UpwardsFacingPropertyFix.java | 101 ++++++++++++++++++ .../utils/data/TagCompatibilityFixer.java | 83 -------------- 6 files changed, 101 insertions(+), 105 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java 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 e02f5682781..7846830310b 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(); @@ -169,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/NBTSerializableTransformer.java b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java index cff03ee9f1a..e26459c2832 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/sync_system/data_transformers/NBTSerializableTransformer.java @@ -1,7 +1,6 @@ package com.gregtechceu.gtceu.api.sync_system.data_transformers; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.utils.data.TagCompatibilityFixer; import net.minecraft.nbt.Tag; import net.minecraftforge.common.util.INBTSerializable; 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 d948b058432..286db84e0a6 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; 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 0873f5efa3f..0978f58b51e 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; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java new file mode 100644 index 00000000000..47ccb4af412 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java @@ -0,0 +1,101 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.mojang.datafixers.DSL; +import com.mojang.datafixers.DataFix; +import com.mojang.datafixers.TypeRewriteRule; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.serialization.Dynamic; +import com.mojang.serialization.OptionalDynamic; +import net.minecraft.core.Direction; +import net.minecraft.util.datafix.fixes.References; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +public class UpwardsFacingPropertyFix extends DataFix { + + private static final Logger LOGGER = LogManager.getLogger("GTCEu/DFU/UpwardsFacingPropertyFix"); + + public UpwardsFacingPropertyFix(Schema outputSchema) { + super(outputSchema, false); + } + + @Override + protected TypeRewriteRule makeRule() { + return this.fixTypeEverywhereTyped("UpwardsFacingPropertyFix", this.getInputSchema().getType(References.BLOCK_STATE), + typed -> typed.update(DSL.remainderFinder(), UpwardsFacingPropertyFix::upgradeBlockStateTag)); + } + + private static Dynamic fixUpwardsFacingProperty(Direction frontFacing, Dynamic property) { + // we can ignore the remainder from this because it'll always be empty + // (Direction.CODEC only accepts strings and those can't have 'unread'/leftover fields) + Optional upwardsFacingOpt = property.read(Direction.CODEC).result(); + if (upwardsFacingOpt.isEmpty()) { + return property; + } + Direction upwardsFacing = upwardsFacingOpt.get(); + upwardsFacing = fixUpwardsFacing(frontFacing, upwardsFacing); + + return Direction.CODEC.encodeStart(property.getOps(), upwardsFacing) + .resultOrPartial(LOGGER::error) + .map(value -> new Dynamic<>(property.getOps(), value)) + .orElse(property); + } + + private static Dynamic upgradeBlockStateTag(Dynamic blockState) { + return blockState.update("Properties", properties -> { + OptionalDynamic frontFacingProperty = properties.get("facing"); + Optional frontFacingOpt = frontFacingProperty.read(Direction.CODEC) + .resultOrPartial(LOGGER::error); + if (frontFacingOpt.isEmpty()) { + return properties; + } + Direction frontFacing = frontFacingOpt.get(); + + return properties.update("upwards_facing", property -> fixUpwardsFacingProperty(frontFacing, property)); + }); + } + + public static Direction fixUpwardsFacing(Direction frontFacing, @Nullable Direction upwardsFacing) { + if (upwardsFacing == null) { + // needed if previous machine did not have an upwards facing + if (frontFacing.getAxis() == Direction.Axis.Y) { + // if the machine is facing up or down, make its upward face default to NORTH + return Direction.NORTH; + } else { + // in all other cases, default to UP + return Direction.UP; + } + } + + return switch (frontFacing) { + case NORTH -> switch (upwardsFacing) { + case EAST -> Direction.WEST; + case SOUTH -> Direction.DOWN; + case WEST -> Direction.EAST; + case NORTH, default -> Direction.UP; + }; + case EAST -> switch (upwardsFacing) { + case EAST -> Direction.NORTH; + case SOUTH -> Direction.DOWN; + case WEST -> Direction.SOUTH; + case NORTH, default -> Direction.UP; + }; + case SOUTH -> switch (upwardsFacing) { + case EAST -> Direction.EAST; + case SOUTH -> Direction.DOWN; + case WEST -> Direction.WEST; + case NORTH, default -> Direction.UP; + }; + case WEST -> switch (upwardsFacing) { + case EAST -> Direction.SOUTH; + case SOUTH -> Direction.DOWN; + case WEST -> Direction.NORTH; + case NORTH, default -> Direction.UP; + }; + case UP, DOWN -> upwardsFacing; + }; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java b/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java deleted file mode 100644 index c6df0a04729..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/utils/data/TagCompatibilityFixer.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.gregtechceu.gtceu.utils.data; - -import net.minecraft.core.Direction; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -// TODO convert into datafixers -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public final class TagCompatibilityFixer { - - public static Direction fixUpwardsFacing(Direction frontfacing, Direction upwardsFacing) { - Direction newUpwards; - switch (frontfacing) { - case NORTH: { - if (upwardsFacing == Direction.NORTH) { - newUpwards = Direction.UP; - } else if (upwardsFacing == Direction.EAST) { - newUpwards = Direction.WEST; - } else if (upwardsFacing == Direction.SOUTH) { - newUpwards = Direction.DOWN; - } else if (upwardsFacing == Direction.WEST) { - newUpwards = Direction.EAST; - } else { - newUpwards = Direction.UP; - } - break; - } - case EAST: { - if (upwardsFacing == Direction.NORTH) { - newUpwards = Direction.UP; - } else if (upwardsFacing == Direction.EAST) { - newUpwards = Direction.NORTH; - } else if (upwardsFacing == Direction.SOUTH) { - newUpwards = Direction.DOWN; - } else if (upwardsFacing == Direction.WEST) { - newUpwards = Direction.SOUTH; - } else { - newUpwards = Direction.UP; - } - break; - } - case SOUTH: { - if (upwardsFacing == Direction.NORTH) { - newUpwards = Direction.UP; - } else if (upwardsFacing == Direction.EAST) { - newUpwards = Direction.EAST; - } else if (upwardsFacing == Direction.SOUTH) { - newUpwards = Direction.DOWN; - } else if (upwardsFacing == Direction.WEST) { - newUpwards = Direction.WEST; - } else { - newUpwards = Direction.UP; - } - break; - } - case WEST: { - if (upwardsFacing == Direction.NORTH) { - newUpwards = Direction.UP; - } else if (upwardsFacing == Direction.EAST) { - newUpwards = Direction.SOUTH; - } else if (upwardsFacing == Direction.SOUTH) { - newUpwards = Direction.DOWN; - } else if (upwardsFacing == Direction.WEST) { - newUpwards = Direction.NORTH; - } else { - newUpwards = Direction.UP; - } - break; - } - case DOWN: - case UP: - default: { - newUpwards = upwardsFacing; - // needed if previous machine did not have an upwards facing - if (upwardsFacing == null) { - newUpwards = Direction.NORTH; - } - } - } - return newUpwards; - } -} From f4f524e4fb87d01337e3303648e5a5f49c7b157b Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 20:57:47 +0300 Subject: [PATCH 29/83] Reorder fixes so we can insert UpwardsFacingPropertyFix into the correct spot --- .../gtceu/common/data/datafixer/GTDataFixers.java | 11 +++++++++-- .../common/datafixer/schemas/{V3.java => V4.java} | 8 ++++---- 2 files changed, 13 insertions(+), 6 deletions(-) rename src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/{V3.java => V4.java} (99%) 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 index ea894ce1906..49216b27efc 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -127,8 +127,15 @@ public static void addFixers(DataFixerBuilder builder) { builder.addFixer(new LDLibPayloadWrapperRemovalFix(v2)); builder.addFixer(new AutoOutputTraitFix(v2)); - Schema v3 = builder.addSchema(3, V3::new); - builder.addFixer(new TraitHolderificationFix(v3)); + // separator + + Schema v3 = builder.addSchema(3, SAME_NAMESPACED); + builder.addFixer(new UpwardsFacingPropertyFix(v3)); + + // separator + + Schema v4 = builder.addSchema(4, V4::new); + builder.addFixer(new TraitHolderificationFix(v4)); // separator diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java rename to src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java index a519946c4bd..4c6aaa535cb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java @@ -24,9 +24,9 @@ import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; import static com.mojang.datafixers.DSL.*; -public class V3 extends AutomaticNamespacedSchema { +public class V4 extends AutomaticNamespacedSchema { - public V3(int versionKey, Schema parent) { + public V4(int versionKey, Schema parent) { super(versionKey, parent, GTCEu.MOD_ID); } @@ -360,8 +360,8 @@ public Map> registerBlockEntities(Schema schema) schema.register(map, "large_extruder", traitHolder); schema.register(map, "large_solidifier", traitHolder); schema.register(map, "large_wiremill", traitHolder); - schema.register(map, "mega_blast_furnace", traitHolder); // TODO add fixer to rename to "rotary_hearth_furnace" - schema.register(map, "mega_vacuum_freezer", traitHolder); // TODO add fixer to rename to "bulk_blast_chiller" + schema.register(map, "mega_blast_furnace", traitHolder); + schema.register(map, "mega_vacuum_freezer", traitHolder); // endregion // endregion From 03b2528d5b2b5289cb4c1c7b974c9e4931041545 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 21:09:48 +0300 Subject: [PATCH 30/83] touch up the commented-out "future" rename fixes --- .../common/data/datafixer/GTDataFixers.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) 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 index 49216b27efc..ae0db29c38e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -106,7 +106,7 @@ public static void addFixers(DataFixerBuilder builder) { createBlockItemRenameFix(builder, v1, "Rename RTM Alloy Coil Block", createRenamer("tungstensteel_coil_block", "rtm_alloy_coil_block")); - builder.addFixer(ItemRenameFix.create(v1, "Rename Advanced Nanomuscle Chestplate", + builder.addFixer(ItemRenameFix.create(v1, "Fix Advanced Nanomuscle Chestplate name", createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); createBlockItemRenameFix(builder, v1, "Rename Palladium Substation Casing", @@ -139,19 +139,16 @@ public static void addFixers(DataFixerBuilder builder) { // separator - /* - createBlockItemRenameFix(builder, schemaV11, "U238", - createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); - createBlockItemRenameFix(builder, schemaV11, "Pu239", - createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); - createBlockItemRenameFix(builder, schemaV11, "Red Granite", - createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); - createBlockItemRenameFix(builder, schemaV11, "Tungstensteel", - createRenamer(Pattern.compile("gtceu:(.*)tungstensteel"), "gtceu:$1tungsten_steel")); - - createBlockItemRenameFix(builder, schemaV11, "Raw Oil", - createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); - */ + // Schema v10 = builder.addSchema(10, SAME_NAMESPACED); + // createBlockItemRenameFix(builder, v10, "U238", + // createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); + // createBlockItemRenameFix(builder, v10, "Pu239", + // createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); + // createBlockItemRenameFix(builder, v10, "Red Granite", + // createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); + // + // createBlockItemRenameFix(builder, v10, "Oil Variants", + // createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, From f0c19c885f7bc64bc2cbf2b97db52f093a8f1789 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 21:22:34 +0300 Subject: [PATCH 31/83] "pattern cases in switch statements is a preview feature." --- .../datafixer/fixes/UpwardsFacingPropertyFix.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java index 47ccb4af412..3f9c7bb5a22 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java @@ -72,28 +72,32 @@ public static Direction fixUpwardsFacing(Direction frontFacing, @Nullable Direct return switch (frontFacing) { case NORTH -> switch (upwardsFacing) { + case NORTH -> Direction.UP; case EAST -> Direction.WEST; case SOUTH -> Direction.DOWN; case WEST -> Direction.EAST; - case NORTH, default -> Direction.UP; + default -> Direction.UP; }; case EAST -> switch (upwardsFacing) { + case NORTH -> Direction.UP; case EAST -> Direction.NORTH; case SOUTH -> Direction.DOWN; case WEST -> Direction.SOUTH; - case NORTH, default -> Direction.UP; + default -> Direction.UP; }; case SOUTH -> switch (upwardsFacing) { + case NORTH -> Direction.UP; case EAST -> Direction.EAST; case SOUTH -> Direction.DOWN; case WEST -> Direction.WEST; - case NORTH, default -> Direction.UP; + default -> Direction.UP; }; case WEST -> switch (upwardsFacing) { + case NORTH -> Direction.UP; case EAST -> Direction.SOUTH; case SOUTH -> Direction.DOWN; case WEST -> Direction.NORTH; - case NORTH, default -> Direction.UP; + default -> Direction.UP; }; case UP, DOWN -> upwardsFacing; }; From 1f478a5a57c495d9f1ae26998c4c6a49fe5627fb Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 21:25:37 +0300 Subject: [PATCH 32/83] spotless + datagen --- .../resources/assets/gtceu/lang/en_ud.json | 1 + .../resources/assets/gtceu/lang/en_us.json | 1 + .../java/com/gregtechceu/gtceu/GTCEu.java | 4 +- .../gtceu/api/datafixer/DataFixHelper.java | 9 ++-- .../gtceu/api/datafixer/LazyDataFixer.java | 8 +-- .../api/datafixer/fixes/ToolBehaviorFix.java | 3 +- .../schemas/AutomaticNamespacedSchema.java | 4 +- .../gtceu/common/CommonEventListener.java | 5 -- .../gregtechceu/gtceu/common/CommonProxy.java | 2 +- .../common/data/datafixer/GTDataFixers.java | 17 ++++--- .../common/data/datafixer/GTReferences.java | 3 +- .../datafixer/fixes/AutoOutputTraitFix.java | 34 ++++++------- .../fixes/LDLibPayloadWrapperRemovalFix.java | 50 ++++++++++--------- .../fixes/TraitHolderificationFix.java | 3 +- .../fixes/UpwardsFacingPropertyFix.java | 8 +-- .../gtceu/common/datafixer/schemas/V0.java | 8 +-- .../gtceu/common/datafixer/schemas/V4.java | 9 ++-- .../mixins/datafixer/DataFixTypesMixin.java | 4 +- .../mixins/datafixer/ForgeHooksMixin.java | 4 +- .../core/mixins/datafixer/NbtUtilsMixin.java | 4 +- 20 files changed, 97 insertions(+), 84 deletions(-) diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 370dabb5b6e..62ac1640505 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -1799,6 +1799,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", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 20a7a484b07..c29372ec20d 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -1799,6 +1799,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", diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index 2a2593445ba..ec93f081323 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -141,7 +141,7 @@ public static boolean isClientThread() { /** * @return if the game is the PHYSICAL client, e.g. not a dedicated server. * @apiNote Do not use this to check if you're currently on the server thread for side-specific actions! - * It does NOT work for that. Use {@link #isClientThread()} instead. + * It does NOT work for that. Use {@link #isClientThread()} instead. * @see #isClientThread() */ public static boolean isClientSide() { @@ -152,7 +152,7 @@ public static boolean isClientSide() { * This check isn't the same for client and server! * * @return if it's safe to access the current instance {@link net.minecraft.world.level.Level Level} on client or if - * it's safe to access any level on server. + * it's safe to access any level on server. */ public static boolean canGetServerLevel() { if (isClientSide()) { diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java index bac8ad46a6b..d108f326c26 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java @@ -3,16 +3,15 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.common.data.datafixer.GTDataFixers; -import com.mojang.datafixers.DSL; -import com.mojang.datafixers.DataFixUtils; -import com.mojang.datafixers.schemas.Schema; -import com.mojang.serialization.Dynamic; - 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.*; diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java index 0d36eb500a8..a061df076de 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/LazyDataFixer.java @@ -8,13 +8,12 @@ * * 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 + * 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 . + * along with this program. If not, see . */ - package com.gregtechceu.gtceu.api.datafixer; import com.gregtechceu.gtceu.GTCEu; @@ -33,6 +32,7 @@ * "https://github.com/embeddedt/ModernFix/blob/c561d818f398f9b9f6b826db34b705a97c187f74/src/main/java/org/embeddedt/modernfix/dfu/LazyDataFixer.java">ModernFix */ public class LazyDataFixer implements DataFixer { + private @Nullable DataFixer backingDataFixer; private final Supplier<@Nullable DataFixer> dfuSupplier; @@ -42,7 +42,7 @@ public LazyDataFixer(Supplier<@Nullable DataFixer> dfuSupplier) { } private DataFixer getDataFixer() { - synchronized(this) { + synchronized (this) { if (this.backingDataFixer == null) { GTCEu.LOGGER.info("Instantiating GTCEu Data Fixers"); this.backingDataFixer = this.dfuSupplier.get(); 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 index c90a13f48e2..cc921b4e96e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/ToolBehaviorFix.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/ToolBehaviorFix.java @@ -1,8 +1,9 @@ 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; -import net.minecraft.util.datafix.fixes.ItemStackTagFix; public abstract class ToolBehaviorFix extends ItemStackTagFix { diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java index f3559150c05..02d0fdadd1a 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java @@ -1,9 +1,11 @@ package com.gregtechceu.gtceu.api.datafixer.schemas; import com.gregtechceu.gtceu.common.datafixer.schemas.V0; + +import net.minecraft.util.datafix.schemas.NamespacedSchema; + import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 7c30d74d4b7..d7e7a01ccf4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -1,20 +1,17 @@ package com.gregtechceu.gtceu.common; import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.block.BlockAttributes; import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper; import com.gregtechceu.gtceu.api.capability.IElectricItem; import com.gregtechceu.gtceu.api.capability.compat.EUToFEProvider; import com.gregtechceu.gtceu.api.cosmetics.CapeRegistry; import com.gregtechceu.gtceu.api.cosmetics.event.RegisterGTCapesEvent; -import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; 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.item.armor.ArmorComponentItem; import com.gregtechceu.gtceu.api.machine.MetaMachine; import com.gregtechceu.gtceu.api.registry.GTRegistries; @@ -88,8 +85,6 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.items.IItemHandler; -import java.util.List; - @Mod.EventBusSubscriber(modid = GTCEu.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class CommonEventListener { diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java index b4a3d22711c..1abadd37757 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonProxy.java @@ -28,8 +28,8 @@ 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.loot.*; 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; import com.gregtechceu.gtceu.common.data.materials.GTFoods; 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 index ae0db29c38e..2a22be7fa91 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -48,7 +48,9 @@ * 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 {@link Schema#register} like this: + * *
{@code
+ * 
  * public Map> registerBlockEntities(Schema schema) {
  *     Map> map = super.registerBlockEntities(schema);
  *     // ...
@@ -57,6 +59,7 @@
  *     return map;
  * }
  * }
+ * * We don't use {@link Schema#registerSimple} because we need to register the trait holder type for all machines. */ @SuppressWarnings("SameParameterValue") @@ -76,7 +79,6 @@ public static void init() {} DataFixHelper.LOGGER.info("Registering data fixers"); - return new LazyDataFixer(() -> { try { DataFixerBuilder builder = new DataFixerBuilder(GTCEu.GT_DATA_VERSION); @@ -90,7 +92,8 @@ public static void init() {} return builder.buildOptimized(typesToOptimize, executor); } } catch (Exception ex) { - DataFixHelper.LOGGER.warn("Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft build is hosed."); + DataFixHelper.LOGGER.warn( + "Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft build is hosed."); DataFixHelper.LOGGER.warn("Using no-op implementation."); DataFixHelper.LOGGER.warn("Full error: ", ex); @@ -141,14 +144,14 @@ public static void addFixers(DataFixerBuilder builder) { // Schema v10 = builder.addSchema(10, SAME_NAMESPACED); // createBlockItemRenameFix(builder, v10, "U238", - // createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); + // createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); // createBlockItemRenameFix(builder, v10, "Pu239", - // createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); + // createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); // createBlockItemRenameFix(builder, v10, "Red Granite", - // createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); + // createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); // // createBlockItemRenameFix(builder, v10, "Oil Variants", - // createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); + // createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, @@ -169,4 +172,4 @@ private static UnaryOperator createRenamer(Map renameMap private static UnaryOperator createRenamer(Pattern check, String replaceWith) { return id -> check.matcher(NamespacedSchema.ensureNamespaced(id)).replaceAll(replaceWith); } -} \ No newline at end of file +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java index 16f34303073..2ed999039f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTReferences.java @@ -4,11 +4,10 @@ public class GTReferences { - public static final DSL.TypeReference MATERIAL_STACK = () -> "material_stack"; public static final DSL.TypeReference MATERIAL_NAME = () -> "material_name"; public static final DSL.TypeReference FLUID_STACK = () -> "fluid_stack"; public static final DSL.TypeReference FLUID_NAME = () -> "fluid_name"; public static final DSL.TypeReference FORGE_REGISTRY_DATA = () -> "forge_registry_data"; -} \ No newline at end of file +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java index 48c91a5e14f..d4089bca9cb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java @@ -18,8 +18,7 @@ public class AutoOutputTraitFix extends DataFix { "autoOutputItems", "autoOutputItems", "autoOutputFluids", "autoOutputFluids", "allowInputFromOutputSideItems", "allowItemInputFromOutputSide", - "allowInputFromOutputSideFluids", "allowFluidInputFromOutputSide" - ); + "allowInputFromOutputSideFluids", "allowFluidInputFromOutputSide"); public AutoOutputTraitFix(Schema outputSchema) { super(outputSchema, false); @@ -27,20 +26,21 @@ public AutoOutputTraitFix(Schema outputSchema) { @Override protected TypeRewriteRule makeRule() { - return this.fixTypeEverywhereTyped("AutoOutputTraitFix", this.getInputSchema().getType(References.BLOCK_ENTITY), typed -> typed.update(remainderFinder(), dynamic -> { - Dynamic traitValue = dynamic.emptyMap(); - for (var entry : FIELD_RENAMES.entrySet()) { - String oldName = entry.getKey(); - String newName = entry.getValue(); - - var oldField = dynamic.get(oldName).result(); - if (oldField.isPresent()) { - traitValue = traitValue.set(newName, oldField.get()); - dynamic = dynamic.remove(oldName); - } - } - dynamic.set("autoOutput", traitValue); - return dynamic; - })); + return this.fixTypeEverywhereTyped("AutoOutputTraitFix", this.getInputSchema().getType(References.BLOCK_ENTITY), + typed -> typed.update(remainderFinder(), dynamic -> { + Dynamic traitValue = dynamic.emptyMap(); + for (var entry : FIELD_RENAMES.entrySet()) { + String oldName = entry.getKey(); + String newName = entry.getValue(); + + var oldField = dynamic.get(oldName).result(); + if (oldField.isPresent()) { + traitValue = traitValue.set(newName, oldField.get()); + dynamic = dynamic.remove(oldName); + } + } + dynamic.set("autoOutput", traitValue); + return dynamic; + })); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java index 3f31c28f012..67d5350dbd8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java @@ -1,10 +1,11 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; +import net.minecraft.util.datafix.fixes.References; + import com.mojang.datafixers.*; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; import com.mojang.serialization.Dynamic; -import net.minecraft.util.datafix.fixes.References; public class LDLibPayloadWrapperRemovalFix extends DataFix { @@ -16,7 +17,8 @@ public LDLibPayloadWrapperRemovalFix(Schema outputSchema) { protected TypeRewriteRule makeRule() { Type blockEntityIn = this.getInputSchema().getType(References.BLOCK_ENTITY); Type blockEntityOut = this.getOutputSchema().getType(References.BLOCK_ENTITY); - return this.writeFixAndRead("LDLib Payload wrapper removal fix", blockEntityIn, blockEntityOut, LDLibPayloadWrapperRemovalFix::fix); + return this.writeFixAndRead("LDLib Payload wrapper removal fix", blockEntityIn, blockEntityOut, + LDLibPayloadWrapperRemovalFix::fix); } private static Dynamic fix(Dynamic dynamic) { @@ -41,28 +43,28 @@ public static Dynamic stripLDLibPayloadWrapper(Dynamic dynamic) { final Dynamic pKey = dynamic.createString("p"); return DataFixUtils.orElse(dynamic.getMapValues().result() - .map(map -> { - // only allow entries with only the specific keys we expect so we don't accidentally touch other stuff - // tag.contains("p") && tag.contains("t") - if (map.size() == 2 && map.containsKey(pKey) && map.containsKey(tKey)) { - // return tag.get("p") - return map.get(pKey); - } else if (map.size() == 1) { - // I don't think this one is something that can happen, but I'm not sure about that, so - // it's staying. - // - // As far as I can see, the only format that's used by LDLib is the above - // `{ "t": type, "p": value }` one. + .map(map -> { + // only allow entries with only the specific keys we expect so we don't accidentally touch other + // stuff + // tag.contains("p") && tag.contains("t") + if (map.size() == 2 && map.containsKey(pKey) && map.containsKey(tKey)) { + // return tag.get("p") + return map.get(pKey); + } else if (map.size() == 1) { + // I don't think this one is something that can happen, but I'm not sure about that, so + // it's staying. + // + // As far as I can see, the only format that's used by LDLib is the above + // `{ "t": type, "p": value }` one. - var tValue = map.get(tKey).getMapValues().result(); - if (tValue.isPresent()) { - return tValue.get().get(pKey); - } - } - return dynamic.createMap(map); - }) - // also apply the fixer to all child objects - .map(LDLibPayloadWrapperRemovalFix::fix) - , dynamic); + var tValue = map.get(tKey).getMapValues().result(); + if (tValue.isPresent()) { + return tValue.get().get(pKey); + } + } + return dynamic.createMap(map); + }) + // also apply the fixer to all child objects + .map(LDLibPayloadWrapperRemovalFix::fix), dynamic); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java index e674d609513..80dd84aaf28 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java @@ -1,11 +1,12 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; +import net.minecraft.util.datafix.fixes.References; + import com.mojang.datafixers.*; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; import com.mojang.datafixers.util.Either; import com.mojang.datafixers.util.Unit; -import net.minecraft.util.datafix.fixes.References; import java.util.function.Function; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java index 3f9c7bb5a22..35560099c89 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java @@ -1,13 +1,14 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; +import net.minecraft.core.Direction; +import net.minecraft.util.datafix.fixes.References; + import com.mojang.datafixers.DSL; import com.mojang.datafixers.DataFix; import com.mojang.datafixers.TypeRewriteRule; import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; import com.mojang.serialization.OptionalDynamic; -import net.minecraft.core.Direction; -import net.minecraft.util.datafix.fixes.References; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; @@ -24,7 +25,8 @@ public UpwardsFacingPropertyFix(Schema outputSchema) { @Override protected TypeRewriteRule makeRule() { - return this.fixTypeEverywhereTyped("UpwardsFacingPropertyFix", this.getInputSchema().getType(References.BLOCK_STATE), + return this.fixTypeEverywhereTyped("UpwardsFacingPropertyFix", + this.getInputSchema().getType(References.BLOCK_STATE), typed -> typed.update(DSL.remainderFinder(), UpwardsFacingPropertyFix::upgradeBlockStateTag)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index bd8aa382cb9..ca4cdf6894e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -8,21 +8,21 @@ import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; +import net.minecraft.util.datafix.fixes.References; +import net.minecraftforge.fml.loading.LoadingModList; + import com.mojang.datafixers.DSL; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.fixes.References; -import net.minecraftforge.fml.loading.LoadingModList; - import java.util.Locale; import java.util.Map; import java.util.function.Supplier; import static com.gregtechceu.gtceu.api.GTValues.*; +import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.*; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; -import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; import static com.mojang.datafixers.DSL.*; public class V0 extends AutomaticNamespacedSchema { diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java index 4c6aaa535cb..5429850a26c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java @@ -7,21 +7,22 @@ import com.gregtechceu.gtceu.api.machine.MachineDefinition; import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; + +import net.minecraft.util.datafix.fixes.References; +import net.minecraftforge.fml.loading.LoadingModList; + import com.mojang.datafixers.DSL; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.fixes.References; -import net.minecraftforge.fml.loading.LoadingModList; import java.util.Map; import java.util.function.Supplier; - import static com.gregtechceu.gtceu.api.GTValues.*; +import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.*; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; -import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; import static com.mojang.datafixers.DSL.*; public class V4 extends AutomaticNamespacedSchema { diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java index 324c3678592..64557d6cc29 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/DataFixTypesMixin.java @@ -1,10 +1,12 @@ package com.gregtechceu.gtceu.core.mixins.datafixer; import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; + +import net.minecraft.util.datafix.DataFixTypes; + import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.mojang.datafixers.DSL; import com.mojang.serialization.Dynamic; -import net.minecraft.util.datafix.DataFixTypes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java index 12fc7c77953..45adb775e26 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java @@ -27,7 +27,9 @@ public class ForgeHooksMixin { } @Definition(id = "tag", local = @Local(type = CompoundTag.class, name = "tag")) - @Definition(id = "getCompound", method = "Lnet/minecraft/nbt/CompoundTag;getCompound(Ljava/lang/String;)Lnet/minecraft/nbt/CompoundTag;", remap = true) + @Definition(id = "getCompound", + method = "Lnet/minecraft/nbt/CompoundTag;getCompound(Ljava/lang/String;)Lnet/minecraft/nbt/CompoundTag;", + remap = true) @Expression("tag.getCompound('Registries')") @ModifyExpressionValue(method = "readAdditionalLevelSaveData", at = @At(value = "MIXINEXTRAS:EXPRESSION")) private static CompoundTag gtceu$fixRegistriesTag(CompoundTag regs, diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java index 88f32528aa4..2f378163157 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/NbtUtilsMixin.java @@ -1,9 +1,11 @@ package com.gregtechceu.gtceu.core.mixins.datafixer; import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; -import com.llamalad7.mixinextras.injector.ModifyReturnValue; + import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; From 880b589c6940576ec969c6343baf2fa8145fe7e0 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 21:42:27 +0300 Subject: [PATCH 33/83] Kill logging. --- .../common/datafixer/fixes/UpwardsFacingPropertyFix.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java index 35560099c89..84e5a29f395 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/UpwardsFacingPropertyFix.java @@ -9,16 +9,12 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.serialization.Dynamic; import com.mojang.serialization.OptionalDynamic; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; import java.util.Optional; public class UpwardsFacingPropertyFix extends DataFix { - private static final Logger LOGGER = LogManager.getLogger("GTCEu/DFU/UpwardsFacingPropertyFix"); - public UpwardsFacingPropertyFix(Schema outputSchema) { super(outputSchema, false); } @@ -41,7 +37,7 @@ private static Dynamic fixUpwardsFacingProperty(Direction frontFacing, Dy upwardsFacing = fixUpwardsFacing(frontFacing, upwardsFacing); return Direction.CODEC.encodeStart(property.getOps(), upwardsFacing) - .resultOrPartial(LOGGER::error) + .resultOrPartial(str -> {}) .map(value -> new Dynamic<>(property.getOps(), value)) .orElse(property); } @@ -49,8 +45,7 @@ private static Dynamic fixUpwardsFacingProperty(Direction frontFacing, Dy private static Dynamic upgradeBlockStateTag(Dynamic blockState) { return blockState.update("Properties", properties -> { OptionalDynamic frontFacingProperty = properties.get("facing"); - Optional frontFacingOpt = frontFacingProperty.read(Direction.CODEC) - .resultOrPartial(LOGGER::error); + Optional frontFacingOpt = frontFacingProperty.read(Direction.CODEC).resultOrPartial(str -> {}); if (frontFacingOpt.isEmpty()) { return properties; } From fd47b36f4317d163be1f78a2bd085d7c8b4b03a6 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:21:51 +0300 Subject: [PATCH 34/83] Add a material rename fixer --- .../datafixer/fixes/MaterialRenameFix.java | 43 +++++++++++++++++++ .../common/data/datafixer/GTDataFixers.java | 22 +++++++--- 2 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/MaterialRenameFix.java 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..dba34861478 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/MaterialRenameFix.java @@ -0,0 +1,43 @@ +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/common/data/datafixer/GTDataFixers.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java index 2a22be7fa91..f94cac4931a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.gregtechceu.gtceu.api.datafixer.LazyDataFixer; +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; @@ -118,7 +119,7 @@ public static void addFixers(DataFixerBuilder builder) { builder.addFixer(BlockRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", createRenamer("gtceu:tungstensteel_fluid_cell", "gtceu:tungsten_steel_fluid_cell"))); - createBlockItemRenameFix(builder, v1, "Rename Low Pressure Steam Miner", + createBlockItemEntityRenameFix(builder, v1, "Rename Low Pressure Steam Miner", createRenamer("gtceu:steam_miner", "gtceu:lp_steam_miner")); builder.addFixer(ItemRenameFix.create(v1, "Rename electric wire cutters", @@ -143,14 +144,14 @@ public static void addFixers(DataFixerBuilder builder) { // separator // Schema v10 = builder.addSchema(10, SAME_NAMESPACED); - // createBlockItemRenameFix(builder, v10, "U238", + // createMaterialRenameFix(builder, v10, "U238", // createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); - // createBlockItemRenameFix(builder, v10, "Pu239", + // createMaterialRenameFix(builder, v10, "Pu239", // createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); - // createBlockItemRenameFix(builder, v10, "Red Granite", + // createMaterialRenameFix(builder, v10, "Red Granite", // createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); // - // createBlockItemRenameFix(builder, v10, "Oil Variants", + // createMaterialRenameFix(builder, v10, "Oil Variants", // createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); } @@ -158,6 +159,17 @@ private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema sc UnaryOperator renamer) { builder.addFixer(ItemRenameFix.create(schema, name, renamer)); builder.addFixer(BlockRenameFix.create(schema, name, renamer)); + } + + private static void createMaterialRenameFix(DataFixerBuilder builder, Schema schema, String name, + UnaryOperator renamer) { + createBlockItemRenameFix(builder, schema, name, renamer); + builder.addFixer(MaterialRenameFix.create(schema, name, renamer)); + } + + private static void createBlockItemEntityRenameFix(DataFixerBuilder builder, Schema schema, String name, + UnaryOperator renamer) { + createBlockItemRenameFix(builder, schema, name, renamer); builder.addFixer(BlockEntityRenameFix.create(schema, name, renamer)); } From 864072fc030deaff3b4b014877930b9aceabfb48 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:22:44 +0300 Subject: [PATCH 35/83] Fix the forge registry data schema --- .../gtceu/common/datafixer/schemas/V0.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index ca4cdf6894e..2d4934e5062 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -39,21 +39,25 @@ public void registerTypes(Schema schema, Map> ent // add forge registry id map to the level schema schema.registerType(false, GTReferences.FORGE_REGISTRY_DATA, () -> optionalFields( - "minecraft:block", optionalFields( - "ids", compoundList(References.BLOCK_NAME.in(schema), constType(intType())), - "aliases", compoundList(constType(namespacedString()), References.BLOCK_NAME.in(schema)) + "minecraft:block", fields( + "ids", list(fields("K", References.BLOCK_NAME.in(schema), "V", constType(intType()))), + "aliases", list(fields("K", constType(namespacedString()), "V", References.BLOCK_NAME.in(schema))), + "overrides", list(fields("K", References.BLOCK_NAME.in(schema), "V", constType(string()))) ), - "minecraft:item", optionalFields( - "ids", compoundList(References.ITEM_NAME.in(schema), constType(intType())), - "aliases", compoundList(constType(namespacedString()), References.ITEM_NAME.in(schema)) + "minecraft:item", fields( + "ids", list(fields("K", References.ITEM_NAME.in(schema), "V", constType(intType()))), + "aliases", list(fields("K", constType(namespacedString()), "V", References.ITEM_NAME.in(schema))), + "overrides", list(fields("K", References.ITEM_NAME.in(schema), "V", constType(string()))) ), - "minecraft:fluid", optionalFields( - "ids", compoundList(GTReferences.FLUID_NAME.in(schema), constType(intType())), - "aliases", compoundList(constType(namespacedString()), GTReferences.FLUID_NAME.in(schema)) + "minecraft:fluid", fields( + "ids", list(fields("K", GTReferences.FLUID_NAME.in(schema), "V", constType(intType()))), + "aliases", list(fields("K", constType(namespacedString()), "V", GTReferences.FLUID_NAME.in(schema))), + "overrides", list(fields("K", GTReferences.FLUID_NAME.in(schema), "V", constType(string()))) ), - "minecraft:entity_type", optionalFields( - "ids", compoundList(References.ENTITY_NAME.in(schema), constType(intType())), - "aliases", compoundList(constType(namespacedString()), References.ENTITY_NAME.in(schema)) + "minecraft:entity_type", fields( + "ids", list(fields("K", References.ENTITY_NAME.in(schema), "V", constType(intType()))), + "aliases", list(fields("K", constType(namespacedString()), "V", References.ENTITY_NAME.in(schema))), + "overrides", list(fields("K", References.ENTITY_NAME.in(schema), "V", constType(string()))) ) )); From ab4519bdb82c01139700d7217a86424b6ffa60f4 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:23:15 +0300 Subject: [PATCH 36/83] pre-emptively add GT materials to forge registry data schema (Is this needed? not sure, so I'll do it.) --- .../com/gregtechceu/gtceu/common/datafixer/schemas/V0.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 2d4934e5062..9d59ec3f10a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -58,6 +58,11 @@ public void registerTypes(Schema schema, Map> ent "ids", list(fields("K", References.ENTITY_NAME.in(schema), "V", constType(intType()))), "aliases", list(fields("K", constType(namespacedString()), "V", References.ENTITY_NAME.in(schema))), "overrides", list(fields("K", References.ENTITY_NAME.in(schema), "V", constType(string()))) + ), + "gtceu:material", fields( + "ids", list(fields("K", GTReferences.MATERIAL_NAME.in(schema), "V", constType(intType()))), + "aliases", list(fields("K", constType(namespacedString()), "V", GTReferences.MATERIAL_NAME.in(schema))), + "overrides", list(fields("K", GTReferences.MATERIAL_NAME.in(schema), "V", constType(string()))) ) )); From e6ab16e15994698b15e047a99c4ef69ca0f42c89 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:23:36 +0300 Subject: [PATCH 37/83] Fix tungsten steel fluid cell renamer not renaming the correct thing --- .../gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index f94cac4931a..6560f72d950 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -116,7 +116,7 @@ public static void addFixers(DataFixerBuilder builder) { createBlockItemRenameFix(builder, v1, "Rename Palladium Substation Casing", createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); - builder.addFixer(BlockRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", + builder.addFixer(ItemRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", createRenamer("gtceu:tungstensteel_fluid_cell", "gtceu:tungsten_steel_fluid_cell"))); createBlockItemEntityRenameFix(builder, v1, "Rename Low Pressure Steam Miner", From b2637381757dde963d3c746875928c8a8451dac3 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 18 Aug 2026 22:24:05 +0300 Subject: [PATCH 38/83] ACTUALLY RENAME THE PALLADIUM SUBSTATION CASING BLOCK/ITEM SO THE FIXER DOESNT JUST BREAK IT LMAOO --- src/main/java/com/gregtechceu/gtceu/common/data/GTBlocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d199bbe5228..e053faf5599 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); From 2d86979bf479e8eedfdbb7ac58328cc70651d117 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 23 Aug 2026 11:55:24 +0300 Subject: [PATCH 39/83] spotless --- .../gtceu/api/datafixer/fixes/MaterialRenameFix.java | 2 ++ 1 file changed, 2 insertions(+) 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 index dba34861478..975e64e009e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/MaterialRenameFix.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/MaterialRenameFix.java @@ -1,6 +1,7 @@ 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; @@ -35,6 +36,7 @@ public TypeRewriteRule makeRule() { 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); } From 1fde6631739e3ca16db62e18f833a423892227dc Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 23 Aug 2026 12:01:11 +0300 Subject: [PATCH 40/83] Undo palladium substation casing rename (to be done in a separate PR) --- .../java/com/gregtechceu/gtceu/common/data/GTBlocks.java | 2 +- .../gtceu/common/data/datafixer/GTDataFixers.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) 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 e053faf5599..d199bbe5228 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_casing", + public static final BlockEntry CASING_PALLADIUM_SUBSTATION = createCasingBlock("palladium_substation", 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); 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 index 6560f72d950..71e30b28b11 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -113,9 +113,6 @@ public static void addFixers(DataFixerBuilder builder) { builder.addFixer(ItemRenameFix.create(v1, "Fix Advanced Nanomuscle Chestplate name", createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); - createBlockItemRenameFix(builder, v1, "Rename Palladium Substation Casing", - createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); - builder.addFixer(ItemRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", createRenamer("gtceu:tungstensteel_fluid_cell", "gtceu:tungsten_steel_fluid_cell"))); @@ -153,6 +150,9 @@ public static void addFixers(DataFixerBuilder builder) { // // createMaterialRenameFix(builder, v10, "Oil Variants", // createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); + // + // createBlockItemRenameFix(builder, v1, "Rename Palladium Substation Casing", + // createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, From 9dd535d1be9641d1606dde99bda13f4a82adc7c5 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 23 Aug 2026 12:01:35 +0300 Subject: [PATCH 41/83] nicer names for yet-to-exist material rename fixers --- .../common/data/datafixer/GTDataFixers.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) 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 index 71e30b28b11..16555bb076e 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -141,14 +141,14 @@ public static void addFixers(DataFixerBuilder builder) { // separator // Schema v10 = builder.addSchema(10, SAME_NAMESPACED); - // createMaterialRenameFix(builder, v10, "U238", - // createRenamer(Pattern.compile("gtceu:(.*)uranium_"), "gtceu:$1uranium_238_")); - // createMaterialRenameFix(builder, v10, "Pu239", - // createRenamer(Pattern.compile("gtceu:(.*)plutonium_"), "gtceu:$1plutonium_239_")); - // createMaterialRenameFix(builder, v10, "Red Granite", + // createMaterialRenameFix(builder, v10, "Rename uranium to uranium_238", + // createRenamer(Pattern.compile("gtceu:(.*)?uranium"), "gtceu:$1uranium_238")); + // createMaterialRenameFix(builder, v10, "Rename uranium_235 to uranium", + // createRenamer(Pattern.compile("gtceu:(.*)uranium_235"), "gtceu:$1uranium")); + // createMaterialRenameFix(builder, v10, "Fix Red Granite name", // createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); // - // createMaterialRenameFix(builder, v10, "Oil Variants", + // createMaterialRenameFix(builder, v10, "Rename Oil Variants", // createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); // // createBlockItemRenameFix(builder, v1, "Rename Palladium Substation Casing", @@ -157,20 +157,21 @@ public static void addFixers(DataFixerBuilder builder) { private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { - builder.addFixer(ItemRenameFix.create(schema, name, renamer)); + builder.addFixer(ItemRenameFix.create(schema, name + " for item", renamer)); + // BlockRenameFix adds the " for block" and " for block_state" parts builder.addFixer(BlockRenameFix.create(schema, name, renamer)); } private static void createMaterialRenameFix(DataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { createBlockItemRenameFix(builder, schema, name, renamer); - builder.addFixer(MaterialRenameFix.create(schema, name, renamer)); + builder.addFixer(MaterialRenameFix.create(schema, name + " for material", renamer)); } private static void createBlockItemEntityRenameFix(DataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { createBlockItemRenameFix(builder, schema, name, renamer); - builder.addFixer(BlockEntityRenameFix.create(schema, name, renamer)); + builder.addFixer(BlockEntityRenameFix.create(schema, name + " for block_entity", renamer)); } private static UnaryOperator createRenamer(String oldName, String newName) { From 0664f2da0a2061f5566eec7a00831af7f06decad Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Fri, 9 Oct 2026 11:34:51 +0300 Subject: [PATCH 42/83] Change schema version numbering --- .../java/com/gregtechceu/gtceu/GTCEu.java | 3 +- .../common/data/datafixer/GTDataFixers.java | 14 ++-- .../gtceu/common/datafixer/schemas/V0.java | 2 +- .../datafixer/schemas/{V4.java => V1_3.java} | 77 ++++++++----------- 4 files changed, 43 insertions(+), 53 deletions(-) rename src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/{V4.java => V1_3.java} (89%) diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index 263cc22217e..8294ac167a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.common.CommonProxy; import com.gregtechceu.gtceu.utils.FormattingUtil; +import com.mojang.datafixers.DataFixUtils; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -47,7 +48,7 @@ public class GTCEu { *
  • 20: 8.0.1-SNAPSHOT+HASH2
  • * */ - public static final int GT_DATA_VERSION = 10; + public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 5); public GTCEu() { GTCEu.init(); 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 index 16555bb076e..46d5a554ce1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -124,19 +124,19 @@ public static void addFixers(DataFixerBuilder builder) { // separator - Schema v2 = builder.addSchema(2, SAME_NAMESPACED); - builder.addFixer(new LDLibPayloadWrapperRemovalFix(v2)); - builder.addFixer(new AutoOutputTraitFix(v2)); + Schema v1_1 = builder.addSchema(1, 1, SAME_NAMESPACED); + builder.addFixer(new LDLibPayloadWrapperRemovalFix(v1_1)); + builder.addFixer(new AutoOutputTraitFix(v1_1)); // separator - Schema v3 = builder.addSchema(3, SAME_NAMESPACED); - builder.addFixer(new UpwardsFacingPropertyFix(v3)); + Schema v1_2 = builder.addSchema(1, 2, SAME_NAMESPACED); + builder.addFixer(new UpwardsFacingPropertyFix(v1_2)); // separator - Schema v4 = builder.addSchema(4, V4::new); - builder.addFixer(new TraitHolderificationFix(v4)); + Schema v1_3 = builder.addSchema(1, 3, V1_3::new); + builder.addFixer(new TraitHolderificationFix(v1_3)); // separator diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 9d59ec3f10a..90e7778b483 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -456,7 +456,7 @@ public Map> registerBlockEntities(Schema schema) return map; } - protected static void registerSimpleMachine(Schema schema, Map> map, String name, int... tiers) { + private static void registerSimpleMachine(Schema schema, Map> map, String name, int... tiers) { registerForTiers(schema, map, name, () -> optionalFields( "importItems", notifiableItemHandler(schema), "exportItems", notifiableItemHandler(schema), diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java similarity index 89% rename from src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java rename to src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java index 5429850a26c..7c6e880fa57 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V4.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java @@ -11,7 +11,6 @@ import net.minecraft.util.datafix.fixes.References; import net.minecraftforge.fml.loading.LoadingModList; -import com.mojang.datafixers.DSL; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; @@ -19,15 +18,14 @@ import java.util.function.Supplier; import static com.gregtechceu.gtceu.api.GTValues.*; -import static com.gregtechceu.gtceu.api.datafixer.types.ExtraDSL.*; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.*; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; import static com.mojang.datafixers.DSL.*; -public class V4 extends AutomaticNamespacedSchema { +public class V1_3 extends AutomaticNamespacedSchema { - public V4(int versionKey, Schema parent) { + public V1_3(int versionKey, Schema parent) { super(versionKey, parent, GTCEu.MOD_ID); } @@ -47,15 +45,6 @@ public Map> registerBlockEntities(Schema schema) "waterTank", notifiableFluidTank(schema), steamMachine.get() ); - registerSteamMachine(schema, map, "steam_solid_boiler", () -> optionalFields( - "fuelHandler", notifiableItemHandler(schema), - "ashHandler", notifiableItemHandler(schema), - steamBoiler.get() - )); - registerSteamMachine(schema, map, "steam_liquid_boiler", () -> optionalFields( - "fuelTank", notifiableFluidTank(schema), - steamBoiler.get() - )); registerSteamMachine(schema, map, "steam_solar_boiler", steamBoiler); registerSimpleSteamMachine(schema, map, "extractor"); registerSimpleSteamMachine(schema, map, "steam_macerator"); @@ -73,7 +62,7 @@ public Map> registerBlockEntities(Schema schema) // endregion // region simple - registerForTiers(schema, map, "machine_hull", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "machine_hull", traitHolder, ALL_TIERS); registerSimpleMachine(schema, map, "electric_furnace", ELECTRIC_TIERS); registerSimpleMachine(schema, map, "alloy_smelter", ELECTRIC_TIERS); registerSimpleMachine(schema, map, "arc_furnace", ELECTRIC_TIERS); @@ -119,15 +108,15 @@ public Map> registerBlockEntities(Schema schema) // region electric final int[] transformerTiers = GTValues.tiersBetween(ULV, GTCEuAPI.isHighTier() ? OpV : UV); - registerForTiers(schema, map, "transformer_1a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "transformer_2a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "transformer_4a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "transformer_16a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "transformer_1a", traitHolder, transformerTiers); + registerForTiers(schema, map, "transformer_2a", traitHolder, transformerTiers); + registerForTiers(schema, map, "transformer_4a", traitHolder, transformerTiers); + registerForTiers(schema, map, "transformer_16a", traitHolder, transformerTiers); - registerForTiers(schema, map, "1a_energy_converter", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "4a_energy_converter", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "8a_energy_converter", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "16a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "1a_energy_converter", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "4a_energy_converter", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "8a_energy_converter", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "16a_energy_converter", traitHolder, ALL_TIERS); schema.register(map, "long_distance_item_pipeline_endpoint", traitHolder); schema.register(map, "long_distance_fluid_pipeline_endpoint", traitHolder); @@ -158,7 +147,7 @@ public Map> registerBlockEntities(Schema schema) traitHolder(schema) ), LV, MV, HV, EV); registerSimpleMachine(schema, map, "miner", LV, MV, HV); - registerForTiers(schema, map, "world_accelerator", DSL::remainder, LV, MV, HV, EV, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "world_accelerator", traitHolder, LV, MV, HV, EV, IV, LuV, ZPM, UV); registerForTiers(schema, map, "item_collector", () -> optionalFields( "output", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema), @@ -237,14 +226,14 @@ public Map> registerBlockEntities(Schema schema) registerForTiers(schema, map, "output_hatch_4x", fluidHatch, ALL_TIERS); registerForTiers(schema, map, "output_hatch_9x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_4a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_4a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_16a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_16a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "substation_input_hatch_64a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "substation_output_hatch_64a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_4a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_4a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "energy_input_hatch_16a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "energy_output_hatch_16a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "substation_input_hatch_64a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "substation_output_hatch_64a", traitHolder, ALL_TIERS); registerForTiers(schema, map, "muffler_hatch", itemStorage, ELECTRIC_TIERS); @@ -272,18 +261,18 @@ public Map> registerBlockEntities(Schema schema) registerForTiers(schema, map, "dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); registerForTiers(schema, map, "dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); - registerForTiers(schema, map, "diode", DSL::remainder, ELECTRIC_TIERS); + registerForTiers(schema, map, "diode", traitHolder, ELECTRIC_TIERS); registerForTiers(schema, map, "rotor_holder", () -> optionalFields( "rotorMaterial", GTReferences.MATERIAL_NAME.in(schema), itemStorage.get() ), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); - registerForTiers(schema, map, "256a_laser_target_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "256a_laser_source_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_target_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_source_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_target_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "256a_laser_target_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "256a_laser_source_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_target_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "1024a_laser_source_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_target_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "4096a_laser_source_hatch", traitHolder, HIGH_TIERS); schema.register(map, "monitor", traitHolder); schema.register(map, "advanced_monitor", traitHolder); @@ -317,9 +306,9 @@ public Map> registerBlockEntities(Schema schema) schema.register(map, "primitive_pump", traitHolder); schema.register(map, "steam_grinder", traitHolder); schema.register(map, "steam_oven", traitHolder); - registerForTiers(schema, map, "fusion_reactor", DSL::remainder, LuV, ZPM, UV); - registerForTiers(schema, map, "fluid_drilling_rig", DSL::remainder, MV, HV, EV); - registerForTiers(schema, map, "large_miner", DSL::remainder, EV, IV, LuV); + registerForTiers(schema, map, "fusion_reactor", traitHolder, LuV, ZPM, UV); + registerForTiers(schema, map, "fluid_drilling_rig", traitHolder, MV, HV, EV); + registerForTiers(schema, map, "large_miner", traitHolder, EV, IV, LuV); schema.register(map, "cleanroom", traitHolder); schema.register(map, "large_combustion_engine", traitHolder); schema.register(map, "extreme_combustion_engine", traitHolder); @@ -328,7 +317,7 @@ public Map> registerBlockEntities(Schema schema) schema.register(map, "plasma_large_turbine", traitHolder); schema.register(map, "active_transformer", traitHolder); schema.register(map, "power_substation", traitHolder); - registerForTiers(schema, map, "bedrock_ore_miner", DSL::remainder, MV, HV, EV); + registerForTiers(schema, map, "bedrock_ore_miner", traitHolder, MV, HV, EV); schema.register(map, "wooden_tank_valve", traitHolder); schema.register(map, "wooden_multiblock_tank", traitHolder); schema.register(map, "bronze_tank_valve", traitHolder); @@ -339,7 +328,7 @@ public Map> registerBlockEntities(Schema schema) schema.register(map, "central_monitor", traitHolder); // region GCYM - registerForTiers(schema, map, "parallel_hatch", DSL::remainder, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "parallel_hatch", traitHolder, IV, LuV, ZPM, UV); schema.register(map, "large_maceration_tower", traitHolder); schema.register(map, "large_chemical_bath", traitHolder); schema.register(map, "large_centrifuge", traitHolder); @@ -424,7 +413,7 @@ public Map> registerBlockEntities(Schema schema) for (MachineDefinition definition : GTRegistries.MACHINES) { String id = definition.getId().toString(); if (!map.containsKey(id)) { - schema.register(map, id, () -> traitHolder(schema)); + schema.register(map, id, traitHolder); } } From 4efa1d7bbef556336450a713097e9fda3f99e043 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Fri, 9 Oct 2026 11:35:48 +0300 Subject: [PATCH 43/83] Add schema for new machines and translate the molten fluid rename fix to a real datafixer --- .../java/com/gregtechceu/gtceu/GTCEu.java | 2 +- .../api/datafixer/fixes/FluidRenameFix.java | 41 +++++++++++++++++++ .../common/data/datafixer/GTDataFixers.java | 16 +++++++- .../gtceu/common/datafixer/schemas/V1_4.java | 29 +++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index 8294ac167a5..fc11d744bcf 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -48,7 +48,7 @@ public class GTCEu { *
  • 20: 8.0.1-SNAPSHOT+HASH2
  • * */ - public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 5); + public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 4); public GTCEu() { GTCEu.init(); 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..85b6bb3df66 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java @@ -0,0 +1,41 @@ +package com.gregtechceu.gtceu.api.datafixer.fixes; + +import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; +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 net.minecraft.util.datafix.schemas.NamespacedSchema; + +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::fixItem)); + } + } + + protected abstract String fixItem(String item); + + public static DataFix create(Schema outputSchema, String name, final Function fixer) { + return new net.minecraft.util.datafix.fixes.ItemRenameFix(outputSchema, name) { + protected String fixItem(String item) { + return fixer.apply(item); + } + }; + } +} 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 index 46d5a554ce1..17c7083b587 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; 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.*; @@ -140,6 +141,13 @@ public static void addFixers(DataFixerBuilder builder) { // separator + Schema v1_4 = builder.addSchema(1, 4, V1_4::new); + // Migrate GT's Molten fluids, ignore addons to allow them to fail loudly + createBlockItemFluidRenameFix(builder, v1_4, "Remove molten fluids", + createRenamer(Pattern.compile("gtceu:molten_"), "gtceu:")); + + // separator + // Schema v10 = builder.addSchema(10, SAME_NAMESPACED); // createMaterialRenameFix(builder, v10, "Rename uranium to uranium_238", // createRenamer(Pattern.compile("gtceu:(.*)?uranium"), "gtceu:$1uranium_238")); @@ -162,9 +170,15 @@ private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema sc builder.addFixer(BlockRenameFix.create(schema, name, renamer)); } + private static void createBlockItemFluidRenameFix(DataFixerBuilder builder, Schema schema, String name, + UnaryOperator renamer) { + createBlockItemRenameFix(builder, schema, name, renamer); + builder.addFixer(FluidRenameFix.create(schema, name + " for fluid", renamer)); + } + private static void createMaterialRenameFix(DataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { - createBlockItemRenameFix(builder, schema, name, renamer); + createBlockItemFluidRenameFix(builder, schema, name, renamer); builder.addFixer(MaterialRenameFix.create(schema, name + " for material", renamer)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java new file mode 100644 index 00000000000..acfd8f909b5 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java @@ -0,0 +1,29 @@ +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.TypeTemplate; + +import java.util.Map; +import java.util.function.Supplier; + +import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ELECTRIC_TIERS; +import static com.gregtechceu.gtceu.common.datafixer.schemas.V1_3.registerSimpleMachine; + +public class V1_4 extends AutomaticNamespacedSchema { + + public V1_4(int versionKey, Schema parent) { + super(versionKey, parent, GTCEu.MOD_ID); + } + + @Override + public Map> registerBlockEntities(Schema schema) { + Map> map = super.registerBlockEntities(schema); + + registerSimpleMachine(schema, map, "welder", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "spooler", ELECTRIC_TIERS); + + return map; + } +} From b7ed3d0dbb1b185456b2ee46a1cfb1d6188c364d Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Fri, 9 Oct 2026 11:55:45 +0300 Subject: [PATCH 44/83] Fix the IDs of some casings and materials that were either backwards or just plain wrong --- .../java/com/gregtechceu/gtceu/GTCEu.java | 2 +- .../gtceu/api/data/tag/TagPrefix.java | 2 +- .../gtceu/common/block/StoneTypes.java | 2 +- .../gtceu/common/data/GTBedrockFluids.java | 4 +-- .../gtceu/common/data/GTBlocks.java | 16 +++++----- .../gtceu/common/data/GTMaterials.java | 8 ++--- .../common/data/datafixer/GTDataFixers.java | 29 +++++++++++------- .../common/data/machines/GCYMMachines.java | 6 ++-- .../common/data/machines/GTMultiMachines.java | 8 ++--- .../data/materials/SecondDegreeMaterials.java | 2 +- .../UnknownCompositionMaterials.java | 9 ++---- .../testmultis/PCBFactoryMachine.java | 5 +-- .../gtceu/data/lang/BlockLang.java | 14 --------- .../gtceu/data/recipe/misc/FuelRecipes.java | 4 +-- .../data/recipe/misc/MachineRecipeLoader.java | 22 ++++++------- .../recipe/misc/MetaTileEntityLoader.java | 20 ++++++------ .../data/recipe/misc/MiscRecipeLoader.java | 4 +-- .../data/recipe/misc/WoodMachineRecipes.java | 2 +- .../chemistry/PetrochemRecipes.java | 4 +-- .../chemistry/SeparationRecipes.java | 4 +-- .../gtceu/data/tags/BlockTagLoader.java | 4 +-- ...mbly_line.json => assembly_line_unit.json} | 2 +- ...ve.json => assembly_line_unit_active.json} | 4 +-- ... => machine_casing_assembly_line_unit.png} | Bin ...chine_casing_assembly_line_unit_bloom.png} | Bin ...asing_assembly_line_unit_bloom.png.mcmeta} | 4 +-- 26 files changed, 86 insertions(+), 95 deletions(-) rename src/main/resources/assets/gtceu/models/block/variant/{assembly_line.json => assembly_line_unit.json} (90%) rename src/main/resources/assets/gtceu/models/block/variant/{assembly_line_active.json => assembly_line_unit_active.json} (83%) rename src/main/resources/assets/gtceu/textures/block/casings/mechanic/{machine_casing_assembly_line.png => machine_casing_assembly_line_unit.png} (100%) rename src/main/resources/assets/gtceu/textures/block/casings/mechanic/{machine_casing_assembly_line_bloom.png => machine_casing_assembly_line_unit_bloom.png} (100%) rename src/main/resources/assets/gtceu/textures/block/casings/mechanic/{machine_casing_assembly_line_bloom.png.mcmeta => machine_casing_assembly_line_unit_bloom.png.mcmeta} (60%) diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index fc11d744bcf..8294ac167a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -48,7 +48,7 @@ public class GTCEu { *
  • 20: 8.0.1-SNAPSHOT+HASH2
  • * */ - public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 4); + public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 5); public GTCEu() { GTCEu.init(); 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 10f091fa461..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")); 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/data/GTBedrockFluids.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTBedrockFluids.java index 8db838f9479..ccdb01e4869 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTBedrockFluids.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTBedrockFluids.java @@ -25,7 +25,7 @@ public class GTBedrockFluids { // ******** OVERWORLD ********// ////////////////////////////////////// public static BedrockFluidDefinition HEAVY_OIL = create(GTCEu.id("heavy_oil_deposit"), 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 d199bbe5228..eab6c6893bd 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..25e13352cad 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); @@ -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 index 17c7083b587..2724b175d92 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -148,19 +148,26 @@ public static void addFixers(DataFixerBuilder builder) { // separator - // Schema v10 = builder.addSchema(10, SAME_NAMESPACED); - // createMaterialRenameFix(builder, v10, "Rename uranium to uranium_238", + Schema v1_5 = builder.addSchema(1, 5, SAME_NAMESPACED); + // createMaterialRenameFix(builder, v1_5, "Rename uranium to uranium_238", // createRenamer(Pattern.compile("gtceu:(.*)?uranium"), "gtceu:$1uranium_238")); - // createMaterialRenameFix(builder, v10, "Rename uranium_235 to uranium", + // createMaterialRenameFix(builder, v1_5, "Rename uranium_235 to uranium", // createRenamer(Pattern.compile("gtceu:(.*)uranium_235"), "gtceu:$1uranium")); - // createMaterialRenameFix(builder, v10, "Fix Red Granite name", - // createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); - // - // createMaterialRenameFix(builder, v10, "Rename Oil Variants", - // createRenamer(OilVariantsRenameFix.RENAMED_ITEM_IDS)); - // - // createBlockItemRenameFix(builder, v1, "Rename Palladium Substation Casing", - // createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); + createMaterialRenameFix(builder, v1_5, "Fix Red Granite name", + createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); + createMaterialRenameFix(builder, v1_5, "Fix Oil variant names", + createRenamer(OilVariantsRenameFix.RENAMED_IDS)); + + createBlockItemRenameFix(builder, v1_5, "Fix Palladium Substation Casing name", + createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); + createBlockItemRenameFix(builder, v1_5, "Fix Assembly Control Casing name", + createRenamer("gtceu:assembly_line_casing", "gtceu:assembly_control_casing")); + createBlockItemRenameFix(builder, v1_5, "Fix Magnalium Turbine Casing name", + createRenamer("gtceu:steel_turbine_casing", "gtceu:magnalium_turbine_casing")); + createBlockItemRenameFix(builder, v1_5, "Fix Bricked Bronze Casing name", + createRenamer("gtceu:bronze_brick_casing", "gtceu:bricked_bronze_casing")); + createBlockItemRenameFix(builder, v1_5, "Fix Bricked Wrought Iron Casing name", + createRenamer("gtceu:steel_brick_casing", "gtceu:bricked_wrought_iron_casing")); } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java index a330682b59f..219825b0542 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java @@ -336,7 +336,7 @@ public static void init() {} .and(Predicates.abilities(INPUT_ENERGY).setExactLimit(1)) .and(Predicates.autoAbilities(true, false, true))) .where('T', Predicates.blocks(CASING_TEMPERED_GLASS.get())) - .where('G', Predicates.blocks(CASING_GRATE.get())) + .where('G', Predicates.blocks(CASING_ASSEMBLY_GRATE.get())) .where('P', blocks(CASING_TUNGSTENSTEEL_PIPE.get())) .where('A', Predicates.air()) .where('#', Predicates.any()) @@ -399,7 +399,7 @@ public static void init() {} .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) .where('G', blocks(CASING_TEMPERED_GLASS.get())) - .where('K', blocks(CASING_GRATE.get())) + .where('K', blocks(CASING_ASSEMBLY_GRATE.get())) .where('A', Predicates.air()) .build()) .workableCasingModel(GTCEu.id("block/casings/gcym/laser_safe_engraving_casing"), @@ -426,7 +426,7 @@ public static void init() {} .where('X', blocks(CASING_VIBRATION_SAFE.get()).setMinGlobalLimited(50) .and(Predicates.autoAbilities(definition.getRecipeTypes())) .and(Predicates.autoAbilities(true, false, true))) - .where('K', blocks(CASING_GRATE.get())) + .where('K', blocks(CASING_ASSEMBLY_GRATE.get())) .where('A', Predicates.air()) .where('#', Predicates.any()) .build()) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java index 6efb437e558..6b54f96e1ac 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java @@ -433,11 +433,11 @@ public class GTMultiMachines { blocks(CASING_STEEL_SOLID.get()).and(Predicates.abilities(PartAbility.INPUT_ENERGY) .setMinGlobalLimited(1).setMaxGlobalLimited(2))) .where('I', blocks(ITEM_IMPORT_BUS[0].getBlock())) - .where('G', blocks(CASING_GRATE.get())) + .where('G', blocks(CASING_ASSEMBLY_GRATE.get())) .where('A', blocks(CASING_ASSEMBLY_CONTROL.get())) .where('R', blocks(CASING_LAMINATED_GLASS.get())) - .where('T', blocks(CASING_ASSEMBLY_LINE.get())) - .where('D', blocks(CASING_GRATE.get()).and(dataHatchPredicate())) + .where('T', blocks(CASING_ASSEMBLY_UNIT.get())) + .where('D', blocks(CASING_ASSEMBLY_GRATE.get()).and(dataHatchPredicate())) .where('#', Predicates.any()) .build()) .partSorter(AssemblyLineMachine::partSorter) @@ -734,7 +734,7 @@ public class GTMultiMachines { "steam_large_turbine", HV, GTRecipeTypes.STEAM_TURBINE_FUELS, - CASING_STEEL_TURBINE, CASING_STEEL_GEARBOX, + CASING_MAGNALIUM_TURBINE, CASING_STEEL_GEARBOX, GTCEu.id("block/casings/mechanic/machine_casing_turbine_steel"), GTCEu.id("block/multiblock/generator/large_steam_turbine"), false); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java index 4ece776f76b..1d4534dbeac 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java @@ -198,7 +198,7 @@ public static void register() { .components(SiliconDioxide, 4, Biotite, 1) .buildAndRegister(); - GraniteRed = new Material.Builder(GTCEu.id("granite_red")) + RedGranite = new Material.Builder(GTCEu.id("red_granite")) .dust() .color(0xFF0080).iconSet(ROUGH) .flags(NO_SMASHING) diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java index 316d5730007..2e597c19f56 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/materials/UnknownCompositionMaterials.java @@ -308,22 +308,19 @@ public static void register() { .flags(STICKY, FLAMMABLE) .buildAndRegister(); - OilHeavy = new Material.Builder(GTCEu.id("oil_heavy")) - .langValue("Heavy Oil") + HeavyOil = new Material.Builder(GTCEu.id("heavy_oil")) .liquid(new FluidBuilder().block().customStill()) .color(0x0A0A0A) .flags(STICKY, FLAMMABLE) .buildAndRegister(); - RawOil = new Material.Builder(GTCEu.id("oil_medium")) - .langValue("Raw Oil") + RawOil = new Material.Builder(GTCEu.id("raw_oil")) .liquid(new FluidBuilder().block().customStill()) .color(0x0A0A0A) .flags(STICKY, FLAMMABLE) .buildAndRegister(); - OilLight = new Material.Builder(GTCEu.id("oil_light")) - .langValue("Light Oil") + LightOil = new Material.Builder(GTCEu.id("light_oil")) .liquid(new FluidBuilder().block().customStill()) .color(0x0A0A0A) .flags(STICKY, FLAMMABLE) diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/testmultis/PCBFactoryMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/testmultis/PCBFactoryMachine.java index c4ec9877989..a607f62b02a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/testmultis/PCBFactoryMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/testmultis/PCBFactoryMachine.java @@ -10,8 +10,9 @@ import org.jetbrains.annotations.NotNull; -import static com.gregtechceu.gtceu.common.data.GTBlocks.CASING_GRATE; +import static com.gregtechceu.gtceu.common.data.GTBlocks.CASING_ASSEMBLY_GRATE; +// FIXME why is this here?! public class PCBFactoryMachine extends WorkableElectricMultiblockMachine { public PCBFactoryMachine(BlockEntityCreationInfo info) { @@ -27,7 +28,7 @@ public IBlockPattern getDefaultStructurePattern() { .where('C', /* * Predicates.autoAbilities(true, false, false) * .or( - */Predicates.blocks(CASING_GRATE.get()).setMinGlobalLimited(12)) + */Predicates.blocks(CASING_ASSEMBLY_GRATE.get()).setMinGlobalLimited(12)) .where('S', Predicates.controller(Predicates.blocks(getDefinition().getBlock()))) .where('B', Predicates.frames(GTMaterials.Steel)) .build(); diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/BlockLang.java b/src/main/java/com/gregtechceu/gtceu/data/lang/BlockLang.java index 92f44e6f0f7..66bf1ea7de7 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/BlockLang.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/BlockLang.java @@ -34,34 +34,20 @@ private static void initCasingLang(RegistrateLangProvider provider) { provider.add("block.gtceu.substation_capacitor.tooltip_filled", "§cEnergy Capacity: §f%d EU"); // Casings - replace(provider, "block.gtceu.bronze_brick_casing", "Bricked Bronze Casing"); - replace(provider, "block.gtceu.steel_brick_casing", "Bricked Wrought Iron Casing"); replace(provider, "block.gtceu.heatproof_machine_casing", "Heat Proof Invar Machine Casing"); replace(provider, "block.gtceu.frostproof_machine_casing", "Frost Proof Aluminium Machine Casing"); replace(provider, "block.gtceu.steel_machine_casing", "Solid Steel Machine Casing"); replace(provider, "block.gtceu.clean_machine_casing", "Clean Stainless Steel Casing"); replace(provider, "block.gtceu.stable_machine_casing", "Stable Titanium Machine Casing"); replace(provider, "block.gtceu.robust_machine_casing", "Robust Tungstensteel Machine Casing"); - replace(provider, "block.gtceu.casing_coke_bricks", "Coke Oven Bricks"); replace(provider, "block.gtceu.inert_machine_casing", "Chemically Inert PTFE Machine Casing"); replace(provider, "block.gtceu.sturdy_machine_casing", "Sturdy HSS-E Machine Casing"); - replace(provider, "block.gtceu.casing_grate", "Grate Machine Casing"); - replace(provider, "block.gtceu.assembly_line_unit", "Assembly Control Casing"); replace(provider, "block.gtceu.ptfe_pipe_casing", "PTFE Pipe Casing"); replace(provider, "block.gtceu.bronze_gearbox", "Bronze Gearbox Casing"); replace(provider, "block.gtceu.steel_gearbox", "Steel Gearbox Casing"); replace(provider, "block.gtceu.stainless_steel_gearbox", "Stainless Steel Gearbox Casing"); replace(provider, "block.gtceu.titanium_gearbox", "Titanium Gearbox Casing"); replace(provider, "block.gtceu.tungstensteel_gearbox", "Tungstensteel Gearbox Casing"); - replace(provider, "block.gtceu.steel_turbine_casing", "Magnalium Turbine Casing"); - replace(provider, "block.gtceu.titanium_turbine_casing", "Titanium Turbine Casing"); - replace(provider, "block.gtceu.stainless_steel_turbine_casing", "Stainless Turbine Casing"); - replace(provider, "block.gtceu.tungstensteel_turbine_casing", "Tungstensteel Turbine Casing"); - replace(provider, "block.gtceu.bronze_pipe_casing", "Bronze Pipe Casing"); - replace(provider, "block.gtceu.steel_pipe_casing", "Steel Pipe Casing"); - replace(provider, "block.gtceu.titanium_pipe_casing", "Titanium Pipe Casing"); - replace(provider, "block.gtceu.tungstensteel_pipe_casing", "Tungstensteel Pipe Casing"); - replace(provider, "block.gtceu.palladium_substation", "Palladium Substation Casing"); replace(provider, "block.gtceu.steam_casing_bronze", "Bronze Hull"); provider.add("block.gtceu.steam_casing_bronze.tooltip", "§7For your first Steam Machines"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/FuelRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/FuelRecipes.java index 2ff251d5521..a3840873968 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/FuelRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/FuelRecipes.java @@ -92,7 +92,7 @@ public static void init(Consumer provider) { .save(provider); LARGE_BOILER_RECIPES.recipeBuilder("gtceu_oil_heavy") - .inputFluids(OilHeavy.getFluid(32)) + .inputFluids(HeavyOil.getFluid(32)) .duration(50) .save(provider); @@ -191,7 +191,7 @@ public static void init(Consumer provider) { .save(provider); COMBUSTION_GENERATOR_FUELS.recipeBuilder("light_oil") - .inputFluids(OilLight.getFluid(32)) + .inputFluids(LightOil.getFluid(32)) .duration(5) .EUt(-V[LV]) .save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java index d18e61d1cc6..6ca881b9a0e 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java @@ -860,23 +860,23 @@ private static void registerAssemblerRecipes(Consumer provider) .duration(100).cleanroom(CleanroomType.CLEANROOM) .addMaterialInfo(true, true).save(provider); - WELDER_RECIPES.recipeBuilder("casing_steel_turbine").EUt(16).inputItems(plate, Magnalium, 6) + WELDER_RECIPES.recipeBuilder("casing_magnalium_turbine").EUt(16).inputItems(plate, Magnalium, 6) .inputItems(frameGt, BlueSteel, 1).circuitMeta(6) - .outputItems(GTBlocks.CASING_STEEL_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) + .outputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) .addMaterialInfo(true).save(provider); WELDER_RECIPES.recipeBuilder("casing_stainless_steel_turbine").EUt(16) - .inputItems(GTBlocks.CASING_STEEL_TURBINE.asStack()).inputItems(plate, StainlessSteel, 6).circuitMeta(6) + .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()).inputItems(plate, StainlessSteel, 6).circuitMeta(6) .outputItems(GTBlocks.CASING_STAINLESS_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) .addMaterialInfo(true).save(provider); WELDER_RECIPES.recipeBuilder("casing_titanium_turbine").EUt(16) - .inputItems(GTBlocks.CASING_STEEL_TURBINE.asStack()).inputItems(plate, Titanium, 6).circuitMeta(6) + .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()).inputItems(plate, Titanium, 6).circuitMeta(6) .outputItems(GTBlocks.CASING_TITANIUM_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) .addMaterialInfo(true).save(provider); WELDER_RECIPES.recipeBuilder("casing_tungstensteel_turbine").EUt(16) - .inputItems(GTBlocks.CASING_STEEL_TURBINE.asStack()).inputItems(plate, TungstenSteel, 6).circuitMeta(6) + .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()).inputItems(plate, TungstenSteel, 6).circuitMeta(6) .outputItems( GTBlocks.CASING_TUNGSTENSTEEL_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) @@ -936,22 +936,22 @@ private static void registerAssemblerRecipes(Consumer provider) .outputItems(CASING_EXTREME_ENGINE_INTAKE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50).EUt(16).save(provider); - ASSEMBLER_RECIPES.recipeBuilder("casing_grate_casing") + ASSEMBLER_RECIPES.recipeBuilder("assembly_line_grating") .inputItems(Items.IRON_BARS, 6) .inputItems(frameGt, Steel) .inputItems(ELECTRIC_MOTOR_MV) .inputItems(rotor, Steel) - .outputItems(GTBlocks.CASING_GRATE, ConfigHolder.INSTANCE.recipes.casingsPerCraft) + .outputItems(GTBlocks.CASING_ASSEMBLY_GRATE, ConfigHolder.INSTANCE.recipes.casingsPerCraft) .duration(800) .EUt(VA[IV]) .save(provider); - ASSEMBLER_RECIPES.recipeBuilder("assembly_line_casing") + ASSEMBLER_RECIPES.recipeBuilder("assembly_line_unit") .inputItems(gear, Ruridit, 2) .inputItems(plate, Steel, 4) .inputItems(ROBOT_ARM_IV, 2) .inputItems(frameGt, TungstenSteel) - .outputItems(GTBlocks.CASING_ASSEMBLY_LINE, ConfigHolder.INSTANCE.recipes.casingsPerCraft) + .outputItems(GTBlocks.CASING_ASSEMBLY_UNIT, ConfigHolder.INSTANCE.recipes.casingsPerCraft) .duration(650) .EUt(VA[IV]) .save(provider); @@ -1353,8 +1353,8 @@ private static void registerRecyclingRecipes(Consumer provider) .save(provider); MACERATOR_RECIPES.recipeBuilder("macerate_red_granite") - .inputItems(rock, GraniteRed) - .outputItems(dust, GraniteRed) + .inputItems(rock, RedGranite) + .outputItems(dust, RedGranite) .chancedOutput(dust, Uranium238, 25) .duration(150).EUt(2) .save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java index 2825e6ddee7..d065d36eaa9 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java @@ -61,7 +61,7 @@ public static void init(Consumer provider) { registerMachineRecipe(provider, false, GTMachines.HULL, "PLP", "CHC", 'P', HULL_PLATE, 'L', PLATE, 'C', CABLE, 'H', CASING); - VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_coke_bricks", GTBlocks.CASING_COKE_BRICKS.asStack(), + VanillaRecipeHelper.addShapedRecipe(provider, true, "coke_oven_bricks", GTBlocks.CASING_COKE_BRICKS.asStack(), "XX", "XX", 'X', GTItems.COKE_OVEN_BRICK); VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_bronze_bricks", GTBlocks.CASING_BRONZE_BRICKS.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PhP", "PBP", @@ -97,21 +97,21 @@ public static void init(Consumer provider) { new MaterialEntry(TagPrefix.frameGt, GTMaterials.Europium)); VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_steel_turbine_casing", - GTBlocks.CASING_STEEL_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PhP", "PFP", + GTBlocks.CASING_MAGNALIUM_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PhP", "PFP", "PwP", 'P', new MaterialEntry(TagPrefix.plate, GTMaterials.Magnalium), 'F', new MaterialEntry(TagPrefix.frameGt, GTMaterials.BlueSteel)); VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_stainless_turbine_casing", GTBlocks.CASING_STAINLESS_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PhP", "PFP", "PwP", 'P', new MaterialEntry(TagPrefix.plate, GTMaterials.StainlessSteel), 'F', - GTBlocks.CASING_STEEL_TURBINE.asStack()); + GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()); VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_titanium_turbine_casing", GTBlocks.CASING_TITANIUM_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PhP", "PFP", "PwP", 'P', new MaterialEntry(TagPrefix.plate, GTMaterials.Titanium), 'F', - GTBlocks.CASING_STEEL_TURBINE.asStack()); + GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()); VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_tungstensteel_turbine_casing", GTBlocks.CASING_TUNGSTENSTEEL_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PhP", "PFP", "PwP", 'P', new MaterialEntry(TagPrefix.plate, GTMaterials.TungstenSteel), 'F', - GTBlocks.CASING_STEEL_TURBINE.asStack()); + GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()); VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_bronze_pipe", GTBlocks.CASING_BRONZE_PIPE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PIP", "IFI", "PIP", @@ -188,17 +188,17 @@ public static void init(Consumer provider) { new MaterialEntry(TagPrefix.frameGt, GTMaterials.TungstenSteel), 'G', new MaterialEntry(TagPrefix.gear, GTMaterials.TungstenSteel)); - VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_grate_casing", - GTBlocks.CASING_GRATE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PVP", "PFP", "PMP", 'P', + VanillaRecipeHelper.addShapedRecipe(provider, true, "assembly_line_grating", + GTBlocks.CASING_ASSEMBLY_GRATE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PVP", "PFP", "PMP", 'P', new ItemStack(Blocks.IRON_BARS, 1), 'F', new MaterialEntry(TagPrefix.frameGt, GTMaterials.Steel), 'M', GTItems.ELECTRIC_MOTOR_MV, 'V', new MaterialEntry(TagPrefix.rotor, GTMaterials.Steel)); - VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_assembly_control", + VanillaRecipeHelper.addShapedRecipe(provider, true, "assembly_control_casing", GTBlocks.CASING_ASSEMBLY_CONTROL.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "CPC", "SFE", "CMC", 'C', CustomTags.EV_CIRCUITS, 'P', GTItems.HIGH_POWER_INTEGRATED_CIRCUIT, 'S', GTItems.SENSOR_IV.asStack(), 'F', new MaterialEntry(TagPrefix.frameGt, GTMaterials.TungstenSteel), 'E', GTItems.EMITTER_IV.asStack(), 'M', GTItems.ELECTRIC_MOTOR_IV); - VanillaRecipeHelper.addShapedRecipe(provider, true, "casing_assembly_line", - GTBlocks.CASING_ASSEMBLY_LINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PGP", "AFA", + VanillaRecipeHelper.addShapedRecipe(provider, true, "assembly_line_unit", + GTBlocks.CASING_ASSEMBLY_UNIT.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PGP", "AFA", "PGP", 'P', new MaterialEntry(TagPrefix.plate, GTMaterials.Steel), 'G', new MaterialEntry(TagPrefix.gear, GTMaterials.Ruridit), 'A', GTItems.ROBOT_ARM_IV.asStack(), 'F', ChemicalHelper.get(TagPrefix.frameGt, GTMaterials.TungstenSteel)); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java index 62c29650a1e..16a125b9938 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MiscRecipeLoader.java @@ -175,8 +175,8 @@ public static void init(Consumer provider) { .save(provider); ROCK_BREAKER_RECIPES.recipeBuilder("red_granite") - .notConsumable(rock, GraniteRed) - .outputItems(rock, GraniteRed) + .notConsumable(rock, RedGranite) + .outputItems(rock, RedGranite) .adjacentFluids(FluidTags.LAVA, FluidTags.WATER) .duration(16) .EUt(VHA[EV]) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java index b842e48a72d..4a9a54f85a3 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/WoodMachineRecipes.java @@ -1118,7 +1118,7 @@ private static void registerPyrolyseOvenRecipes(Consumer provide PYROLYSE_RECIPES.recipeBuilder("log_to_heavy_oil").circuitMeta(3) .inputItems(ItemTags.LOGS_THAT_BURN, 16) .outputItems(dust, Ash, 4) - .outputFluids(OilHeavy.getFluid(200)) + .outputFluids(HeavyOil.getFluid(200)) .duration(320).EUt(192) .save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PetrochemRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PetrochemRecipes.java index 738e978c7e1..67e7dbc8a0f 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PetrochemRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PetrochemRecipes.java @@ -40,7 +40,7 @@ public static void init(Consumer provider) { .duration(20).EUt(96).save(provider); DISTILLATION_RECIPES.recipeBuilder("distill_light_oil") - .inputFluids(OilLight.getFluid(150)) + .inputFluids(LightOil.getFluid(150)) .outputFluids(SulfuricHeavyFuel.getFluid(10)) .outputFluids(SulfuricLightFuel.getFluid(20)) .outputFluids(SulfuricNaphtha.getFluid(30)) @@ -48,7 +48,7 @@ public static void init(Consumer provider) { .duration(20).EUt(96).save(provider); DISTILLATION_RECIPES.recipeBuilder("distill_heavy_oil") - .inputFluids(OilHeavy.getFluid(100)) + .inputFluids(HeavyOil.getFluid(100)) .outputFluids(SulfuricHeavyFuel.getFluid(250)) .outputFluids(SulfuricLightFuel.getFluid(45)) .outputFluids(SulfuricNaphtha.getFluid(15)) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/SeparationRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/SeparationRecipes.java index 5f5bd03361b..3693897e3c6 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/SeparationRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/SeparationRecipes.java @@ -50,13 +50,13 @@ public static void init(Consumer provider) { CENTRIFUGE_RECIPES.recipeBuilder("oilsands_ore_separation") .inputItems(ore, Oilsands) .chancedOutput(new ItemStack(Blocks.SAND), 7500) - .outputFluids(OilHeavy.getFluid(2000)) + .outputFluids(HeavyOil.getFluid(2000)) .duration(200).EUt(30).save(provider); CENTRIFUGE_RECIPES.recipeBuilder("oilsands_dust_separation") .inputItems(dust, Oilsands) .chancedOutput(new ItemStack(Blocks.SAND), 7500) - .outputFluids(OilHeavy.getFluid(2000)) + .outputFluids(HeavyOil.getFluid(2000)) .duration(200).EUt(30).save(provider); CENTRIFUGE_RECIPES.recipeBuilder("nether_wart_separation").duration(144).EUt(5) diff --git a/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java b/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java index 97133560c8e..88b1c5d51f8 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/tags/BlockTagLoader.java @@ -61,8 +61,8 @@ public static void init(RegistrateTagsProvider.IntrinsicImpl provider) { provider.addTag(BlockTags.REPLACEABLE) .add(GTMaterials.Oil.getFluid().defaultFluidState().createLegacyBlock().getBlock()) - .add(GTMaterials.OilLight.getFluid().defaultFluidState().createLegacyBlock().getBlock()) - .add(GTMaterials.OilHeavy.getFluid().defaultFluidState().createLegacyBlock().getBlock()) + .add(GTMaterials.LightOil.getFluid().defaultFluidState().createLegacyBlock().getBlock()) + .add(GTMaterials.HeavyOil.getFluid().defaultFluidState().createLegacyBlock().getBlock()) .add(GTMaterials.RawOil.getFluid().defaultFluidState().createLegacyBlock().getBlock()) .add(GTMaterials.NaturalGas.getFluid().defaultFluidState().createLegacyBlock().getBlock()); diff --git a/src/main/resources/assets/gtceu/models/block/variant/assembly_line.json b/src/main/resources/assets/gtceu/models/block/variant/assembly_line_unit.json similarity index 90% rename from src/main/resources/assets/gtceu/models/block/variant/assembly_line.json rename to src/main/resources/assets/gtceu/models/block/variant/assembly_line_unit.json index 50ae842ddbc..d79c805b053 100644 --- a/src/main/resources/assets/gtceu/models/block/variant/assembly_line.json +++ b/src/main/resources/assets/gtceu/models/block/variant/assembly_line_unit.json @@ -1,6 +1,6 @@ { "parent": "block/cube_all", "textures": { - "all": "gtceu:block/casings/mechanic/machine_casing_assembly_line" + "all": "gtceu:block/casings/mechanic/machine_casing_assembly_line_unit" } } \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/models/block/variant/assembly_line_active.json b/src/main/resources/assets/gtceu/models/block/variant/assembly_line_unit_active.json similarity index 83% rename from src/main/resources/assets/gtceu/models/block/variant/assembly_line_active.json rename to src/main/resources/assets/gtceu/models/block/variant/assembly_line_unit_active.json index 32a8880562c..df2cf5a8f86 100644 --- a/src/main/resources/assets/gtceu/models/block/variant/assembly_line_active.json +++ b/src/main/resources/assets/gtceu/models/block/variant/assembly_line_unit_active.json @@ -1,7 +1,7 @@ { "parent": "gtceu:block/cube_2_layer/all", "textures": { - "bot_all": "gtceu:block/casings/mechanic/machine_casing_assembly_line", - "top_all": "gtceu:block/casings/mechanic/machine_casing_assembly_line_bloom" + "bot_all": "gtceu:block/casings/mechanic/machine_casing_assembly_line_unit", + "top_all": "gtceu:block/casings/mechanic/machine_casing_assembly_line_unit_bloom" } } \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line.png b/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_unit.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line.png rename to src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_unit.png diff --git a/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_bloom.png b/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_unit_bloom.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_bloom.png rename to src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_unit_bloom.png diff --git a/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_bloom.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_unit_bloom.png.mcmeta similarity index 60% rename from src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_bloom.png.mcmeta rename to src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_unit_bloom.png.mcmeta index a3edcb551d9..9660e715fbc 100644 --- a/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_bloom.png.mcmeta +++ b/src/main/resources/assets/gtceu/textures/block/casings/mechanic/machine_casing_assembly_line_unit_bloom.png.mcmeta @@ -1,6 +1,6 @@ { - "animation":{ - "frametime":2 + "animation": { + "frametime": 2 }, "gtceu": { "bloom": true From fac59cfe06a5ec4367891450d2164497bb9d36d2 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Fri, 9 Oct 2026 11:56:15 +0300 Subject: [PATCH 45/83] you dont need to create an itemstack just to get the item!!!! --- .../gtceu/data/recipe/configurable/RecipeAddition.java | 2 +- .../gtceu/data/recipe/generated/PartsRecipeHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java index 82917fe78d5..7f13edb78d9 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java @@ -776,7 +776,7 @@ private static void stoneRods(Consumer provider) { .duration(20).EUt(VA[ULV]); for (var builder : new GTRecipeBuilder[] { cobblestone, stone }) { builder.addData(LatheRecipeLogic.LUBRICATED_ROD, - BuiltInRegistries.ITEM.getKey(ChemicalHelper.get(rod, Stone).getItem()).toString()) + BuiltInRegistries.ITEM.getKey(ChemicalHelper.getItemOrThrow(rod, Stone)).toString()) .outputItems(rod, Stone) .outputItems(dustSmall, Stone, 2) .save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java index 4e0daade9b1..a593ec515ec 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java @@ -465,7 +465,7 @@ private static void processRod(@NotNull Consumer provider, @NotN if (materialOutput == null) materialOutput = material; builder.addData(LatheRecipeLogic.LUBRICATED_ROD, - BuiltInRegistries.ITEM.getKey(ChemicalHelper.get(rod, materialOutput).getItem()).toString()) + BuiltInRegistries.ITEM.getKey(ChemicalHelper.getItemOrThrow(rod, materialOutput)).toString()) .outputItems(rod, materialOutput) .outputItems(dustSmall, materialOutput, 2) .save(provider); From f55839d2c09bccdbe65f543579ee852d81c49a33 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Fri, 9 Oct 2026 11:58:11 +0300 Subject: [PATCH 46/83] Add this line back to the gitignore (I deleted it accidentally) --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 689f688b23e..a42dac0b0f0 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /.gradle/ /output/ /bin/ +/libs/ .classpath */.factorypath From 0bd9bd1373b1772c5639af0c86ac54979301c83e Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Fri, 9 Oct 2026 11:58:19 +0300 Subject: [PATCH 47/83] Revert "Add this line back to the gitignore (I deleted it accidentally)" This reverts commit f55839d2c09bccdbe65f543579ee852d81c49a33. --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index a42dac0b0f0..689f688b23e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ /.gradle/ /output/ /bin/ -/libs/ .classpath */.factorypath From ce4d3a1b5b7680a69a1f9fde574f0da2b33efd8c Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Fri, 9 Oct 2026 11:58:20 +0300 Subject: [PATCH 48/83] Revert "you dont need to create an itemstack just to get the item!!!!" This reverts commit fac59cfe06a5ec4367891450d2164497bb9d36d2. --- .../gtceu/data/recipe/configurable/RecipeAddition.java | 2 +- .../gtceu/data/recipe/generated/PartsRecipeHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java index 7f13edb78d9..82917fe78d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/configurable/RecipeAddition.java @@ -776,7 +776,7 @@ private static void stoneRods(Consumer provider) { .duration(20).EUt(VA[ULV]); for (var builder : new GTRecipeBuilder[] { cobblestone, stone }) { builder.addData(LatheRecipeLogic.LUBRICATED_ROD, - BuiltInRegistries.ITEM.getKey(ChemicalHelper.getItemOrThrow(rod, Stone)).toString()) + BuiltInRegistries.ITEM.getKey(ChemicalHelper.get(rod, Stone).getItem()).toString()) .outputItems(rod, Stone) .outputItems(dustSmall, Stone, 2) .save(provider); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java index a593ec515ec..4e0daade9b1 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java @@ -465,7 +465,7 @@ private static void processRod(@NotNull Consumer provider, @NotN if (materialOutput == null) materialOutput = material; builder.addData(LatheRecipeLogic.LUBRICATED_ROD, - BuiltInRegistries.ITEM.getKey(ChemicalHelper.getItemOrThrow(rod, materialOutput)).toString()) + BuiltInRegistries.ITEM.getKey(ChemicalHelper.get(rod, materialOutput).getItem()).toString()) .outputItems(rod, materialOutput) .outputItems(dustSmall, materialOutput, 2) .save(provider); From 28b85d4118c1e646150b5e9791f5616e5bc071c7 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:17:34 +0300 Subject: [PATCH 49/83] oops! --- .../data_transformers/collections/SetTransformer.java | 4 +--- .../com/gregtechceu/gtceu/common/CommonEventListener.java | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) 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 a273bc35df1..f20ea5491db 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -7,6 +7,7 @@ import com.gregtechceu.gtceu.api.capability.compat.EUToFEProvider; import com.gregtechceu.gtceu.api.cosmetics.CapeRegistry; import com.gregtechceu.gtceu.api.cosmetics.event.RegisterGTCapesEvent; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.HazardProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.data.chemical.material.stack.MaterialEntry; @@ -48,6 +49,7 @@ import com.gregtechceu.gtceu.integration.map.cache.server.ServerCache; import com.gregtechceu.gtceu.utils.TaskHandler; +import com.mojang.datafixers.util.Either; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -85,6 +87,8 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.items.IItemHandler; +import java.util.function.UnaryOperator; + @Mod.EventBusSubscriber(modid = GTCEu.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class CommonEventListener { From 3c5a5d5c82f4fddcd12eca74d7a892d1a7e6d592 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:25:46 +0300 Subject: [PATCH 50/83] datagen + spotless --- .../blockstates/assembly_control_casing.json | 7 ++++ .../blockstates/assembly_line_casing.json | 7 ---- .../gtceu/blockstates/assembly_line_unit.json | 4 +-- .../blockstates/bricked_bronze_casing.json | 7 ++++ .../bricked_wrought_iron_casing.json | 7 ++++ .../blockstates/bronze_brick_casing.json | 7 ---- .../{oil_heavy.json => heavy_oil.json} | 2 +- .../{oil_light.json => light_oil.json} | 2 +- .../blockstates/magnalium_turbine_casing.json | 7 ++++ .../assets/gtceu/blockstates/oil_medium.json | 7 ---- .../blockstates/palladium_substation.json | 7 ---- .../palladium_substation_casing.json | 7 ++++ .../assets/gtceu/blockstates/raw_oil.json | 7 ++++ .../gtceu/blockstates/steel_brick_casing.json | 7 ---- .../blockstates/steel_turbine_casing.json | 7 ---- .../resources/assets/gtceu/lang/en_ud.json | 29 ++++++++--------- .../resources/assets/gtceu/lang/en_us.json | 30 ++++++++---------- ...sing.json => assembly_control_casing.json} | 0 ...casing.json => bricked_bronze_casing.json} | 0 ....json => bricked_wrought_iron_casing.json} | 0 .../assets/gtceu/models/block/heavy_oil.json | 5 +++ .../assets/gtceu/models/block/light_oil.json | 5 +++ ...ing.json => magnalium_turbine_casing.json} | 0 .../assets/gtceu/models/block/oil_heavy.json | 5 --- .../assets/gtceu/models/block/oil_light.json | 5 --- .../assets/gtceu/models/block/oil_medium.json | 5 --- ....json => palladium_substation_casing.json} | 0 .../assets/gtceu/models/block/raw_oil.json | 5 +++ .../models/item/assembly_control_casing.json | 3 ++ .../models/item/assembly_line_casing.json | 3 -- .../gtceu/models/item/assembly_line_unit.json | 2 +- .../models/item/bricked_bronze_casing.json | 3 ++ .../item/bricked_wrought_iron_casing.json | 3 ++ .../models/item/bronze_brick_casing.json | 3 -- .../models/item/magnalium_turbine_casing.json | 3 ++ .../models/item/palladium_substation.json | 3 -- .../item/palladium_substation_casing.json | 3 ++ .../gtceu/models/item/steel_brick_casing.json | 3 -- .../models/item/steel_turbine_casing.json | 3 -- ...sing.json => assembly_control_casing.json} | 4 +-- ...casing.json => bricked_bronze_casing.json} | 4 +-- ....json => bricked_wrought_iron_casing.json} | 4 +-- ...ion.json => magnalium_turbine_casing.json} | 4 +-- .../blocks/palladium_substation_casing.json | 21 ++++++++++++ .../blocks/steel_turbine_casing.json | 21 ------------ .../blocks/mineable/pickaxe_or_wrench.json | 10 +++--- .../configured_feature/raw_oil_sprout.json | 2 +- .../minecraft/tags/blocks/replaceable.json | 6 ++-- .../java/com/gregtechceu/gtceu/GTCEu.java | 14 ++++---- .../api/datafixer/fixes/FluidRenameFix.java | 9 ++++-- .../gtceu/common/CommonEventListener.java | 1 - .../common/data/datafixer/GTDataFixers.java | 2 +- .../gtceu/common/datafixer/schemas/V1_4.java | 1 + .../data/recipe/misc/MachineRecipeLoader.java | 18 ++++++++--- .../recipe/misc/MetaTileEntityLoader.java | 3 +- ...luid.oil_heavy.png => fluid.heavy_oil.png} | Bin .../block/fluids/fluid.heavy_oil.png.mcmeta | 5 +++ ...luid.oil_light.png => fluid.light_oil.png} | Bin .../block/fluids/fluid.light_oil.png.mcmeta | 5 +++ .../block/fluids/fluid.oil_heavy.png.mcmeta | 5 --- .../block/fluids/fluid.oil_light.png.mcmeta | 5 --- .../block/fluids/fluid.oil_medium.png.mcmeta | 5 --- ...fluid.oil_medium.png => fluid.raw_oil.png} | Bin .../block/fluids/fluid.raw_oil.png.mcmeta | 5 +++ 64 files changed, 187 insertions(+), 180 deletions(-) create mode 100644 src/generated/resources/assets/gtceu/blockstates/assembly_control_casing.json delete mode 100644 src/generated/resources/assets/gtceu/blockstates/assembly_line_casing.json create mode 100644 src/generated/resources/assets/gtceu/blockstates/bricked_bronze_casing.json create mode 100644 src/generated/resources/assets/gtceu/blockstates/bricked_wrought_iron_casing.json delete mode 100644 src/generated/resources/assets/gtceu/blockstates/bronze_brick_casing.json rename src/generated/resources/assets/gtceu/blockstates/{oil_heavy.json => heavy_oil.json} (50%) rename src/generated/resources/assets/gtceu/blockstates/{oil_light.json => light_oil.json} (50%) create mode 100644 src/generated/resources/assets/gtceu/blockstates/magnalium_turbine_casing.json delete mode 100644 src/generated/resources/assets/gtceu/blockstates/oil_medium.json delete mode 100644 src/generated/resources/assets/gtceu/blockstates/palladium_substation.json create mode 100644 src/generated/resources/assets/gtceu/blockstates/palladium_substation_casing.json create mode 100644 src/generated/resources/assets/gtceu/blockstates/raw_oil.json delete mode 100644 src/generated/resources/assets/gtceu/blockstates/steel_brick_casing.json delete mode 100644 src/generated/resources/assets/gtceu/blockstates/steel_turbine_casing.json rename src/generated/resources/assets/gtceu/models/block/{assembly_line_casing.json => assembly_control_casing.json} (100%) rename src/generated/resources/assets/gtceu/models/block/{bronze_brick_casing.json => bricked_bronze_casing.json} (100%) rename src/generated/resources/assets/gtceu/models/block/{steel_brick_casing.json => bricked_wrought_iron_casing.json} (100%) create mode 100644 src/generated/resources/assets/gtceu/models/block/heavy_oil.json create mode 100644 src/generated/resources/assets/gtceu/models/block/light_oil.json rename src/generated/resources/assets/gtceu/models/block/{steel_turbine_casing.json => magnalium_turbine_casing.json} (100%) delete mode 100644 src/generated/resources/assets/gtceu/models/block/oil_heavy.json delete mode 100644 src/generated/resources/assets/gtceu/models/block/oil_light.json delete mode 100644 src/generated/resources/assets/gtceu/models/block/oil_medium.json rename src/generated/resources/assets/gtceu/models/block/{palladium_substation.json => palladium_substation_casing.json} (100%) create mode 100644 src/generated/resources/assets/gtceu/models/block/raw_oil.json create mode 100644 src/generated/resources/assets/gtceu/models/item/assembly_control_casing.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/assembly_line_casing.json create mode 100644 src/generated/resources/assets/gtceu/models/item/bricked_bronze_casing.json create mode 100644 src/generated/resources/assets/gtceu/models/item/bricked_wrought_iron_casing.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/bronze_brick_casing.json create mode 100644 src/generated/resources/assets/gtceu/models/item/magnalium_turbine_casing.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/palladium_substation.json create mode 100644 src/generated/resources/assets/gtceu/models/item/palladium_substation_casing.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/steel_brick_casing.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/steel_turbine_casing.json rename src/generated/resources/data/gtceu/loot_tables/blocks/{bronze_brick_casing.json => assembly_control_casing.json} (72%) rename src/generated/resources/data/gtceu/loot_tables/blocks/{assembly_line_casing.json => bricked_bronze_casing.json} (73%) rename src/generated/resources/data/gtceu/loot_tables/blocks/{steel_brick_casing.json => bricked_wrought_iron_casing.json} (71%) rename src/generated/resources/data/gtceu/loot_tables/blocks/{palladium_substation.json => magnalium_turbine_casing.json} (72%) create mode 100644 src/generated/resources/data/gtceu/loot_tables/blocks/palladium_substation_casing.json delete mode 100644 src/generated/resources/data/gtceu/loot_tables/blocks/steel_turbine_casing.json rename src/main/resources/assets/gtceu/textures/block/fluids/{fluid.oil_heavy.png => fluid.heavy_oil.png} (100%) create mode 100644 src/main/resources/assets/gtceu/textures/block/fluids/fluid.heavy_oil.png.mcmeta rename src/main/resources/assets/gtceu/textures/block/fluids/{fluid.oil_light.png => fluid.light_oil.png} (100%) create mode 100644 src/main/resources/assets/gtceu/textures/block/fluids/fluid.light_oil.png.mcmeta delete mode 100644 src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_heavy.png.mcmeta delete mode 100644 src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_light.png.mcmeta delete mode 100644 src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_medium.png.mcmeta rename src/main/resources/assets/gtceu/textures/block/fluids/{fluid.oil_medium.png => fluid.raw_oil.png} (100%) create mode 100644 src/main/resources/assets/gtceu/textures/block/fluids/fluid.raw_oil.png.mcmeta 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/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/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 ac2b5396b87..ce1417aa177 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -125,10 +125,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ɐᗺ", @@ -144,8 +144,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ɹᗺ", @@ -160,8 +161,6 @@ "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.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ɔɹɐɥƆ", @@ -788,6 +787,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", @@ -1033,7 +1033,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ıꞀɟ§", @@ -1119,7 +1119,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ǝʞɔıɹᗺ", @@ -1137,7 +1137,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", @@ -1147,7 +1146,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", @@ -2417,6 +2415,7 @@ "gtceu.fluid.liquid_generic": "%s pınbıꞀ", "gtceu.fluid.molten": "%s uǝʇןoW", "gtceu.fluid.plasma": "ɐɯsɐןԀ %s", + "gtceu.fluid.requires_metal_freezing": "buızǝǝɹɟ ןɐʇǝɯ sǝɹınbǝᴚ", "gtceu.fluid.state_gas": "snoǝsɐ⅁ :ǝʇɐʇSɐ§", "gtceu.fluid.state_liquid": "pınbıꞀ :ǝʇɐʇSɐ§", "gtceu.fluid.state_plasma": "ɐɯsɐןԀ :ǝʇɐʇSɐ§", @@ -5424,7 +5423,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ɐɹ⅁", @@ -5440,6 +5438,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", @@ -5500,6 +5499,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ıꞀ", @@ -5592,14 +5592,10 @@ "material.gtceu.nitrosyl_chloride": "ǝpıɹoןɥƆ ןʎsoɹʇıN", "material.gtceu.nitrous_oxide": "ǝpıxO snoɹʇıN", "material.gtceu.nobelium": "ɯnıןǝqoN", - "material.gtceu.null": "ןןnN", "material.gtceu.obsidian": "uɐıpısqO", "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", @@ -5675,12 +5671,14 @@ "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_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ǝᴚ", @@ -6043,7 +6041,6 @@ "tagprefix.marble": "ǝɹO %s ǝןqɹɐW", "tagprefix.netherrack": "ǝɹO %s ɹǝɥʇǝN", "tagprefix.nugget": "ʇǝbbnN %s", - "tagprefix.null": "ןןnN %s", "tagprefix.pipe_huge_fluid": "ǝdıԀ pınןℲ %s ǝbnH", "tagprefix.pipe_huge_item": "ǝdıԀ ɯǝʇI %s ǝbnH", "tagprefix.pipe_huge_restrictive": "ǝdıԀ ɯǝʇI %s ǝʌıʇɔıɹʇsǝᴚ ǝbnH", @@ -6115,4 +6112,4 @@ "tooltip.gtceu.hazard_trigger.skin_contact": "ʇɔɐʇuoɔ uıʞS", "tooltip.gtceu.medical_condition.description": "sןıɐʇǝp ʍoɥs oʇ ʇɟıɥS pןoHㄥ§ S∩OᗡᴚⱯZⱯHɔ§ן§", "tooltip.gtceu.medical_condition.description_shift": ":S∩OᗡᴚⱯZⱯHɔ§ן§" -} +} \ No newline at end of file diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 631ed9b986d..5531e40444d 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -125,10 +125,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", @@ -144,8 +144,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", @@ -160,8 +161,6 @@ "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.causality_hazard_sign_block": "Causality Hazard Sign Block", "block.gtceu.central_monitor": "Central Monitor", "block.gtceu.charcoal_pile_igniter": "Charcoal Pile Igniter", @@ -788,6 +787,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", @@ -1033,7 +1033,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!", @@ -1119,7 +1119,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", @@ -1137,7 +1137,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", @@ -1147,7 +1146,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", @@ -2416,8 +2414,8 @@ "gtceu.fluid.generic": "%s", "gtceu.fluid.liquid_generic": "Liquid %s", "gtceu.fluid.molten": "Molten %s", - "gtceu.fluid.requires_metal_freezing": "Requires metal freezing", "gtceu.fluid.plasma": "%s Plasma", + "gtceu.fluid.requires_metal_freezing": "Requires metal freezing", "gtceu.fluid.state_gas": "§aState: Gaseous", "gtceu.fluid.state_liquid": "§aState: Liquid", "gtceu.fluid.state_plasma": "§aState: Plasma", @@ -5425,7 +5423,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", @@ -5441,6 +5438,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", @@ -5501,6 +5499,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", @@ -5593,14 +5592,10 @@ "material.gtceu.nitrosyl_chloride": "Nitrosyl Chloride", "material.gtceu.nitrous_oxide": "Nitrous Oxide", "material.gtceu.nobelium": "Nobelium", - "material.gtceu.null": "Null", "material.gtceu.obsidian": "Obsidian", "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", @@ -5676,12 +5671,14 @@ "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_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", @@ -6044,7 +6041,6 @@ "tagprefix.marble": "Marble %s Ore", "tagprefix.netherrack": "Nether %s Ore", "tagprefix.nugget": "%s Nugget", - "tagprefix.null": "%s Null", "tagprefix.pipe_huge_fluid": "Huge %s Fluid Pipe", "tagprefix.pipe_huge_item": "Huge %s Item Pipe", "tagprefix.pipe_huge_restrictive": "Huge Restrictive %s Item Pipe", @@ -6116,4 +6112,4 @@ "tooltip.gtceu.hazard_trigger.skin_contact": "Skin contact", "tooltip.gtceu.medical_condition.description": "§l§cHAZARDOUS §7Hold Shift to show details", "tooltip.gtceu.medical_condition.description_shift": "§l§cHAZARDOUS:" -} +} \ No newline at end of file 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/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/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/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/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/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 8294ac167a5..af5efbff1d0 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -6,7 +6,6 @@ import com.gregtechceu.gtceu.common.CommonProxy; import com.gregtechceu.gtceu.utils.FormattingUtil; -import com.mojang.datafixers.DataFixUtils; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -18,6 +17,7 @@ import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.server.ServerLifecycleHooks; +import com.mojang.datafixers.DataFixUtils; import dev.emi.emi.config.EmiConfig; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -35,17 +35,17 @@ public class GTCEu { public static final Path GTCEU_FOLDER = getGameDir().resolve("gtceu"); /** - * Only used for datafixers. Bump whenever a block changes id, save data layout changes, etc.
    - * Should be bumped up to the next multiple of 10 the first time it is bumped after a release, then by 1 for each - * subsequent change. + * 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. * *

    * Example versions: *

      *
    • 0: 7.5.3
    • - *
    • 10: 8.0.0-SNAPSHOT+HASH1
    • // TODO set the correct hash here - *
    • 11: 8.0.0-SNAPSHOT+HASH2
    • - *
    • 20: 8.0.1-SNAPSHOT+HASH2
    • + *
    • 1.0: 8.0.0-SNAPSHOT+HASH1
    • // TODO set the correct hash here + *
    • 1.1: 8.0.0-SNAPSHOT+HASH2
    • + *
    • 2.0: 8.0.1-SNAPSHOT+HASH2
    • *
    */ public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 5); 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 index 85b6bb3df66..af78321d7b0 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java @@ -1,18 +1,21 @@ 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 net.minecraft.util.datafix.schemas.NamespacedSchema; 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) { @@ -21,7 +24,8 @@ public FluidRenameFix(Schema outputSchema, String name) { } public TypeRewriteRule makeRule() { - Type> type = DSL.named(GTReferences.FLUID_NAME.typeName(), NamespacedSchema.namespacedString()); + 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 { @@ -33,6 +37,7 @@ public TypeRewriteRule makeRule() { public static DataFix create(Schema outputSchema, String name, final Function fixer) { return new net.minecraft.util.datafix.fixes.ItemRenameFix(outputSchema, name) { + protected String fixItem(String item) { return fixer.apply(item); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index f20ea5491db..87302ca9ef7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -68,7 +68,6 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.ChunkPos; 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.*; 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 index 2724b175d92..8daf6db7362 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -178,7 +178,7 @@ private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema sc } private static void createBlockItemFluidRenameFix(DataFixerBuilder builder, Schema schema, String name, - UnaryOperator renamer) { + UnaryOperator renamer) { createBlockItemRenameFix(builder, schema, name, renamer); builder.addFixer(FluidRenameFix.create(schema, name + " for fluid", renamer)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java index acfd8f909b5..0ecca8150fe 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; + import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java index 6ca881b9a0e..fe436038b9d 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MachineRecipeLoader.java @@ -860,23 +860,31 @@ private static void registerAssemblerRecipes(Consumer provider) .duration(100).cleanroom(CleanroomType.CLEANROOM) .addMaterialInfo(true, true).save(provider); - WELDER_RECIPES.recipeBuilder("casing_magnalium_turbine").EUt(16).inputItems(plate, Magnalium, 6) - .inputItems(frameGt, BlueSteel, 1).circuitMeta(6) + WELDER_RECIPES.recipeBuilder("casing_magnalium_turbine").EUt(16) + .inputItems(plate, Magnalium, 6) + .inputItems(frameGt, BlueSteel, 1) + .circuitMeta(6) .outputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) .addMaterialInfo(true).save(provider); WELDER_RECIPES.recipeBuilder("casing_stainless_steel_turbine").EUt(16) - .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()).inputItems(plate, StainlessSteel, 6).circuitMeta(6) + .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()) + .inputItems(plate, StainlessSteel, 6) + .circuitMeta(6) .outputItems(GTBlocks.CASING_STAINLESS_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) .addMaterialInfo(true).save(provider); WELDER_RECIPES.recipeBuilder("casing_titanium_turbine").EUt(16) - .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()).inputItems(plate, Titanium, 6).circuitMeta(6) + .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()) + .inputItems(plate, Titanium, 6) + .circuitMeta(6) .outputItems(GTBlocks.CASING_TITANIUM_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) .addMaterialInfo(true).save(provider); WELDER_RECIPES.recipeBuilder("casing_tungstensteel_turbine").EUt(16) - .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()).inputItems(plate, TungstenSteel, 6).circuitMeta(6) + .inputItems(GTBlocks.CASING_MAGNALIUM_TURBINE.asStack()) + .inputItems(plate, TungstenSteel, 6) + .circuitMeta(6) .outputItems( GTBlocks.CASING_TUNGSTENSTEEL_TURBINE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft)) .duration(50) diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java index d065d36eaa9..92a9ab5ea2d 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/MetaTileEntityLoader.java @@ -189,7 +189,8 @@ public static void init(Consumer provider) { new MaterialEntry(TagPrefix.gear, GTMaterials.TungstenSteel)); VanillaRecipeHelper.addShapedRecipe(provider, true, "assembly_line_grating", - GTBlocks.CASING_ASSEMBLY_GRATE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PVP", "PFP", "PMP", 'P', + GTBlocks.CASING_ASSEMBLY_GRATE.asStack(ConfigHolder.INSTANCE.recipes.casingsPerCraft), "PVP", "PFP", + "PMP", 'P', new ItemStack(Blocks.IRON_BARS, 1), 'F', new MaterialEntry(TagPrefix.frameGt, GTMaterials.Steel), 'M', GTItems.ELECTRIC_MOTOR_MV, 'V', new MaterialEntry(TagPrefix.rotor, GTMaterials.Steel)); VanillaRecipeHelper.addShapedRecipe(provider, true, "assembly_control_casing", diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_heavy.png b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.heavy_oil.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_heavy.png rename to src/main/resources/assets/gtceu/textures/block/fluids/fluid.heavy_oil.png diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.heavy_oil.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.heavy_oil.png.mcmeta new file mode 100644 index 00000000000..24381e6cd16 --- /dev/null +++ b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.heavy_oil.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_light.png b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.light_oil.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_light.png rename to src/main/resources/assets/gtceu/textures/block/fluids/fluid.light_oil.png diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.light_oil.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.light_oil.png.mcmeta new file mode 100644 index 00000000000..24381e6cd16 --- /dev/null +++ b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.light_oil.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_heavy.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_heavy.png.mcmeta deleted file mode 100644 index 0df7234a792..00000000000 --- a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_heavy.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation":{ - "frametime":2 - } -} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_light.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_light.png.mcmeta deleted file mode 100644 index 0df7234a792..00000000000 --- a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_light.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation":{ - "frametime":2 - } -} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_medium.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_medium.png.mcmeta deleted file mode 100644 index 0df7234a792..00000000000 --- a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_medium.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation":{ - "frametime":2 - } -} \ No newline at end of file diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_medium.png b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.raw_oil.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/fluids/fluid.oil_medium.png rename to src/main/resources/assets/gtceu/textures/block/fluids/fluid.raw_oil.png diff --git a/src/main/resources/assets/gtceu/textures/block/fluids/fluid.raw_oil.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.raw_oil.png.mcmeta new file mode 100644 index 00000000000..24381e6cd16 --- /dev/null +++ b/src/main/resources/assets/gtceu/textures/block/fluids/fluid.raw_oil.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} \ No newline at end of file From 45d3c1f9f09db8d4343851504dcd550c3d55e626 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:39:19 +0300 Subject: [PATCH 51/83] ?????? --- .../java/com/gregtechceu/gtceu/common/CommonEventListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index 87302ca9ef7..a949b402d36 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -49,7 +49,6 @@ import com.gregtechceu.gtceu.integration.map.cache.server.ServerCache; import com.gregtechceu.gtceu.utils.TaskHandler; -import com.mojang.datafixers.util.Either; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; @@ -86,6 +85,8 @@ import net.minecraftforge.fml.common.Mod; import net.minecraftforge.items.IItemHandler; +import com.mojang.datafixers.util.Either; + import java.util.function.UnaryOperator; @Mod.EventBusSubscriber(modid = GTCEu.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) From 4dbaff5ac74d7cd665364b24eeb799ce48220ab5 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 11:55:29 +0300 Subject: [PATCH 52/83] Fix Raw Palladium's name --- .../java/com/gregtechceu/gtceu/common/data/GTMaterials.java | 2 +- .../gtceu/common/data/datafixer/GTDataFixers.java | 2 ++ .../gtceu/common/data/materials/SecondDegreeMaterials.java | 2 +- .../java/com/gregtechceu/gtceu/data/lang/LangHandler.java | 6 +++--- .../recipe/serialized/chemistry/PlatGroupMetalsRecipes.java | 4 ++-- 5 files changed, 9 insertions(+), 7 deletions(-) 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 25e13352cad..b5f1eb80462 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java @@ -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; 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 index 8daf6db7362..f9554555c40 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -157,6 +157,8 @@ public static void addFixers(DataFixerBuilder builder) { createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); createMaterialRenameFix(builder, v1_5, "Fix Oil variant names", createRenamer(OilVariantsRenameFix.RENAMED_IDS)); + createMaterialRenameFix(builder, v1_5, "Fix Raw Palladium name", + createRenamer(Pattern.compile("gtceu:(.*)palladium_raw"), "gtceu:$1raw_palladium")); createBlockItemRenameFix(builder, v1_5, "Fix Palladium Substation Casing name", createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java b/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java index 1d4534dbeac..a7036655e2a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/materials/SecondDegreeMaterials.java @@ -461,7 +461,7 @@ public static void register() { .components(SiliconDioxide, 2, Gold, 3) .buildAndRegister(); - PalladiumRaw = new Material.Builder(GTCEu.id("palladium_raw")) + RawPalladium = new Material.Builder(GTCEu.id("raw_palladium")) .dust() .color(0x5d4e1a).secondaryColor(0x33352d).iconSet(METALLIC) .flags(DISABLE_DECOMPOSITION) diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index 308a26c59e0..f5a108a7441 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -750,9 +750,9 @@ public static void init(RegistrateLangProvider provider) { provider.add("item.gtceu.tiny_platinum_raw_dust", "Tiny Pile of Raw Platinum Powder"); provider.add("item.gtceu.small_platinum_raw_dust", "Small Pile of Raw Platinum Powder"); provider.add("item.gtceu.platinum_raw_dust", "Raw Platinum Powder"); - provider.add("item.gtceu.tiny_palladium_raw_dust", "Tiny Pile of Raw Palladium Powder"); - provider.add("item.gtceu.small_palladium_raw_dust", "Small Pile of Raw Palladium Powder"); - provider.add("item.gtceu.palladium_raw_dust", "Raw Palladium Powder"); + provider.add("item.gtceu.tiny_raw_palladium_dust", "Tiny Pile of Raw Palladium Powder"); + provider.add("item.gtceu.small_raw_palladium_dust", "Small Pile of Raw Palladium Powder"); + provider.add("item.gtceu.raw_palladium_dust", "Raw Palladium Powder"); provider.add("item.gtceu.tiny_inert_metal_mixture_dust", "Tiny Pile of Inert Metal Mixture"); provider.add("item.gtceu.small_inert_metal_mixture_dust", "Small Pile of Inert Metal Mixture"); provider.add("item.gtceu.inert_metal_mixture_dust", "Inert Metal Mixture"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PlatGroupMetalsRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PlatGroupMetalsRecipes.java index 89b3a5a9ff8..698e168cdee 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PlatGroupMetalsRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/serialized/chemistry/PlatGroupMetalsRecipes.java @@ -89,7 +89,7 @@ public static void init(Consumer provider) { .inputItems(dust, PlatinumGroupSludge, 6) .inputFluids(AquaRegia.getFluid(1200)) .outputItems(dust, PlatinumRaw, 3) // PtCl2 - .outputItems(dust, PalladiumRaw, 3) // PdNH3 + .outputItems(dust, RawPalladium, 3) // PdNH3 .outputItems(dust, InertMetalMixture, 2) // RhRuO4 .outputItems(dust, RarestMetalMixture) // IrOsO4(H2O) .outputItems(dust, PlatinumSludgeResidue, 2) @@ -106,7 +106,7 @@ public static void init(Consumer provider) { // PALLADIUM CHEMICAL_RECIPES.recipeBuilder("raw_palladium_separation").duration(200).EUt(VA[MV]) - .inputItems(dust, PalladiumRaw, 5) + .inputItems(dust, RawPalladium, 5) .inputFluids(HydrochloricAcid.getFluid(1000)) .outputItems(dust, Palladium) .outputItems(dust, AmmoniumChloride, 2) From 6e8c16990eade214d33e4be52668df6154825dd4 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 14:10:26 +0300 Subject: [PATCH 53/83] Move clear glass lens lang change to the correct place --- src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java | 1 - src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java b/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java index 3a1969c4ca0..c21029bb12a 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/ItemLang.java @@ -159,7 +159,6 @@ private static void initItemTooltips(RegistrateLangProvider provider) { provider.add("item.gtceu.circuit.integrated.gui", "§7Programmed Circuit Configuration"); // multilineLang(provider, "item.gtceu.circuit.integrated.jei_description", "JEI is only showing recipes for the // given configuration.\n\nYou can select a configuration in the Programmed Circuit configuration tab."); - provider.add("item.glass_lens", "Glass Lens (White)"); // todo move to material overrides provider.add("item.gtceu.silicon_boule.tooltip", "§7Raw Circuit"); provider.add("item.gtceu.phosphorus_boule.tooltip", "§7Raw Circuit"); provider.add("item.gtceu.naquadah_boule.tooltip", "§7Raw Circuit"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index f5a108a7441..2a6bcbe2870 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -690,6 +690,7 @@ public static void init(RegistrateLangProvider provider) { provider.add("item.gtceu.flawless_glass_gem", "Flawless Glass Crystal"); provider.add("item.gtceu.exquisite_glass_gem", "Exquisite Glass Crystal"); provider.add("item.gtceu.glass_plate", "Glass Pane"); + provider.add("item.gtceu.glass_lens", "Glass Lens (White)"); provider.add("item.gtceu.tiny_blaze_dust", "Tiny Pile of Blaze Powder"); provider.add("item.gtceu.small_blaze_dust", "Small Pile of Blaze Powder"); provider.add("item.gtceu.tiny_sugar_dust", "Tiny Pile of Sugar"); From 70c62265345083eaa989e5e99797e81208bda660 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 15:35:06 +0300 Subject: [PATCH 54/83] Replace the single turbine rotor item with per-material items --- .../resources/assets/gtceu/lang/en_ud.json | 4 +- .../resources/assets/gtceu/lang/en_us.json | 4 +- .../material/info/MaterialIconType.java | 1 + .../gtceu/api/data/tag/TagPrefix.java | 26 +++-- .../api/item/component/IMaterialPartItem.java | 9 +- .../gtceu/common/data/GTItems.java | 7 -- .../gtceu/common/data/GTMaterials.java | 2 + .../common/data/datafixer/GTDataFixers.java | 18 ++-- .../fixes/ItemStackTurbineRotorFix.java | 56 ++++++++++ .../gtceu/common/datafixer/schemas/V0.java | 28 +++-- .../gtceu/common/datafixer/schemas/V1_3.java | 9 -- .../gtceu/common/datafixer/schemas/V1_5.java | 43 ++++++++ .../gtceu/common/item/TurbineRotorItem.java | 49 +++++++++ .../item/behavior/TurbineRotorBehaviour.java | 98 ------------------ .../part/RotorHolderPartMachine.java | 67 +++++------- .../trait/customlogic/ArcFurnaceLogic.java | 70 ++++++------- .../trait/customlogic/MaceratorLogic.java | 66 ++++++------ .../core/mixins/datafixer/V705Accessor.java | 15 +++ .../gtceu/data/lang/LangHandler.java | 10 +- .../recipe/generated/PartsRecipeHandler.java | 9 +- .../recipeviewer/emi/GTEMIPlugin.java | 2 - .../recipeviewer/jei/GTJEIPlugin.java | 1 - .../resources/assets/gtceu/lang/de_de.json | 4 +- .../resources/assets/gtceu/lang/ja_jp.json | 4 +- .../resources/assets/gtceu/lang/pt_br.json | 4 +- .../resources/assets/gtceu/lang/ru_ru.json | 4 +- .../resources/assets/gtceu/lang/uk_ua.json | 4 +- .../resources/assets/gtceu/lang/zh_cn.json | 4 +- .../resources/assets/gtceu/lang/zh_tw.json | 4 +- .../material_sets/dull/turbine_rotor.json | 8 ++ .../item/material_sets/dull/turbine_rotor.png | Bin 0 -> 493 bytes .../dull/turbine_rotor_overlay.png | Bin 0 -> 216 bytes .../dull/turbine_rotor_secondary.png | Bin 0 -> 521 bytes src/main/resources/gtceu.mixins.json | 5 +- .../electric/LargeSteamTurbineTest.java | 53 ++++------ 35 files changed, 373 insertions(+), 315 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java create mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java create mode 100644 src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json create mode 100644 src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor.png create mode 100644 src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_overlay.png create mode 100644 src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_secondary.png diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index ce1417aa177..868670d8e12 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -5954,8 +5954,8 @@ "metaitem.terminal.tooltip.hardware": "%d :ǝɹɐʍpɹɐHɐ§", "metaitem.tool.tooltip.durability": "%d / %dɐ§ :ʎʇıןıqɐɹnᗡɟ§", "metaitem.tool.tooltip.primary_material": "%sǝ§ :ןɐıɹǝʇɐWɟ§", - "metaitem.tool.tooltip.rotor.efficiency": "%d%%6§ :ʎɔuǝıɔıɟɟƎ ǝuıqɹn⟘", - "metaitem.tool.tooltip.rotor.power": "%d%%6§ :ɹǝʍoԀ ǝuıqɹn⟘", + "item.gtceu.turbine_rotor.tooltip.efficiency": "%d%%6§ :ʎɔuǝıɔıɟɟƎ ǝuıqɹn⟘", + "item.gtceu.turbine_rotor.tooltip.power": "%d%%6§ :ɹǝʍoԀ ǝuıqɹn⟘", "metaitem.tricorder_scanner.tooltip": "ɹǝpɹoɔıɹ⟘", "monitor.gui.title.argb": ":ᗺ⅁ᴚⱯ", "monitor.gui.title.back": "ʞɔɐᗺ", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 5531e40444d..658f1f9f6a7 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -5954,8 +5954,8 @@ "metaitem.terminal.tooltip.hardware": "§aHardware: %d", "metaitem.tool.tooltip.durability": "§fDurability: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fMaterial: §e%s", - "metaitem.tool.tooltip.rotor.efficiency": "Turbine Efficiency: §9%d%%", - "metaitem.tool.tooltip.rotor.power": "Turbine Power: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "Turbine Efficiency: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.power": "Turbine Power: §9%d%%", "metaitem.tricorder_scanner.tooltip": "Tricorder", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Back", diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java index ac31094570c..ff8aa3faac2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java @@ -89,6 +89,7 @@ public record MaterialIconType(String name) { public static final MaterialIconType toolHeadWireCutter = new MaterialIconType("toolHeadWireCutter"); public static final MaterialIconType turbineBlade = new MaterialIconType("turbineBlade"); + public static final MaterialIconType turbineRotor = new MaterialIconType("turbineRotor"); // BLOCK TEXTURES public static final MaterialIconType liquid = new MaterialIconType("liquid"); 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 5ed5c943610..f740a9d1a00 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 @@ -21,6 +21,7 @@ import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.item.TurbineRotorItem; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.gregtechceu.gtceu.integration.kjs.GTRegistryInfo; @@ -574,7 +575,7 @@ public static TagPrefix get(String name) { .generateItem(true) .generationCondition(mat -> mat.hasFlag(MaterialFlags.GENERATE_FINE_WIRE)); - // consisting out of 4 Plates, 1 Ring and 1 Screw. + // consisting out of 4 Plates and 1 Ring. public static final TagPrefix rotor = new TagPrefix(GTCEu.id("rotor")) .defaultTagPath("rotors/%s") .unformattedTagPath("rotors") @@ -698,17 +699,30 @@ public static TagPrefix get(String name) { .generationCondition(hasNoCraftingToolProperty.and(mat -> mat.hasFlag(MaterialFlags.GENERATE_PLATE)) .and(mat -> mat.getProperty(PropertyKey.TOOL).hasType(GTToolType.WIRE_CUTTER_LV))); - // made of 5 Ingots. - public static final TagPrefix turbineBlade = new TagPrefix(GTCEu.id("turbineBlade")) + // made of 5 Double Plates and 2 Screws. + public static final TagPrefix turbineBlade = new TagPrefix(GTCEu.id("turbine_blade")) .langValue("%s Turbine Blade") - .materialAmount(GTValues.M * 10) + .materialAmount(GTValues.M * 92 / 9) .materialIconType(MaterialIconType.turbineBlade) .unificationEnabled(true) .enableRecycling() .generateItem(true) .generationCondition(hasRotorProperty - .and(m -> m.hasFlags(MaterialFlags.GENERATE_BOLT_SCREW, MaterialFlags.GENERATE_PLATE) && - !m.hasProperty(PropertyKey.GEM))); + .and(m -> m.hasFlags(MaterialFlags.GENERATE_BOLT_SCREW, MaterialFlags.GENERATE_PLATE)) + .and(hasGemProperty.negate())); + + // made of 8 Turbine Blades. + public static final TagPrefix turbineRotor = new TagPrefix(GTCEu.id("turbine_rotor")) + .langValue("%s Turbine Rotor") + .materialAmount(GTValues.M * 92 / 9) + .materialIconType(MaterialIconType.turbineRotor) + .unificationEnabled(true) + .generateItem(true) + .itemConstructor(TurbineRotorItem::new) + .generationCondition(hasRotorProperty + .and(m -> m.hasFlags(MaterialFlags.GENERATE_BOLT_SCREW, MaterialFlags.GENERATE_PLATE)) + .and(hasGemProperty.negate())) + .tooltip((mat, tooltips) -> tooltips.add(Component.translatable("item.gtceu.turbine_rotor.tooltip"))); // Storage Block consisting out of 9 Ingots/Gems/Dusts. public static final TagPrefix block = new TagPrefix(GTCEu.id("block")) diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java index 4d32809168c..3cdf2db04c4 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java @@ -21,6 +21,13 @@ import java.util.List; +/** + * @deprecated Create separate items for every material instead. If you want custom functionality, check + * {@link com.gregtechceu.gtceu.api.data.tag.TagPrefix#turbineRotor TagPrefix.turbineRotor}. + * + * @see com.gregtechceu.gtceu.api.data.tag.TagPrefix#turbineRotor TagPrefix.turbineRotor + */ +@Deprecated(forRemoval = true) public interface IMaterialPartItem extends IItemComponent, IDurabilityBar, IAddInformation, ICustomDescriptionId { int getPartMaxDurability(ItemStack itemStack); @@ -82,7 +89,7 @@ default void appendHoverText(ItemStack stack, @org.jetbrains.annotations.Nullabl var maxDurability = getPartMaxDurability(stack); var damage = getPartDamage(stack); tooltipComponents - .add(Component.translatable("metaitem.tool.tooltip.durability", maxDurability - damage, maxDurability)); + .add(Component.translatable("item.durability", maxDurability - damage, maxDurability)); tooltipComponents .add(Component.translatable("metaitem.tool.tooltip.primary_material", material.getLocalizedName())); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java index 144bd6253dc..ccc6ebd49e2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java @@ -2189,13 +2189,6 @@ public static ItemEntry createFluidCell(Material mat, int capacit } } - public static ItemEntry TURBINE_ROTOR = REGISTRATE.item("turbine_rotor", ComponentItem::create) - .lang("%s Turbine Rotor") - .properties(p -> p.stacksTo(1)) - .model((ctx, prov) -> createTextureModel(ctx, prov, GTCEu.id("item/tools/turbine"))) - .color(() -> IMaterialPartItem::getItemStackColor) - .onRegister(attach(new TurbineRotorBehaviour())).register(); - public static ItemEntry NEURO_PROCESSOR = REGISTRATE.item("neuro_processing_unit", Item::new) .lang("Neuro Processing Unit").register(); public static ItemEntry STEM_CELLS = REGISTRATE.item("stem_cells", Item::new) 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 b5f1eb80462..9f87be29911 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java @@ -223,6 +223,8 @@ public static void init() { cableGtOctal.addSecondaryMaterial(new MaterialStack(Rubber, plate.materialAmount() * 3)); cableGtHex.addSecondaryMaterial(new MaterialStack(Rubber, plate.materialAmount() * 5)); + turbineRotor.addSecondaryMaterial(new MaterialStack(Magnalium, rodLong.materialAmount())); + plateDouble.setIgnored(BorosilicateGlass); plateDouble.setIgnored(Wood); plateDouble.setIgnored(TreatedWood); 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 index f9554555c40..023272b1575 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -107,20 +107,21 @@ public static void init() {} public static void addFixers(DataFixerBuilder builder) { builder.addSchema(new V0(DataFixUtils.makeKey(0), DataFixHelper.getLatestVanillaSchema())); - Schema v1 = builder.addSchema(1, V1::new); - createBlockItemRenameFix(builder, v1, "Rename RTM Alloy Coil Block", + Schema v1_0 = builder.addSchema(1, V1::new); + builder.addFixer(new AddNewChoices(v1_0, "Added High Pressure Steam Miner", References.BLOCK_ENTITY)); + createBlockItemRenameFix(builder, v1_0, "Rename RTM Alloy Coil Block", createRenamer("tungstensteel_coil_block", "rtm_alloy_coil_block")); - builder.addFixer(ItemRenameFix.create(v1, "Fix Advanced Nanomuscle Chestplate name", + builder.addFixer(ItemRenameFix.create(v1_0, "Fix Advanced Nanomuscle Chestplate name", createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); - builder.addFixer(ItemRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", + builder.addFixer(ItemRenameFix.create(v1_0, "Rename Tungstensteel Fluid Cell", createRenamer("gtceu:tungstensteel_fluid_cell", "gtceu:tungsten_steel_fluid_cell"))); - createBlockItemEntityRenameFix(builder, v1, "Rename Low Pressure Steam Miner", + createBlockItemEntityRenameFix(builder, v1_0, "Rename Low Pressure Steam Miner", createRenamer("gtceu:steam_miner", "gtceu:lp_steam_miner")); - builder.addFixer(ItemRenameFix.create(v1, "Rename electric wire cutters", + builder.addFixer(ItemRenameFix.create(v1_0, "Rename electric wire cutters", createRenamer(Pattern.compile("([lhi])v_([a-z0-9/._-]+)_wirecutter"), "$1v_$2_wire_cutter"))); // separator @@ -142,13 +143,14 @@ public static void addFixers(DataFixerBuilder builder) { // separator Schema v1_4 = builder.addSchema(1, 4, V1_4::new); + builder.addFixer(new AddNewChoices(v1_4, "Added Welder and Spooler", References.BLOCK_ENTITY)); // Migrate GT's Molten fluids, ignore addons to allow them to fail loudly createBlockItemFluidRenameFix(builder, v1_4, "Remove molten fluids", createRenamer(Pattern.compile("gtceu:molten_"), "gtceu:")); // separator - Schema v1_5 = builder.addSchema(1, 5, SAME_NAMESPACED); + Schema v1_5 = builder.addSchema(1, 5, V1_5::new); // createMaterialRenameFix(builder, v1_5, "Rename uranium to uranium_238", // createRenamer(Pattern.compile("gtceu:(.*)?uranium"), "gtceu:$1uranium_238")); // createMaterialRenameFix(builder, v1_5, "Rename uranium_235 to uranium", @@ -170,6 +172,8 @@ public static void addFixers(DataFixerBuilder builder) { createRenamer("gtceu:bronze_brick_casing", "gtceu:bricked_bronze_casing")); createBlockItemRenameFix(builder, v1_5, "Fix Bricked Wrought Iron Casing name", createRenamer("gtceu:steel_brick_casing", "gtceu:bricked_wrought_iron_casing")); + + builder.addFixer(new ItemStackTurbineRotorFix(v1_5)); } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java new file mode 100644 index 00000000000..099dd2d6066 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java @@ -0,0 +1,56 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.mojang.datafixers.*; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.Type; +import com.mojang.datafixers.util.Pair; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + +import java.util.Objects; +import java.util.Optional; + +public class ItemStackTurbineRotorFix extends DataFix { + + private static final String OLD_TURBINE_ROTOR_ITEM_ID = "gtceu:turbine_rotor"; + + public ItemStackTurbineRotorFix(Schema outputSchema) { + super(outputSchema, false); + } + + public TypeRewriteRule makeRule() { + Type type = this.getInputSchema().getType(References.ITEM_STACK); + OpticFinder> itemIdFinder = DSL.fieldFinder("id", + DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString())); + OpticFinder tagFinder = type.findField("tag"); + OpticFinder partStatsFinder = tagFinder.type().findField("GT.PartStats"); + OpticFinder materialFinder = DSL.fieldFinder("Material", NamespacedSchema.namespacedString()); + + return this.fixTypeEverywhereTyped("ItemStackTurbineRotorFix", type, (typed) -> { + Optional> itemId = typed.getOptional(itemIdFinder); + if (itemId.isEmpty() || !Objects.equals(itemId.get().getSecond(), OLD_TURBINE_ROTOR_ITEM_ID)) { + return typed; + } + Typed tag = typed.getOrCreateTyped(tagFinder); + Typed partStats = tag.getOrCreateTyped(partStatsFinder); + Optional material = partStats.getOptional(materialFinder); + if (material.isEmpty()) { + // if it doesn't have a material (somehow??), make it an iron turbine rotor by default. + return typed.set(itemIdFinder, + Pair.of(References.ITEM_NAME.typeName(), "gtceu:iron_turbine_rotor")); + } + + String materialName = material.get(); + if (materialName.indexOf(':') == -1) { + // compatibility for very old turbine rotors we might come across + // shouldn't happen but better safe than sorry + materialName = "gtceu:" + materialName; + } + // All turbine rotor items' names follow a specific pattern and are registered under the material's + // namespace so this *should* be safe + return typed.set(itemIdFinder, + Pair.of(References.ITEM_NAME.typeName(), materialName + "_turbine_rotor")); + + }); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 90e7778b483..63a58cd9088 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -8,6 +8,8 @@ import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; +import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; +import com.mojang.datafixers.types.templates.Hook; import net.minecraft.util.datafix.fixes.References; import net.minecraftforge.fml.loading.LoadingModList; @@ -74,6 +76,24 @@ public void registerTypes(Schema schema, Map> ent "Tag", remainder() )); schema.registerType(false, GTReferences.FLUID_NAME, () -> constType(namespacedString())); + + // add part stats NBT field + schema.registerType(true, References.ITEM_STACK, () -> hook( + optionalFields( + "id", References.ITEM_NAME.in(schema), + "tag", optionalFields( + "EntityTag", References.ENTITY_TREE.in(schema), + "BlockEntityTag", References.BLOCK_ENTITY.in(schema), + "CanDestroy", list(References.BLOCK_NAME.in(schema)), + "CanPlaceOn", list(References.BLOCK_NAME.in(schema)), + "Items", list(References.ITEM_STACK.in(schema)), + "GT.PartStats", optionalFields( + "Material", GTReferences.MATERIAL_NAME.in(schema) + ) + ) + ), + V705Accessor.gtceu$getAddNames(), Hook.HookFunction.IDENTITY + )); } @Override @@ -445,14 +465,6 @@ public Map> registerBlockEntities(Schema schema) } // endregion - // register all remaining machines as very 'plain' types - for (MachineDefinition definition : GTRegistries.MACHINES) { - String id = definition.getId().toString(); - if (!map.containsKey(id)) { - schema.registerSimple(map, id); - } - } - return map; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java index 7c6e880fa57..8cff6b0bd99 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java @@ -408,15 +408,6 @@ public Map> registerBlockEntities(Schema schema) } // endregion - // register all remaining machines as ""plain"" types - // IDEK if this works because the registry might not be loaded at this point... oh well. - for (MachineDefinition definition : GTRegistries.MACHINES) { - String id = definition.getId().toString(); - if (!map.containsKey(id)) { - schema.register(map, id, traitHolder); - } - } - return map; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java new file mode 100644 index 00000000000..ec450fc1871 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java @@ -0,0 +1,43 @@ +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; + +import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.Hook; +import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.fixes.References; + +import java.util.Map; +import java.util.function.Supplier; + +import static com.mojang.datafixers.DSL.*; + +public class V1_5 extends AutomaticNamespacedSchema { + + public V1_5(int versionKey, Schema parent) { + super(versionKey, parent, GTCEu.MOD_ID); + } + + @Override + public void registerTypes(Schema schema, Map> entityTypes, + Map> blockEntityTypes) { + super.registerTypes(schema, entityTypes, blockEntityTypes); + + // remove part stats NBT field + schema.registerType(true, References.ITEM_STACK, () -> hook( + optionalFields( + "id", References.ITEM_NAME.in(schema), + "tag", optionalFields( + "EntityTag", References.ENTITY_TREE.in(schema), + "BlockEntityTag", References.BLOCK_ENTITY.in(schema), + "CanDestroy", list(References.BLOCK_NAME.in(schema)), + "CanPlaceOn", list(References.BLOCK_NAME.in(schema)), + "Items", list(References.ITEM_STACK.in(schema)) + ) + ), + V705Accessor.gtceu$getAddNames(), Hook.HookFunction.IDENTITY + )); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java new file mode 100644 index 00000000000..f7ae18db7cf --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java @@ -0,0 +1,49 @@ +package com.gregtechceu.gtceu.common.item; + +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.RotorProperty; +import com.gregtechceu.gtceu.api.data.tag.TagPrefix; +import com.gregtechceu.gtceu.api.item.TagPrefixItem; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class TurbineRotorItem extends TagPrefixItem { + + public TurbineRotorItem(Properties properties, TagPrefix tagPrefix, Material material) { + super(properties.durability(getMaxRotorDurability(material)), tagPrefix, material); + } + + public int getRotorPower(ItemStack stack) { + RotorProperty property = this.material.getProperty(PropertyKey.ROTOR); + return property == null ? -1 : property.getPower(); + } + + public int getRotorEfficiency(ItemStack stack) { + RotorProperty property = this.material.getProperty(PropertyKey.ROTOR); + return property == null ? -1 : property.getEfficiency(); + } + + public float getAttackDamage(ItemStack stack) { + RotorProperty property = this.material.getProperty(PropertyKey.ROTOR); + return property == null ? 0 : property.getDamage(); + } + + public static int getMaxRotorDurability(Material material) { + RotorProperty property = material.getProperty(PropertyKey.ROTOR); + return property == null ? 0 : 800 * (int) Math.pow(property.getDurability(), 0.65); + } + + @Override + public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, + TooltipFlag isAdvanced) { + super.appendHoverText(stack, level, tooltipComponents, isAdvanced); + tooltipComponents.add(Component.translatable("item.gtceu.turbine_rotor.tooltip.efficiency", getRotorEfficiency(stack))); + tooltipComponents.add(Component.translatable("item.gtceu.turbine_rotor.tooltip.power", getRotorPower(stack))); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java deleted file mode 100644 index 147a41e6f69..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.gregtechceu.gtceu.common.item.behavior; - -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.item.IComponentItem; -import com.gregtechceu.gtceu.api.item.component.IMaterialPartItem; -import com.gregtechceu.gtceu.api.item.component.ISubItemHandler; -import com.gregtechceu.gtceu.api.registry.GTRegistries; - -import net.minecraft.core.NonNullList; -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.Level; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.turbineBlade; - -public class TurbineRotorBehaviour implements IMaterialPartItem, ISubItemHandler { - - @Override - public void fillItemCategory(Item item, CreativeModeTab category, NonNullList items) { - for (Material material : GTRegistries.MATERIALS) { - if (!material.shouldGenerateRecipesFor(turbineBlade) || !material.hasProperty(PropertyKey.INGOT)) { - continue; - } - - var rotorStack = new ItemStack(item); - var behavior = TurbineRotorBehaviour.getBehaviour(rotorStack); - if (behavior != null) { - behavior.setPartMaterial(rotorStack, material); - items.add(rotorStack); - } - } - } - - public int getRotorPower(ItemStack stack) { - var property = getPartMaterial(stack).getProperty(PropertyKey.ROTOR); - return property == null ? -1 : property.getPower(); - } - - public int getRotorEfficiency(ItemStack stack) { - var property = getPartMaterial(stack).getProperty(PropertyKey.ROTOR); - return property == null ? -1 : property.getEfficiency(); - } - - @Override - public int getPartMaxDurability(ItemStack itemStack) { - var property = getPartMaterial(itemStack).getProperty(PropertyKey.ROTOR); - return property == null ? -1 : 800 * (int) Math.pow(property.getDurability(), 0.65); - } - - public float getDamage(ItemStack itemStack) { - var property = getPartMaterial(itemStack).getProperty(PropertyKey.ROTOR); - return property == null ? -1 : property.getDamage(); - } - - public int getRotorDurabilityPercent(ItemStack itemStack) { - return 100 - 100 * getPartDamage(itemStack) / getPartMaxDurability(itemStack); - } - - public void applyRotorDamage(ItemStack itemStack, int damageApplied) { - int rotorDurability = getPartMaxDurability(itemStack); - int resultDamage = getPartDamage(itemStack) + damageApplied; - if (resultDamage >= rotorDurability) { - itemStack.shrink(1); - } else { - setPartDamage(itemStack, resultDamage); - } - } - - @Override - public void appendHoverText(ItemStack stack, @org.jetbrains.annotations.Nullable Level level, - List tooltipComponents, TooltipFlag isAdvanced) { - IMaterialPartItem.super.appendHoverText(stack, level, tooltipComponents, isAdvanced); - tooltipComponents - .add(Component.translatable("metaitem.tool.tooltip.rotor.efficiency", getRotorEfficiency(stack))); - tooltipComponents.add(Component.translatable("metaitem.tool.tooltip.rotor.power", getRotorPower(stack))); - } - - @Nullable - public static TurbineRotorBehaviour getBehaviour(@NotNull ItemStack itemStack) { - if (itemStack.getItem() instanceof IComponentItem componentItem) { - for (var component : componentItem.getComponents()) { - if (component instanceof TurbineRotorBehaviour behaviour) { - return behaviour; - } - } - } - return null; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 695fdd7e6c9..9c3517d5ab9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -16,7 +16,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTDamageTypes; -import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.common.item.TurbineRotorItem; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.ISubscription; @@ -119,13 +119,12 @@ static int getBaseEfficiency() { ////////////////////////////////////// private void onRotorInventoryChanged() { - var stack = getRotorStack(); - var rotorBehaviour = TurbineRotorBehaviour.getBehaviour(stack); - if (rotorBehaviour != null) { - this.rotorMaterial = rotorBehaviour.getPartMaterial(stack); + ItemStack stack = getRotorStack(); + if (stack.getItem() instanceof TurbineRotorItem rotor) { + this.rotorMaterial = rotor.material; boolean emissive = this.rotorMaterial.hasProperty(PropertyKey.ORE) && - this.rotorMaterial.getProperty(PropertyKey.ORE).isEmissive(); + this.rotorMaterial.getPropertyOrThrow(PropertyKey.ORE).isEmissive(); setRenderState(getRenderState() .setValue(HAS_ROTOR, true) .setValue(IS_EMISSIVE_ROTOR, emissive)); @@ -209,12 +208,13 @@ public void setRotorStack(ItemStack rotorStack) { @Override public InteractionResult onUse(ExtendedUseOnContext context) { - var superResult = super.onUse(context); + InteractionResult superResult = super.onUse(context); if (superResult != InteractionResult.PASS) return superResult; + if (!isRemote() && getRotorSpeed() > 0 && !context.getPlayer().isCreative()) { - TurbineRotorBehaviour behaviour = TurbineRotorBehaviour.getBehaviour(getRotorStack()); - if (behaviour != null) { - context.getPlayer().hurt(GTDamageTypes.TURBINE.source(level), behaviour.getDamage(getRotorStack())); + ItemStack stack = getRotorStack(); + if (stack.getItem() instanceof TurbineRotorItem rotor) { + context.getPlayer().hurt(GTDamageTypes.TURBINE.source(level), rotor.getAttackDamage(stack)); } return InteractionResult.FAIL; } @@ -271,12 +271,10 @@ public boolean isRotorSpinning() { */ public int getTotalEfficiency() { int rotorEfficiency = getRotorEfficiency(); - if (rotorEfficiency == -1) - return -1; + if (rotorEfficiency == -1) return -1; int holderEfficiency = getHolderEfficiency(); - if (holderEfficiency == -1) - return -1; + if (holderEfficiency == -1) return -1; return Math.max(getBaseEfficiency(), rotorEfficiency * holderEfficiency / 100); } @@ -286,8 +284,7 @@ public int getTotalEfficiency() { */ public int getHolderEfficiency() { int tierDifference = getTierDifference(); - if (tierDifference == -1) - return -1; + if (tierDifference == -1) return -1; return 100 + 10 * tierDifference; } @@ -306,36 +303,28 @@ public int getHolderPowerMultiplier() { * @return the rotor's efficiency in % */ public int getRotorEfficiency() { - var stack = getRotorStack(); - var behavior = TurbineRotorBehaviour.getBehaviour(stack); - if (behavior != null) { - return behavior.getRotorEfficiency(stack); - } - return -1; + ItemStack stack = getRotorStack(); + if (!(stack.getItem() instanceof TurbineRotorItem rotor)) return -1; + + return rotor.getRotorEfficiency(stack); } /** * @return the rotor's power in % */ public int getRotorPower() { - var stack = getRotorStack(); - var behavior = TurbineRotorBehaviour.getBehaviour(stack); - if (behavior != null) { - return behavior.getRotorPower(stack); - } - return -1; + ItemStack stack = getRotorStack(); + if (!(stack.getItem() instanceof TurbineRotorItem rotor)) return -1; + + return rotor.getRotorPower(stack); } /** * @return the rotor's durability as % */ public int getRotorDurabilityPercent() { - var stack = getRotorStack(); - var behavior = TurbineRotorBehaviour.getBehaviour(stack); - if (behavior != null) { - return behavior.getRotorDurabilityPercent(stack); - } - return -1; + ItemStack stack = getRotorStack(); + return 100 - 100 * stack.getDamageValue() / stack.getMaxDamage(); } /** @@ -344,12 +333,12 @@ public int getRotorDurabilityPercent() { * @param damageAmount to damage */ public void damageRotor(int damageAmount) { - var stack = getRotorStack(); - var behavior = TurbineRotorBehaviour.getBehaviour(stack); - if (behavior != null) { - behavior.applyRotorDamage(stack, damageAmount); - setRotorStack(stack); + ItemStack stack = getRotorStack(); + if (stack.hurt(damageAmount, this.level.random, null)) { + stack.shrink(1); + stack.setDamageValue(0); } + setRotorStack(stack); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java index 05b6059f338..5077beee494 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java @@ -4,26 +4,24 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.IngotProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.item.IGTTool; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.common.item.TurbineRotorItem; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.ingot; -import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.nugget; -import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.turbineBlade; +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; import static com.gregtechceu.gtceu.common.data.GTRecipeCategories.ARC_FURNACE_RECYCLING; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.ARC_FURNACE_RECIPES; @@ -46,36 +44,34 @@ public enum ArcFurnaceLogic implements GTRecipeType.ICustomRecipeLogic { } private @Nullable GTRecipe search(ItemStack stack) { - var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); - if (turbineBehaviour != null) { - float durability = 1f - (float) turbineBehaviour.getPartDamage(stack) / - (float) turbineBehaviour.getPartMaxDurability(stack); - return applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), - (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + if (stack.getItem() instanceof TurbineRotorItem rotor) { + float durability = 1f - (float) stack.getDamageValue() / stack.getMaxDamage(); + return applyDurabilityRecipe("rotor_decomp", stack, rotor.material, + turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); } if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { - float durability = (float) (tool.getTotalMaxDurability(stack) - stack.getDamageValue() + 1) / - (tool.getTotalMaxDurability(stack) + 1); + int maxDurability = tool.getTotalMaxDurability(stack) + 1; + float durability = (float) (maxDurability - stack.getDamageValue()) / maxDurability; return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), - (float) (tool.getToolType().materialAmount / GTValues.M), durability, + tool.getToolType().materialAmount / GTValues.M, durability, GTValues.VH[GTValues.LV], 2); } return null; } - public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, @NotNull Material mat, - float fullAmount, float durability, long voltage, + public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, + long fullAmount, float durability, long voltage, int durationFactor) { if (!mat.hasProperty(PropertyKey.INGOT)) return null; - var material = mat.getProperty(PropertyKey.INGOT); - var materialArc = material.getArcSmeltingInto(); + IngotProperty material = mat.getPropertyOrThrow(PropertyKey.INGOT); + Material materialArc = material.getArcSmeltingInto(); - float outputAmount = (durability * fullAmount); + float outputAmount = durability * fullAmount; int dustAmount = (int) outputAmount; - int leftover = (int) ((outputAmount - (float) dustAmount) * 9.f); + int leftover = (int) ((outputAmount - dustAmount) * 9.f); if (dustAmount == 0 && leftover == 0) return null; @@ -97,32 +93,30 @@ public enum ArcFurnaceLogic implements GTRecipeType.ICustomRecipeLogic { @Override public void buildRepresentativeRecipes() { - ItemStack stack = GTItems.TURBINE_ROTOR.asStack(); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); - GTRecipe rotorRecipe; - GTRecipe pickaxeRecipe; float durability = 0.69f; - var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); - assert turbineBehaviour != null : "Default Turbine Stack doesn't have Turbine Behaviour"; - turbineBehaviour.setPartMaterial(stack, GTMaterials.Iron); - turbineBehaviour.setPartDamage(stack, 8928); - - rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), - (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; - rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); // noinspection DataFlowIssue - stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); + ItemStack stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); stack.setDamageValue(79); - pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, - (float) (GTToolType.PICKAXE.materialAmount / GTValues.M), durability, - GTValues.VH[GTValues.LV], 2); + GTRecipe pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, + GTToolType.PICKAXE.materialAmount / GTValues.M, durability, + GTValues.VH[GTValues.LV], 2); assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); ARC_FURNACE_RECYCLING.addRecipe(pickaxeRecipe); + + // separator // + + stack = ChemicalHelper.get(turbineRotor, GTMaterials.Iron); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); + stack.setDamageValue(8928); + + GTRecipe rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, GTMaterials.Iron, + turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; + rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); ARC_FURNACE_RECYCLING.addRecipe(rotorRecipe); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java index a2f219c094f..7c6d0c2e6bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java @@ -4,21 +4,21 @@ import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.item.IGTTool; import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.recipe.GTRecipe; import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; +import com.gregtechceu.gtceu.common.item.TurbineRotorItem; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; @@ -44,31 +44,31 @@ public enum MaceratorLogic implements GTRecipeType.ICustomRecipeLogic { } public @Nullable GTRecipe search(ItemStack stack) { - var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); - if (turbineBehaviour != null) { - float durability = 1.f - (float) turbineBehaviour.getPartDamage(stack) / - (float) turbineBehaviour.getPartMaxDurability(stack); - return applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), - (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + if (stack.getItem() instanceof TurbineRotorItem rotor) { + float durability = 1f - (float) stack.getDamageValue() / stack.getMaxDamage(); + return applyDurabilityRecipe("rotor_decomp", stack, rotor.material, + turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); } if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { - float durability = (float) (tool.getTotalMaxDurability(stack) - stack.getDamageValue() + 1) / - (tool.getTotalMaxDurability(stack) + 1); + int maxDurability = tool.getTotalMaxDurability(stack) + 1; + float durability = (float) (maxDurability - stack.getDamageValue()) / maxDurability; return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), - (float) (tool.getToolType().materialAmount / GTValues.M), durability, + tool.getToolType().materialAmount / GTValues.M, durability, GTValues.VH[GTValues.LV], 2); } return null; } - public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, @NotNull Material mat, - float fullAmount, float durability, long voltage, + public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, + long fullAmount, float durability, long voltage, int durationFactor) { - float outputAmount = (durability * fullAmount); + if (!mat.hasProperty(PropertyKey.DUST)) return null; + + float outputAmount = durability * fullAmount; int dustAmount = (int) outputAmount; - int leftover = (int) ((outputAmount - (float) dustAmount) * 36.f); + int leftover = (int) ((outputAmount - (float) dustAmount) * 36f); TagPrefix tag = leftover % 4 >= leftover % 9 ? dustSmall : dustTiny; int leftAmount = leftover % 4 >= leftover % 9 ? leftover / 9 : leftover / 4; @@ -91,32 +91,30 @@ public enum MaceratorLogic implements GTRecipeType.ICustomRecipeLogic { @Override public void buildRepresentativeRecipes() { - ItemStack stack = GTItems.TURBINE_ROTOR.asStack(); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); - GTRecipe rotorRecipe; - GTRecipe pickaxeRecipe; float durability = 0.75f; - var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); - assert turbineBehaviour != null : "Default Turbine Stack doesn't have Turbine Behaviour"; - turbineBehaviour.setPartMaterial(stack, GTMaterials.Iron); - turbineBehaviour.setPartDamage(stack, 8928); - - rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), - (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; - rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); // noinspection DataFlowIssue - stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); + ItemStack stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); - stack.setDamageValue(79); - pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, - (float) (GTToolType.PICKAXE.materialAmount / GTValues.M), durability, - GTValues.VH[GTValues.LV], 2); + stack.setDamageValue(64); + GTRecipe pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, + GTToolType.PICKAXE.materialAmount / GTValues.M, durability, + GTValues.VH[GTValues.LV], 2); assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); MACERATOR_RECYCLING.addRecipe(pickaxeRecipe); + + // separator // + + stack = ChemicalHelper.get(turbineRotor, GTMaterials.Iron); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); + stack.setDamageValue(7200); + + GTRecipe rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, GTMaterials.Iron, + turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; + rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); MACERATOR_RECYCLING.addRecipe(rotorRecipe); } } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java new file mode 100644 index 00000000000..0c63ccb8725 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java @@ -0,0 +1,15 @@ +package com.gregtechceu.gtceu.core.mixins.datafixer; + +import com.mojang.datafixers.types.templates.Hook; +import net.minecraft.util.datafix.schemas.V705; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(V705.class) +public interface V705Accessor { + + @Accessor("ADD_NAMES") + static Hook.HookFunction gtceu$getAddNames() { + throw new AssertionError("Mixin didn't apply"); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index 2a6bcbe2870..147d497ed40 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -320,21 +320,23 @@ public static void init(RegistrateLangProvider provider) { provider.add("item.gtceu.tool.aoe.columns", "Columns"); provider.add("item.gtceu.tool.aoe.layers", "Layers"); + /// @deprecated remove when IMaterialPartItem is removed + provider.add("metaitem.tool.tooltip.primary_material", "§fMaterial: §e%s"); + provider.add("item.gtceu.armor.helmet", "%s Helmet"); provider.add("item.gtceu.armor.chestplate", "%s Chestplate"); provider.add("item.gtceu.armor.leggings", "%s Leggings"); provider.add("item.gtceu.armor.boots", "%s Boots"); provider.add("item.gtceu.turbine_rotor.tooltip", "Turbine Rotors for your power station"); + provider.add("item.gtceu.turbine_rotor.tooltip.efficiency", "Turbine Efficiency: §9%s%%"); + provider.add("item.gtceu.turbine_rotor.tooltip.power", "Turbine Power: §9%s%%"); + provider.add("metaitem.clipboard.tooltip", "Can be written on (without any writing Instrument). Right-click on Wall to place, and Shift-Right-Click to remove"); provider.add("metaitem.behavior.mode_switch.tooltip", "Use while sneaking to switch mode"); provider.add("metaitem.behavior.mode_switch.mode_switched", "§eMode Set to: %s"); provider.add("metaitem.behavior.mode_switch.current_mode", "Mode: %s"); - provider.add("metaitem.tool.tooltip.primary_material", "§fMaterial: §e%s"); - provider.add("metaitem.tool.tooltip.durability", "§fDurability: §a%d / %d"); - provider.add("metaitem.tool.tooltip.rotor.efficiency", "Turbine Efficiency: §9%d%%"); - provider.add("metaitem.tool.tooltip.rotor.power", "Turbine Power: §9%d%%"); provider.add("item.gtceu.ulv_voltage_coil.tooltip", "Primitive Coil"); provider.add("item.gtceu.lv_voltage_coil.tooltip", "Basic Coil"); provider.add("item.gtceu.mv_voltage_coil.tooltip", "Good Coil"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java index 4e0daade9b1..90c06625b2d 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java @@ -8,7 +8,6 @@ import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeCategories; -import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import com.gregtechceu.gtceu.common.machine.trait.LatheRecipeLogic; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; @@ -547,14 +546,10 @@ private static void processTurbine(@NotNull Consumer provider, @ return; } - ItemStack rotorStack = GTItems.TURBINE_ROTOR.asStack(); - // noinspection ConstantConditions - TurbineRotorBehaviour.getBehaviour(rotorStack).setPartMaterial(rotorStack, material); - ASSEMBLER_RECIPES.recipeBuilder("assemble_" + material.getName() + "_turbine_blade") .inputItems(turbineBlade, material, 8) .inputItems(rodLong, GTMaterials.Magnalium) - .outputItems(rotorStack) + .outputItems(ChemicalHelper.get(turbineRotor, material)) .duration(200) .EUt(400) .save(provider); @@ -567,7 +562,7 @@ private static void processTurbine(@NotNull Consumer provider, @ .EUt(256) .save(provider); - VanillaRecipeHelper.addShapedRecipe(provider, String.format("turbine_blade_%s", material.getName()), + VanillaRecipeHelper.addShapedRecipe(provider, material.getName() + "_turbine_blade", ChemicalHelper.get(turbineBlade, material), "PPP", "SPS", "fPd", 'P', new MaterialEntry(plateDouble, material), diff --git a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java index 3aca66ae888..1811dc33121 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java @@ -69,8 +69,6 @@ public void register(EmiRegistry registry) { EmiStack.of(GTMultiMachines.LARGE_CHEMICAL_REACTOR.asStack())); // Comparators - registry.setDefaultComparison(GTItems.TURBINE_ROTOR.asItem(), Comparison.compareNbt()); - registry.setDefaultComparison(GTItems.PROGRAMMED_CIRCUIT.asItem(), Comparison.compareNbt()); registry.removeEmiStacks(EmiStack.of(GTItems.PROGRAMMED_CIRCUIT.asStack())); registry.addEmiStack(EmiStack.of(IntCircuitBehaviour.stack(0))); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java index 1b3a5ecb0bd..17ba2dbc0b3 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java @@ -113,7 +113,6 @@ public void registerRecipes(IRecipeRegistration registration) { public void registerItemSubtypes(ISubtypeRegistration registration) { if (GTCEu.Mods.isEMILoaded()) return; registration.useNbtForSubtypes(GTItems.PROGRAMMED_CIRCUIT.asItem()); - registration.useNbtForSubtypes(GTItems.TURBINE_ROTOR.asItem()); } @Override diff --git a/src/main/resources/assets/gtceu/lang/de_de.json b/src/main/resources/assets/gtceu/lang/de_de.json index cdab74c085a..350255ae940 100644 --- a/src/main/resources/assets/gtceu/lang/de_de.json +++ b/src/main/resources/assets/gtceu/lang/de_de.json @@ -5811,8 +5811,8 @@ "metaitem.terminal.tooltip.hardware": "§aHardware: %d", "metaitem.tool.tooltip.durability": "§fHaltbarkeit: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fPrimärmaterial: §e%s", - "metaitem.tool.tooltip.rotor.efficiency": "Turbineneffizienz: §9%d%%", - "metaitem.tool.tooltip.rotor.power": "Turbinenleistung: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "Turbineneffizienz: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.power": "Turbinenleistung: §9%d%%", "metaitem.tricorder_scanner.tooltip": "Tricorder", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Zurück", diff --git a/src/main/resources/assets/gtceu/lang/ja_jp.json b/src/main/resources/assets/gtceu/lang/ja_jp.json index c8ce8b66309..6c5716c8843 100644 --- a/src/main/resources/assets/gtceu/lang/ja_jp.json +++ b/src/main/resources/assets/gtceu/lang/ja_jp.json @@ -5705,8 +5705,8 @@ "metaitem.terminal.tooltip.hardware": "ハードウェア: %d", "metaitem.tool.tooltip.durability": "耐久値: %d/%d", "metaitem.tool.tooltip.primary_material": "素材: %s", - "metaitem.tool.tooltip.rotor.efficiency": "タービン効率: %d%%", - "metaitem.tool.tooltip.rotor.power": "タービンパワー: %d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "タービン効率: %d%%", + "item.gtceu.turbine_rotor.tooltip.power": "タービンパワー: %d%%", "metaitem.tricorder_scanner.tooltip": "トライコーダー", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "戻る", diff --git a/src/main/resources/assets/gtceu/lang/pt_br.json b/src/main/resources/assets/gtceu/lang/pt_br.json index 43a8579fc29..cb2bea7de96 100644 --- a/src/main/resources/assets/gtceu/lang/pt_br.json +++ b/src/main/resources/assets/gtceu/lang/pt_br.json @@ -5810,8 +5810,8 @@ "metaitem.terminal.tooltip.hardware": "§aHardware: %d", "metaitem.tool.tooltip.durability": "§fDurabilidade: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fMaterial: §e%s", - "metaitem.tool.tooltip.rotor.efficiency": "Eficiência da Turbina: §9%d%%", - "metaitem.tool.tooltip.rotor.power": "Potência da Turbina: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "Eficiência da Turbina: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.power": "Potência da Turbina: §9%d%%", "metaitem.tricorder_scanner.tooltip": "Tricorder", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Voltar", diff --git a/src/main/resources/assets/gtceu/lang/ru_ru.json b/src/main/resources/assets/gtceu/lang/ru_ru.json index 0a7f82cf5c5..eaeb16b59ed 100644 --- a/src/main/resources/assets/gtceu/lang/ru_ru.json +++ b/src/main/resources/assets/gtceu/lang/ru_ru.json @@ -2836,8 +2836,8 @@ "metaitem.terminal.tooltip.hardware": "§aДополнений: %d", "metaitem.tool.tooltip.durability": "§fПрочность: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fМатериал: §e%s", - "metaitem.tool.tooltip.rotor.efficiency": "Эффективность ротора: §9%d%%", - "metaitem.tool.tooltip.rotor.power": "Мощность турбины: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "Эффективность ротора: §9%d%%", + "item.gtceu.turbine_rotor.tooltip.power": "Мощность турбины: §9%d%%", "metaitem.tricorder_scanner.tooltip": "То что нужно", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Назад", diff --git a/src/main/resources/assets/gtceu/lang/uk_ua.json b/src/main/resources/assets/gtceu/lang/uk_ua.json index ce3941ebf69..3b3fcb6f1b0 100644 --- a/src/main/resources/assets/gtceu/lang/uk_ua.json +++ b/src/main/resources/assets/gtceu/lang/uk_ua.json @@ -5896,8 +5896,8 @@ "metaitem.terminal.tooltip.hardware": "§aОбладнання: %d", "metaitem.tool.tooltip.durability": "§fМіцність:§a %d / %d", "metaitem.tool.tooltip.primary_material": "§fМатеріал:§e %s", - "metaitem.tool.tooltip.rotor.efficiency": "Ефективність турбіни:§9 %d%%", - "metaitem.tool.tooltip.rotor.power": "Потужність турбіни:§9 %d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "Ефективність турбіни:§9 %d%%", + "item.gtceu.turbine_rotor.tooltip.power": "Потужність турбіни:§9 %d%%", "metaitem.tricorder_scanner.tooltip": "Трикодер", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Назад", diff --git a/src/main/resources/assets/gtceu/lang/zh_cn.json b/src/main/resources/assets/gtceu/lang/zh_cn.json index 8a4e1e67789..0b90ecb533f 100644 --- a/src/main/resources/assets/gtceu/lang/zh_cn.json +++ b/src/main/resources/assets/gtceu/lang/zh_cn.json @@ -5895,8 +5895,8 @@ "metaitem.terminal.tooltip.hardware": "§a硬件:%d", "metaitem.tool.tooltip.durability": "§f耐久度:§a%d / %d", "metaitem.tool.tooltip.primary_material": "§f材料:§e%s", - "metaitem.tool.tooltip.rotor.efficiency": "涡轮效率:§9%d%%", - "metaitem.tool.tooltip.rotor.power": "涡轮产能:§9%d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "涡轮效率:§9%d%%", + "item.gtceu.turbine_rotor.tooltip.power": "涡轮产能:§9%d%%", "metaitem.tricorder_scanner.tooltip": "三录仪", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "返回", diff --git a/src/main/resources/assets/gtceu/lang/zh_tw.json b/src/main/resources/assets/gtceu/lang/zh_tw.json index 6a6d61b0d40..9603edbac98 100644 --- a/src/main/resources/assets/gtceu/lang/zh_tw.json +++ b/src/main/resources/assets/gtceu/lang/zh_tw.json @@ -5776,8 +5776,8 @@ "metaitem.terminal.tooltip.hardware": "§a硬體:%d", "metaitem.tool.tooltip.durability": "§f耐久度:§a%d / %d", "metaitem.tool.tooltip.primary_material": "§f材料:§e%s", - "metaitem.tool.tooltip.rotor.efficiency": "渦輪效率:§9%d%%", - "metaitem.tool.tooltip.rotor.power": "渦輪產能:§9%d%%", + "item.gtceu.turbine_rotor.tooltip.efficiency": "渦輪效率:§9%d%%", + "item.gtceu.turbine_rotor.tooltip.power": "渦輪產能:§9%d%%", "metaitem.tricorder_scanner.tooltip": "三錄儀", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "返回", diff --git a/src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json b/src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json new file mode 100644 index 00000000000..2fb8332dda3 --- /dev/null +++ b/src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json @@ -0,0 +1,8 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "gtceu:item/material_sets/dull/turbine_rotor", + "layer1": "gtceu:item/material_sets/dull/turbine_rotor_secondary", + "layer2": "gtceu:item/material_sets/dull/turbine_rotor_overlay" + } +} diff --git a/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor.png b/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb26de31ee57b58ace53321ff544a8125d7ba7b GIT binary patch literal 493 zcmVz@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf6951U69E94oEQKA0ai&wK~y-6t&%Z{!!Qs)KpGt&y&)=9*kJG-yv<6hIN4^|Uuovg{P{CT z@JHPG833^)s;ZjPSSj^Zlj4QU^L##^&j4&T8?3c>?@>yL--NSIQ&WuNNL5vHQ4|0S z!@&K1k9?Mr*4jvhT>2h{f#>tdIF3I8fdJU=_p$JLy#gSmjN$;^d!&@)c|J!0;KkN* zau8cOtLvKV`xtXdgr+dH>pGgI`FJA{Zs44w@B3)8>$+G}mL+Z5zBOyDMF!xUi%IW2 zMNwd_<#xN#G!2)_g|aLG;t+son&vD`hGyp+-h0;TH2{ahAv!pnPA@{4Qc4_;$9cQm zvRoy_Znpz?TV(}cj1gg#Pt8lAX`0Yl3uBB}1wtt$+P3BKc*J5UC3RiL|M3Y~8fdLW jI8MkJV?-LKj{gN;@g&5k(O9Kl00000NkvXXu0mjfn5fAZ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_overlay.png b/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..084f0dfcc05088596b646108e4fe78b99f03911f GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@z%2~Ij105pNB{*LJzX3_EP9g@B=$Xcd3ibCk&eI=g|`Qnq`Lp}k1Bg&Z)d7w zz;>qd(xpr62}!@r)*QRg@J2Lc>tWUa+jlFI4m@CI*qWud?%}hEAAyE3c)I$ztaD0e F0sy3sLb?C| literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_secondary.png b/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_secondary.png new file mode 100644 index 0000000000000000000000000000000000000000..1470bfd909406e0e12e6542156e78e65b29873d9 GIT binary patch literal 521 zcmV+k0`~ohP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf6951U69E94oEQKA0dh%1K~y-6tx-Ko13?gdC-)B| z>@Tnjh)qb7PKc6&1o8_u)umUM*2;z0Z+VUF!U=PoT~ehJwzFEUIwRDTFXK#w>m^PES>h(KO9F5tWj# z-EJ?ds(KJTjYVrMMdGpbIN5uD+ceGl(LjW*Z4&U(EtFd zs(K(Id4H))L}du!3nx2EJEH7wn}|wlEp>)-X8v|D07zs9%sj2@`U(I-2xIU4Tt4M_ ze&d|G?k5*Tai0PJGf#z-vvmu7>?$AfJih^ex~@OuZ`-zqv?H(LWM-c3cDwOlFn9uh z*=#m(&dmW}xm>=+MyWAok!9IoI2^w8M~N{Sja~pij09)h2#JhxD!Fgew(VU}6!*-W zoQYtJSvcpe_xt_1a7w8Qt@UQTUhjS~Jb9Wd%MS8p<|K~ej{gOp==a^&Pg!P(00000 LNkvXXu0mjfr8v`@ literal 0 HcmV?d00001 diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index c11cebb04ec..31014ff0ff3 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -47,8 +47,8 @@ "ftbchunks.FTBChunksClientMixin", "ftbchunks.LargeMapScreenMixin", "ftbchunks.RegionMapPanelMixin", - "jei.RecipesGuiAccessor", "jei.FluidTankRendererMixin", + "jei.RecipesGuiAccessor", "xaerominimap.HighlighterRegistryMixin", "xaerominimap.MinimapFBORendererMixin", "xaeroworldmap.GuiMapMixin", @@ -97,6 +97,7 @@ "datafixer.DataFixTypesMixin", "datafixer.ForgeHooksMixin", "datafixer.NbtUtilsMixin", + "datafixer.V705Accessor", "dev.datagen.FixParallelKeyMappingRegistrationMixin", "dev.test.GameTestRegistryMixin", "emi.EmiApiAccessor", @@ -110,7 +111,7 @@ "forge.StrictNBTIngredientAccessor", "jei.FluidHelperMixin", "registrate.AbstractRegistrateAccessor", - "registrate.RegistrateDataProviderAccessor", + "registrate.RegistrateDataProviderAccessor" ], "injectors": { "defaultRequire": 1, diff --git a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java index 5c3c8ac079a..c3f78885e52 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java @@ -3,10 +3,10 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeTurbineMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.EnergyHatchPartMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.FluidHatchPartMachine; @@ -16,6 +16,7 @@ import net.minecraft.core.Direction; import net.minecraft.gametest.framework.GameTest; import net.minecraft.gametest.framework.GameTestHelper; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.gametest.PrefixGameTestTemplate; @@ -29,14 +30,12 @@ public class LargeSteamTurbineTest { @GameTest(template = "lst_with_steam", timeoutTicks = 20 + 40 + 1) public static void LstActivatesTest(GameTestHelper helper) { { - final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); + final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); block.setConnection(Direction.SOUTH, true, false); } final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -54,22 +53,20 @@ public static void LstActivatesTest(GameTestHelper helper) { @GameTest(template = "lst_with_steam", timeoutTicks = 20 + 40 + 1) public static void LstStopsOnBrokenRotorTest(GameTestHelper helper) { - final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); - block.setConnection(Direction.SOUTH, true, false); + { + final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); + block.setConnection(Direction.SOUTH, true, false); + } final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); - final var dynamo = (EnergyHatchPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 1)); helper.runAfterDelay(20, () -> { { - final var rotor = rotorPart.inventory.storage.getStackInSlot(0); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartDamage(rotor, behavior.getMaxDurability(rotor) - 1); + final ItemStack rotor = rotorPart.inventory.storage.getStackInSlot(0); + rotor.setDamageValue(rotor.getMaxDamage() - 1); } helper.assertTrue(machine.getRecipeLogic().isWorking(), "Expected turbine to be running"); rotorPart.setRotorSpeed(0); @@ -85,9 +82,7 @@ public static void LstStopsOnBrokenRotorTest(GameTestHelper helper) { public static void LstGeneratesCorrectPowerTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -111,9 +106,7 @@ public static void LstGeneratesCorrectPowerTest(GameTestHelper helper) { public static void LstRotorSpeedIncreasesAndDecreasesAsExpectedTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -162,9 +155,7 @@ public static void LstRotorSpeedIncreasesAndDecreasesAsExpectedTest(GameTestHelp public static void LstOutputsCorrectAmountOfDistilledWaterTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -186,14 +177,12 @@ public static void LstOutputsCorrectAmountOfDistilledWaterTest(GameTestHelper he @GameTest(template = "lst_with_steam", timeoutTicks = 20 + 40 + 1) public static void LstRunsWithFullDynamoTest(GameTestHelper helper) { { - final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); + final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); block.setConnection(Direction.SOUTH, true, false); } final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -215,9 +204,7 @@ public static void LstRunsWithFullDynamoTest(GameTestHelper helper) { public static void LstRefusesToRunWithoutMaintenanceTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -237,9 +224,7 @@ public static void LstRefusesToRunWithoutMaintenanceTest(GameTestHelper helper) public static void LstRefusesToRunOnWrongFluidTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final var rotor = GTItems.TURBINE_ROTOR.asStack(); - final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); - behavior.setPartMaterial(rotor, GTMaterials.RoseGold); + final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); From 6363dd58db384f109502486cb8d5cf0250c3cb3e Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 15:35:37 +0300 Subject: [PATCH 55/83] Remove unused lang keys --- .../gtceu/common/block/SurfaceRockBlock.java | 4 ++-- .../gtceu/data/lang/LangHandler.java | 20 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) 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 Date: Sun, 11 Oct 2026 15:36:40 +0300 Subject: [PATCH 56/83] Extract the common part of arc furnace/macerator recycling recipe logic --- .../trait/customlogic/ToolDecompLogic.java | 95 +++++++++++++++++++ .../trait/customlogic/ArcFurnaceLogic.java | 78 ++------------- .../trait/customlogic/MaceratorLogic.java | 79 ++------------- 3 files changed, 107 insertions(+), 145 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java new file mode 100644 index 00000000000..ede976d808a --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java @@ -0,0 +1,95 @@ +package com.gregtechceu.gtceu.api.machine.trait.customlogic; + +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; +import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.item.IGTTool; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; +import com.gregtechceu.gtceu.common.data.GTMaterialItems; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.item.TurbineRotorItem; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.Nullable; + +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; + +public abstract class ToolDecompLogic implements GTRecipeType.ICustomRecipeLogic { + + private final GTRecipeCategory recipeCategory; + + public ToolDecompLogic(GTRecipeCategory recipeCategory) { + this.recipeCategory = recipeCategory; + } + + @Override + public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { + var recipeHandlers = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP); + for (var handler : recipeHandlers) { + for (var content : handler.getContents()) { + if (!(content instanceof ItemStack stack)) continue; + if (stack.isEmpty()) continue; + var recipe = search(stack); + if (recipe != null) return recipe; + } + } + return null; + } + + private @Nullable GTRecipe search(ItemStack stack) { + if (stack.getItem() instanceof TurbineRotorItem rotor) { + float durability = 1f - (float) stack.getDamageValue() / stack.getMaxDamage(); + return applyDurabilityRecipe("rotor_decomp", stack, rotor.material, + turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + } + + if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { + int maxDurability = tool.getTotalMaxDurability(stack) + 1; + float durability = (float) (maxDurability - stack.getDamageValue()) / maxDurability; + return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), + tool.getToolType().materialAmount / GTValues.M, durability, + GTValues.VH[GTValues.LV], 2); + } + + return null; + } + + public abstract @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, + long fullAmount, float durability, long voltage, + int durationFactor); + + @Override + public void buildRepresentativeRecipes() { + float durability = 0.69f; + + // noinspection DataFlowIssue + ItemStack stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); + stack.setDamageValue(79); + + GTRecipe pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, + GTToolType.PICKAXE.materialAmount / GTValues.M, durability, + GTValues.VH[GTValues.LV], 2); + assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; + pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); + this.recipeCategory.addRecipe(pickaxeRecipe); + + // separator // + + stack = ChemicalHelper.get(turbineRotor, GTMaterials.Iron); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); + stack.setDamageValue(8928); + + GTRecipe rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, GTMaterials.Iron, + turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; + rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); + this.recipeCategory.addRecipe(rotorRecipe); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java index 5077beee494..59c23190a1f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java @@ -1,22 +1,12 @@ package com.gregtechceu.gtceu.common.machine.trait.customlogic; -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; -import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.IngotProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.item.IGTTool; -import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.machine.trait.customlogic.ToolDecompLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.TurbineRotorItem; -import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; @@ -25,42 +15,15 @@ import static com.gregtechceu.gtceu.common.data.GTRecipeCategories.ARC_FURNACE_RECYCLING; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.ARC_FURNACE_RECIPES; -public enum ArcFurnaceLogic implements GTRecipeType.ICustomRecipeLogic { +public final class ArcFurnaceLogic extends ToolDecompLogic { - INSTANCE; + public static final ArcFurnaceLogic INSTANCE = new ArcFurnaceLogic(); - @Override - public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { - var recipeHandlers = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP); - for (var handler : recipeHandlers) { - for (var content : handler.getContents()) { - if (!(content instanceof ItemStack stack)) continue; - if (stack.isEmpty()) continue; - var recipe = search(stack); - if (recipe != null) return recipe; - } - } - return null; - } - - private @Nullable GTRecipe search(ItemStack stack) { - if (stack.getItem() instanceof TurbineRotorItem rotor) { - float durability = 1f - (float) stack.getDamageValue() / stack.getMaxDamage(); - return applyDurabilityRecipe("rotor_decomp", stack, rotor.material, - turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - } - - if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { - int maxDurability = tool.getTotalMaxDurability(stack) + 1; - float durability = (float) (maxDurability - stack.getDamageValue()) / maxDurability; - return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), - tool.getToolType().materialAmount / GTValues.M, durability, - GTValues.VH[GTValues.LV], 2); - } - - return null; + public ArcFurnaceLogic() { + super(ARC_FURNACE_RECYCLING); } + @Override public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, long fullAmount, float durability, long voltage, int durationFactor) { @@ -90,33 +53,4 @@ public enum ArcFurnaceLogic implements GTRecipeType.ICustomRecipeLogic { return builder.buildRawRecipe(); } - - @Override - public void buildRepresentativeRecipes() { - float durability = 0.69f; - - // noinspection DataFlowIssue - ItemStack stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); - stack.setDamageValue(79); - - GTRecipe pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, - GTToolType.PICKAXE.materialAmount / GTValues.M, durability, - GTValues.VH[GTValues.LV], 2); - assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; - pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); - ARC_FURNACE_RECYCLING.addRecipe(pickaxeRecipe); - - // separator // - - stack = ChemicalHelper.get(turbineRotor, GTMaterials.Iron); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); - stack.setDamageValue(8928); - - GTRecipe rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, GTMaterials.Iron, - turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; - rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); - ARC_FURNACE_RECYCLING.addRecipe(rotorRecipe); - } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java index 7c6d0c2e6bd..19bf074f563 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java @@ -1,22 +1,11 @@ package com.gregtechceu.gtceu.common.machine.trait.customlogic; -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; -import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; import com.gregtechceu.gtceu.api.data.chemical.material.Material; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; -import com.gregtechceu.gtceu.api.item.IGTTool; -import com.gregtechceu.gtceu.api.item.tool.GTToolType; +import com.gregtechceu.gtceu.api.machine.trait.customlogic.ToolDecompLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.common.data.GTMaterialItems; -import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.TurbineRotorItem; -import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; @@ -25,42 +14,15 @@ import static com.gregtechceu.gtceu.common.data.GTRecipeCategories.MACERATOR_RECYCLING; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.MACERATOR_RECIPES; -public enum MaceratorLogic implements GTRecipeType.ICustomRecipeLogic { +public final class MaceratorLogic extends ToolDecompLogic { - INSTANCE; + public static final MaceratorLogic INSTANCE = new MaceratorLogic(); - @Override - public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { - var recipeHandlers = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP); - for (var handler : recipeHandlers) { - for (var content : handler.getContents()) { - if (!(content instanceof ItemStack stack)) continue; - if (stack.isEmpty()) continue; - var recipe = search(stack); - if (recipe != null) return recipe; - } - } - return null; - } - - public @Nullable GTRecipe search(ItemStack stack) { - if (stack.getItem() instanceof TurbineRotorItem rotor) { - float durability = 1f - (float) stack.getDamageValue() / stack.getMaxDamage(); - return applyDurabilityRecipe("rotor_decomp", stack, rotor.material, - turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - } - - if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { - int maxDurability = tool.getTotalMaxDurability(stack) + 1; - float durability = (float) (maxDurability - stack.getDamageValue()) / maxDurability; - return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), - tool.getToolType().materialAmount / GTValues.M, durability, - GTValues.VH[GTValues.LV], 2); - } - - return null; + public MaceratorLogic() { + super(MACERATOR_RECYCLING); } + @Override public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, long fullAmount, float durability, long voltage, int durationFactor) { @@ -88,33 +50,4 @@ public enum MaceratorLogic implements GTRecipeType.ICustomRecipeLogic { return builder.buildRawRecipe(); } - - @Override - public void buildRepresentativeRecipes() { - float durability = 0.75f; - - // noinspection DataFlowIssue - ItemStack stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); - stack.setDamageValue(64); - - GTRecipe pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, - GTToolType.PICKAXE.materialAmount / GTValues.M, durability, - GTValues.VH[GTValues.LV], 2); - assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; - pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); - MACERATOR_RECYCLING.addRecipe(pickaxeRecipe); - - // separator // - - stack = ChemicalHelper.get(turbineRotor, GTMaterials.Iron); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); - stack.setDamageValue(7200); - - GTRecipe rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, GTMaterials.Iron, - turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; - rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); - MACERATOR_RECYCLING.addRecipe(rotorRecipe); - } } From 567fe54a3328c13cc7d0f4ed4c2f0f6cd21e1c6f Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 15:37:40 +0300 Subject: [PATCH 57/83] Make ItemStackTurbineRotorFix also move the "Damage" NBT tag to the root of the itemstack's NBT --- .../datafixer/fixes/ItemStackTurbineRotorFix.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java index 099dd2d6066..b03edbc0450 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java @@ -4,6 +4,7 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; import com.mojang.datafixers.util.Pair; +import com.mojang.serialization.Dynamic; import net.minecraft.util.datafix.fixes.References; import net.minecraft.util.datafix.schemas.NamespacedSchema; @@ -15,7 +16,7 @@ public class ItemStackTurbineRotorFix extends DataFix { private static final String OLD_TURBINE_ROTOR_ITEM_ID = "gtceu:turbine_rotor"; public ItemStackTurbineRotorFix(Schema outputSchema) { - super(outputSchema, false); + super(outputSchema, true); } public TypeRewriteRule makeRule() { @@ -33,6 +34,16 @@ public TypeRewriteRule makeRule() { } Typed tag = typed.getOrCreateTyped(tagFinder); Typed partStats = tag.getOrCreateTyped(partStatsFinder); + + // move the Damage nbt field to the root of nbt + var damage = partStats.getOrCreate(DSL.remainderFinder()) + .get("Damage").result(); + if (damage.isPresent()) { + typed = typed.update(DSL.remainderFinder(), dynamic -> { + return dynamic.set("Damage", damage.get()); + }); + } + Optional material = partStats.getOptional(materialFinder); if (material.isEmpty()) { // if it doesn't have a material (somehow??), make it an iron turbine rotor by default. From 6ae7156809e11bee2181b8a3fb166462a80ce1dc Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 15:59:40 +0300 Subject: [PATCH 58/83] oops! cyclic dependency! --- .../trait/customlogic/ToolDecompLogic.java | 18 ++++++++---------- .../trait/customlogic/ArcFurnaceLogic.java | 10 +++++++--- .../trait/customlogic/MaceratorLogic.java | 10 +++++++--- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java index ede976d808a..1fe7d28b34d 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java @@ -22,11 +22,13 @@ public abstract class ToolDecompLogic implements GTRecipeType.ICustomRecipeLogic { - private final GTRecipeCategory recipeCategory; + public ToolDecompLogic() {} - public ToolDecompLogic(GTRecipeCategory recipeCategory) { - this.recipeCategory = recipeCategory; - } + public abstract @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, + long fullAmount, float durability, long voltage, + int durationFactor); + + public abstract GTRecipeCategory getDisplayRecipeCategory(); @Override public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { @@ -60,10 +62,6 @@ public ToolDecompLogic(GTRecipeCategory recipeCategory) { return null; } - public abstract @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, - long fullAmount, float durability, long voltage, - int durationFactor); - @Override public void buildRepresentativeRecipes() { float durability = 0.69f; @@ -78,7 +76,7 @@ public void buildRepresentativeRecipes() { GTValues.VH[GTValues.LV], 2); assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); - this.recipeCategory.addRecipe(pickaxeRecipe); + getDisplayRecipeCategory().addRecipe(pickaxeRecipe); // separator // @@ -90,6 +88,6 @@ public void buildRepresentativeRecipes() { turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); - this.recipeCategory.addRecipe(rotorRecipe); + getDisplayRecipeCategory().addRecipe(rotorRecipe); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java index 59c23190a1f..3ae8e51b5f1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.machine.trait.customlogic.ToolDecompLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; import com.gregtechceu.gtceu.common.data.GTMaterials; import net.minecraft.world.item.ItemStack; @@ -19,9 +20,7 @@ public final class ArcFurnaceLogic extends ToolDecompLogic { public static final ArcFurnaceLogic INSTANCE = new ArcFurnaceLogic(); - public ArcFurnaceLogic() { - super(ARC_FURNACE_RECYCLING); - } + private ArcFurnaceLogic() {} @Override public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, @@ -53,4 +52,9 @@ public ArcFurnaceLogic() { return builder.buildRawRecipe(); } + + @Override + public GTRecipeCategory getDisplayRecipeCategory() { + return ARC_FURNACE_RECYCLING; + } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java index 19bf074f563..312f76b82fb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.api.machine.trait.customlogic.ToolDecompLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; @@ -18,9 +19,7 @@ public final class MaceratorLogic extends ToolDecompLogic { public static final MaceratorLogic INSTANCE = new MaceratorLogic(); - public MaceratorLogic() { - super(MACERATOR_RECYCLING); - } + private MaceratorLogic() {} @Override public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, @@ -50,4 +49,9 @@ public MaceratorLogic() { return builder.buildRawRecipe(); } + + @Override + public GTRecipeCategory getDisplayRecipeCategory() { + return MACERATOR_RECYCLING; + } } From acf6b2f977cade5e8fcc5fe2dacc173ae4975d21 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 16:57:50 +0300 Subject: [PATCH 59/83] ope, can't pass the namespace as an argument because the types are created from the superclass constructor --- .../schemas/AutomaticNamespacedSchema.java | 48 ++++++++++++------- .../schemas/AutoGTNamespacedSchema.java | 17 +++++++ .../gtceu/common/datafixer/schemas/V0.java | 8 +--- .../gtceu/common/datafixer/schemas/V1.java | 7 +-- .../gtceu/common/datafixer/schemas/V1_3.java | 8 +--- .../gtceu/common/datafixer/schemas/V1_4.java | 7 +-- .../gtceu/common/datafixer/schemas/V1_5.java | 7 +-- 7 files changed, 59 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java index 02d0fdadd1a..bcd0b595e3f 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java @@ -10,23 +10,31 @@ import java.util.Map; import java.util.function.Supplier; -public class AutomaticNamespacedSchema extends NamespacedSchema { +public abstract class AutomaticNamespacedSchema extends NamespacedSchema { - private String automaticNamespace; + private String currentAutomaticNamespace; - public AutomaticNamespacedSchema(int versionKey, Schema parent, String automaticNamespace) { + public AutomaticNamespacedSchema(int versionKey, Schema parent) { super(versionKey, parent); - this.automaticNamespace = automaticNamespace; + } + + protected abstract String getAutomaticNamespace(); + + private String getCurrentAutomaticNamespace() { + if (this.currentAutomaticNamespace == null) { + this.currentAutomaticNamespace = getAutomaticNamespace(); + } + return this.currentAutomaticNamespace; } @Override public void register(final Map> map, String name, final Supplier template) { if (name.indexOf(':') == -1) { - name = automaticNamespace + ":" + name; + name = getCurrentAutomaticNamespace() + ":" + name; } else if (name.indexOf(':') == 0) { // protect against typos/copy-paste errors - name = automaticNamespace + name; + name = getCurrentAutomaticNamespace() + name; } super.register(map, name, template); } @@ -43,14 +51,18 @@ public void register(final Map> map, String name, */ @Override public Map> registerBlockEntities(Schema schema) { - String originalNamespace = this.automaticNamespace; + String originalNamespace = this.getAutomaticNamespace(); try { - // revert the namespace to minecraft for the parent schema automatically - this.automaticNamespace = "minecraft"; + // switch the namespace to the parent's one automatically + if (parent instanceof AutomaticNamespacedSchema autoNamespace) { + this.currentAutomaticNamespace = autoNamespace.getCurrentAutomaticNamespace(); + } else { + this.currentAutomaticNamespace = "minecraft"; + } return super.registerBlockEntities(schema); } finally { // after processing vanilla things, go back to the assigned namespace - this.automaticNamespace = originalNamespace; + this.currentAutomaticNamespace = originalNamespace; } } @@ -66,23 +78,27 @@ public Map> registerBlockEntities(Schema schema) */ @Override public Map> registerEntities(Schema schema) { - String originalNamespace = this.automaticNamespace; + String originalNamespace = this.getAutomaticNamespace(); try { - // revert the namespace to minecraft for the parent schema automatically - this.automaticNamespace = "minecraft"; + // switch the namespace to the parent's one automatically + if (parent instanceof AutomaticNamespacedSchema autoNamespace) { + this.currentAutomaticNamespace = autoNamespace.getCurrentAutomaticNamespace(); + } else { + this.currentAutomaticNamespace = "minecraft"; + } return super.registerEntities(schema); } finally { // after processing vanilla things, go back to the assigned namespace - this.automaticNamespace = originalNamespace; + this.currentAutomaticNamespace = originalNamespace; } } public void remove(final Map> map, String name) { if (name.indexOf(':') == -1) { - name = automaticNamespace + ":" + name; + name = getCurrentAutomaticNamespace() + ":" + name; } else if (name.indexOf(':') == 0) { // protect against typos/copy-paste errors - name = automaticNamespace + name; + name = getCurrentAutomaticNamespace() + name; } map.remove(name); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java new file mode 100644 index 00000000000..508ab1c4283 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java @@ -0,0 +1,17 @@ +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; +import com.mojang.datafixers.schemas.Schema; + +/*package-private*/ class AutoGTNamespacedSchema extends AutomaticNamespacedSchema { + + public AutoGTNamespacedSchema(int versionKey, Schema parent) { + super(versionKey, parent); + } + + @Override + protected final String getAutomaticNamespace() { + return GTCEu.MOD_ID; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 63a58cd9088..322bd9b206a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -1,11 +1,7 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; -import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; @@ -27,10 +23,10 @@ import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; import static com.mojang.datafixers.DSL.*; -public class V0 extends AutomaticNamespacedSchema { +public class V0 extends AutoGTNamespacedSchema { public V0(int versionKey, Schema parent) { - super(versionKey, parent, GTCEu.MOD_ID); + super(versionKey, parent); } // spotless:off diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java index 4e398f040ae..1e6ea114045 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java @@ -1,8 +1,5 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; - import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; @@ -11,10 +8,10 @@ import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; -public class V1 extends AutomaticNamespacedSchema { +public class V1 extends AutoGTNamespacedSchema { public V1(int versionKey, Schema parent) { - super(versionKey, parent, GTCEu.MOD_ID); + super(versionKey, parent); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java index 8cff6b0bd99..745f2894b13 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java @@ -1,11 +1,7 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; -import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; -import com.gregtechceu.gtceu.api.machine.MachineDefinition; -import com.gregtechceu.gtceu.api.registry.GTRegistries; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; import net.minecraft.util.datafix.fixes.References; @@ -23,10 +19,10 @@ import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; import static com.mojang.datafixers.DSL.*; -public class V1_3 extends AutomaticNamespacedSchema { +public class V1_3 extends AutoGTNamespacedSchema { public V1_3(int versionKey, Schema parent) { - super(versionKey, parent, GTCEu.MOD_ID); + super(versionKey, parent); } // spotless:off diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java index 0ecca8150fe..ded84437f27 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java @@ -1,8 +1,5 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; - import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; @@ -12,10 +9,10 @@ import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ELECTRIC_TIERS; import static com.gregtechceu.gtceu.common.datafixer.schemas.V1_3.registerSimpleMachine; -public class V1_4 extends AutomaticNamespacedSchema { +public class V1_4 extends AutoGTNamespacedSchema { public V1_4(int versionKey, Schema parent) { - super(versionKey, parent, GTCEu.MOD_ID); + super(versionKey, parent); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java index ec450fc1871..2cefa808b06 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java @@ -1,8 +1,5 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; - import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.Hook; @@ -14,10 +11,10 @@ import static com.mojang.datafixers.DSL.*; -public class V1_5 extends AutomaticNamespacedSchema { +public class V1_5 extends AutoGTNamespacedSchema { public V1_5(int versionKey, Schema parent) { - super(versionKey, parent, GTCEu.MOD_ID); + super(versionKey, parent); } @Override From dc4d1b3de0980f2295444b03d231d8b6b40e4320 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 16:58:21 +0300 Subject: [PATCH 60/83] THE RED GRANITE RENAME FIX RENAMED THINGS IT SHOULDN'T'VE --- .../gtceu/common/data/datafixer/GTDataFixers.java | 4 ++-- .../datafixer/fixes/RedGraniteRenameFix.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java 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 index 023272b1575..5106a2a19df 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -146,7 +146,7 @@ public static void addFixers(DataFixerBuilder builder) { builder.addFixer(new AddNewChoices(v1_4, "Added Welder and Spooler", References.BLOCK_ENTITY)); // Migrate GT's Molten fluids, ignore addons to allow them to fail loudly createBlockItemFluidRenameFix(builder, v1_4, "Remove molten fluids", - createRenamer(Pattern.compile("gtceu:molten_"), "gtceu:")); + createRenamer(Pattern.compile("gtceu:(flowing_)?molten_"), "gtceu:$1")); // separator @@ -156,7 +156,7 @@ public static void addFixers(DataFixerBuilder builder) { // createMaterialRenameFix(builder, v1_5, "Rename uranium_235 to uranium", // createRenamer(Pattern.compile("gtceu:(.*)uranium_235"), "gtceu:$1uranium")); createMaterialRenameFix(builder, v1_5, "Fix Red Granite name", - createRenamer(Pattern.compile("gtceu:(.*)granite_red"), "gtceu:$1red_granite")); + createRenamer(RedGraniteRenameFix.RENAMED_IDS)); createMaterialRenameFix(builder, v1_5, "Fix Oil variant names", createRenamer(OilVariantsRenameFix.RENAMED_IDS)); createMaterialRenameFix(builder, v1_5, "Fix Raw Palladium name", diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java new file mode 100644 index 00000000000..b720a8a4b04 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java @@ -0,0 +1,14 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.google.common.collect.ImmutableMap; + +import java.util.Map; + +public class RedGraniteRenameFix { + + public static final Map RENAMED_IDS = ImmutableMap.builder() + .put("gtceu:granite_red_dust", "gtceu:red_granite_dust") + .put("gtceu:small_granite_red_dust", "gtceu:small_red_granite_dust") + .put("gtceu:tiny_granite_red_dust", "gtceu:tiny_red_granite_dust") + .build(); +} From 878dd1ace10acb4382f606142bedbdabded03a50 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 16:58:32 +0300 Subject: [PATCH 61/83] make ForgeHooksMixin smaller --- .../core/mixins/datafixer/ForgeHooksMixin.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java index 45adb775e26..9f91b8610c7 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/ForgeHooksMixin.java @@ -8,30 +8,20 @@ import net.minecraft.nbt.NbtUtils; import net.minecraftforge.common.ForgeHooks; -import com.llamalad7.mixinextras.expression.Definition; -import com.llamalad7.mixinextras.expression.Expression; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; @Mixin(value = ForgeHooks.class, remap = false) public class ForgeHooksMixin { - @Definition(id = "CompoundTag", type = CompoundTag.class) - @Definition(id = "fmlData", local = @Local(name = "fmlData", type = CompoundTag.class), remap = false) - @Expression("fmlData = @(new CompoundTag())") - @ModifyExpressionValue(method = "writeAdditionalLevelSaveData", at = @At("MIXINEXTRAS:EXPRESSION")) + @ModifyVariable(method = "writeAdditionalLevelSaveData", at = @At(value = "STORE"), name = "fmlData") private static CompoundTag gtceu$addDataVersions(CompoundTag fmlData) { return NbtUtils.addCurrentDataVersion(fmlData); } - @Definition(id = "tag", local = @Local(type = CompoundTag.class, name = "tag")) - @Definition(id = "getCompound", - method = "Lnet/minecraft/nbt/CompoundTag;getCompound(Ljava/lang/String;)Lnet/minecraft/nbt/CompoundTag;", - remap = true) - @Expression("tag.getCompound('Registries')") - @ModifyExpressionValue(method = "readAdditionalLevelSaveData", at = @At(value = "MIXINEXTRAS:EXPRESSION")) + @ModifyVariable(method = "readAdditionalLevelSaveData", at = @At(value = "STORE"), name = "regs") private static CompoundTag gtceu$fixRegistriesTag(CompoundTag regs, @Local(name = "tag") CompoundTag tag) { int currentVersion = DataFixHelper.getGTDataVersion(tag); From ca952a7196acfa4c616d654b46755945593d89c3 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 18:24:33 +0300 Subject: [PATCH 62/83] Make sure the fixes actually only rename the things they're supposed to --- .../common/data/datafixer/GTDataFixers.java | 40 +++-- .../datafixer/fixes/MaterialRenameHelper.java | 131 ++++++++++++++ .../datafixer/fixes/OilVariantsRenameFix.java | 17 -- .../datafixer/fixes/RedGraniteRenameFix.java | 14 -- .../fixes/RemoveMoltenFluidsFix.java | 163 ++++++++++++++++++ 5 files changed, 322 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java 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 index 5106a2a19df..938274024a7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -145,8 +145,15 @@ public static void addFixers(DataFixerBuilder builder) { Schema v1_4 = builder.addSchema(1, 4, V1_4::new); builder.addFixer(new AddNewChoices(v1_4, "Added Welder and Spooler", References.BLOCK_ENTITY)); // Migrate GT's Molten fluids, ignore addons to allow them to fail loudly - createBlockItemFluidRenameFix(builder, v1_4, "Remove molten fluids", - createRenamer(Pattern.compile("gtceu:(flowing_)?molten_"), "gtceu:$1")); + builder.addFixer(BlockRenameFix.create(v1_4, "Remove molten fluid blocks", + createRenamer(RemoveMoltenFluidsFix.REMOVED_BLOCKS))); + builder.addFixer(ItemRenameFix.create(v1_4, "Remove molten fluid buckets", + createRenamer(RemoveMoltenFluidsFix.REMOVED_ITEMS))); + builder.addFixer(FluidRenameFix.create(v1_4, "Remove molten fluids", + createRenamer(RemoveMoltenFluidsFix.REMOVED_FLUIDS))); + // version that doesn't ignore addons: + // createBlockItemFluidRenameFix(builder, v1_4, "Remove molten fluids", + // createRenamer(Pattern.compile("(flowing_)?molten_"), "$1")); // separator @@ -155,12 +162,11 @@ public static void addFixers(DataFixerBuilder builder) { // createRenamer(Pattern.compile("gtceu:(.*)?uranium"), "gtceu:$1uranium_238")); // createMaterialRenameFix(builder, v1_5, "Rename uranium_235 to uranium", // createRenamer(Pattern.compile("gtceu:(.*)uranium_235"), "gtceu:$1uranium")); - createMaterialRenameFix(builder, v1_5, "Fix Red Granite name", - createRenamer(RedGraniteRenameFix.RENAMED_IDS)); - createMaterialRenameFix(builder, v1_5, "Fix Oil variant names", - createRenamer(OilVariantsRenameFix.RENAMED_IDS)); - createMaterialRenameFix(builder, v1_5, "Fix Raw Palladium name", - createRenamer(Pattern.compile("gtceu:(.*)palladium_raw"), "gtceu:$1raw_palladium")); + createMaterialRenameFix(builder, v1_5, "gtceu:granite_red", "gtceu:red_granite"); + createMaterialRenameFix(builder, v1_5, "gtceu:oil_heavy", "gtceu:heavy_oil"); + createMaterialRenameFix(builder, v1_5, "gtceu:oil_light", "gtceu:light_oil"); + createMaterialRenameFix(builder, v1_5, "gtceu:oil_medium", "gtceu:raw_oil"); + createMaterialRenameFix(builder, v1_5, "gtceu:palladium_raw", "gtceu:raw_palladium"); createBlockItemRenameFix(builder, v1_5, "Fix Palladium Substation Casing name", createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); @@ -189,10 +195,20 @@ private static void createBlockItemFluidRenameFix(DataFixerBuilder builder, Sche builder.addFixer(FluidRenameFix.create(schema, name + " for fluid", renamer)); } - private static void createMaterialRenameFix(DataFixerBuilder builder, Schema schema, String name, - UnaryOperator renamer) { - createBlockItemFluidRenameFix(builder, schema, name, renamer); - builder.addFixer(MaterialRenameFix.create(schema, name + " for material", renamer)); + /** + * create and add all required fixes to rename a material. + * @param builder the DFU builder instance + * @param schema the current version's schema + * @param oldName the material's old name INCLUDING the namespace + * @param newName the material's new name INCLUDING the namespace + */ + private static void createMaterialRenameFix(DataFixerBuilder builder, Schema schema, + String oldName, String newName) { + final UnaryOperator renamer = MaterialRenameHelper.createRenamer(oldName, newName); + final String dataFixName = "Fix " + newName + " name"; + + createBlockItemFluidRenameFix(builder, schema, dataFixName, renamer); + builder.addFixer(MaterialRenameFix.create(schema, dataFixName + " for material", renamer)); } private static void createBlockItemEntityRenameFix(DataFixerBuilder builder, Schema schema, String name, diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java new file mode 100644 index 00000000000..025a63b9ea3 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java @@ -0,0 +1,131 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.google.common.collect.ImmutableMap; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + +import java.util.Map; +import java.util.function.UnaryOperator; + +public class MaterialRenameHelper { + + public static UnaryOperator createRenamer(String oldName, String newName) { + // variable names are shoter than usual to make the rename map be as small as possible + // old namespace + final String oNs = oldName.substring(0, oldName.indexOf(':') + 1); + // old path + final String oP = oldName.substring(oldName.indexOf(':') + 1); + + // new namespace + final String nNs = newName.substring(0, newName.indexOf(':') + 1); + // new path + final String nP = newName.substring(newName.indexOf(':') + 1); + + // if anyone has a better suggestion on how to implement this, feel free to tell. + final Map renameMap = ImmutableMap.builder() // spotless:off + .put(oNs + oP, nNs + nP) + .put(oNs + "flowing_" + oP, nNs + "flowing_" + nP) + + .put(oNs + oP + "_ore", nNs + nP + "_ore") + .put(oNs + "granite_" + oP + "_ore", nNs + "granite_" + nP + "_ore") + .put(oNs + "diorite_" + oP + "_ore", nNs + "diorite_" + nP + "_ore") + .put(oNs + "andesite_" + oP + "_ore", nNs + "andesite_" + nP + "_ore") + .put(oNs + "red_granite_" + oP + "_ore", nNs + "red_granite_" + nP + "_ore") + .put(oNs + "marble_" + oP + "_ore", nNs + "marble_" + nP + "_ore") + .put(oNs + "deepslate_" + oP + "_ore", nNs + "deepslate_" + nP + "_ore") + .put(oNs + "tuff_" + oP + "_ore", nNs + "tuff_" + nP + "_ore") + .put(oNs + "sand_" + oP + "_ore", nNs + "sand_" + nP + "_ore") + .put(oNs + "red_sand_" + oP + "_ore", nNs + "red_sand_" + nP + "_ore") + .put(oNs + "gravel_" + oP + "_ore", nNs + "gravel_" + nP + "_ore") + .put(oNs + "basalt_" + oP + "_ore", nNs + "basalt_" + nP + "_ore") + .put(oNs + "netherrack_" + oP + "_ore", nNs + "netherrack_" + nP + "_ore") + .put(oNs + "blackstone_" + oP + "_ore", nNs + "blackstone_" + nP + "_ore") + .put(oNs + "endstone_" + oP + "_ore", nNs + "endstone_" + nP + "_ore") + .put(oNs + oP + "_indicator", nNs + nP + "_indicator") + + .put(oNs + "raw_" + oP, nNs + "raw_" + nP) + .put(oNs + "raw_" + oP + "_block", nNs + "raw_" + nP + "_block") + .put(oNs + "crushed_" + oP + "_ore", nNs + "crushed_" + nP + "_ore") + .put(oNs + "refined_" + oP + "_ore", nNs + "refined_" + nP + "_ore") + .put(oNs + "purified_" + oP + "_ore", nNs + "purified_" + nP + "_ore") + + .put(oNs + oP + "_dust", nNs + nP + "_dust") + .put(oNs + "small_" + oP + "_dust", nNs + "small_" + nP + "_dust") + .put(oNs + "tiny_" + oP + "_dust", nNs + "tiny_" + nP + "_dust") + .put(oNs + "impure_" + oP + "_dust", nNs + "impure_" + nP + "_dust") + .put(oNs + "purified_" + oP + "_dust", nNs + "purified_" + nP + "_dust") + + .put(oNs + oP + "_ingot", nNs + nP + "_ingot") + .put(oNs + "hot_" + oP + "_ingot", nNs + "hot_" + nP + "_ingot") + .put(oNs + oP + "_nugget", nNs + nP + "_nugget") + + .put(oNs + oP + "_gem", nNs + nP + "_gem") + .put(oNs + "chipped_" + oP + "_gem", nNs + "chipped_" + nP + "_gem") + .put(oNs + "flawed_" + oP + "_gem", nNs + "flawed_" + nP + "_gem") + .put(oNs + "flawless_" + oP + "_gem", nNs + "flawless_" + nP + "_gem") + .put(oNs + "exquisite_" + oP + "_gem", nNs + "exquisite_" + nP + "_gem") + + .put(oNs + oP + "_plate", nNs + nP + "_plate") + .put(oNs + "dense_" + oP + "_plate", nNs + "dense_" + nP + "_plate") + .put(oNs + "double_" + oP + "_plate", nNs + "double_" + nP + "_plate") + + .put(oNs + oP + "_round", nNs + nP + "_round") + .put(oNs + oP + "_foil", nNs + nP + "_foil") + .put(oNs + oP + "_foil", nNs + nP + "_foil") + .put(oNs + oP + "_rod", nNs + nP + "_rod") + .put(oNs + "long_" + oP + "_rod", nNs + "long_" + nP + "_rod") + .put(oNs + oP + "_bolt", nNs + nP + "_bolt") + .put(oNs + oP + "_screw", nNs + nP + "_screw") + .put(oNs + oP + "_ring", nNs + nP + "_ring") + .put(oNs + oP + "_spring", nNs + nP + "_spring") + .put(oNs + "small_" + oP + "_spring", nNs + "small_" + nP + "_spring") + .put(oNs + oP + "_rotor", nNs + nP + "_rotor") + .put(oNs + oP + "_gear", nNs + nP + "_gear") + .put(oNs + "small_" + oP + "_gear", nNs + "small_" + nP + "_gear") + .put(oNs + oP + "_lens", nNs + nP + "_lens") + + .put(oNs + oP + "_buzz_saw_blade", nNs + nP + "_buzz_saw_blade") + .put(oNs + oP + "_screwdriver_tip", nNs + nP + "_screwdriver_tip") + .put(oNs + oP + "_drill_head", nNs + nP + "_drill_head") + .put(oNs + oP + "_chainsaw_head", nNs + nP + "_chainsaw_head") + .put(oNs + oP + "_wrench_tip", nNs + nP + "_wrench_tip") + .put(oNs + oP + "_wire_cutter_head", nNs + nP + "_wire_cutter_head") + .put(oNs + oP + "_turbine_blade", nNs + nP + "_turbine_blade") + .put(oNs + oP + "_turbine_rotor", nNs + nP + "_turbine_rotor") + + .put(oNs + oP + "_block", nNs + nP + "_block") + .put(oNs + oP + "_frame", nNs + nP + "_frame") + + .put(oNs + "fine_" + oP + "_wire", nNs + "fine_" + nP + "_wire") + .put(oNs + oP + "_single_wire", nNs + nP + "_single_wire") + .put(oNs + oP + "_double_wire", nNs + nP + "_double_wire") + .put(oNs + oP + "_quadruple_wire", nNs + nP + "_quadruple_wire") + .put(oNs + oP + "_octal_wire", nNs + nP + "_octal_wire") + .put(oNs + oP + "_hex_wire", nNs + nP + "_hex_wire") + .put(oNs + oP + "_single_cable", nNs + nP + "_single_cable") + .put(oNs + oP + "_double_cable", nNs + nP + "_double_cable") + .put(oNs + oP + "_quadruple_cable", nNs + nP + "_quadruple_cable") + .put(oNs + oP + "_octal_cable", nNs + nP + "_octal_cable") + .put(oNs + oP + "_hex_cable", nNs + nP + "_hex_cable") + + .put(oNs + "tiny_" + oP + "_fluid_pipe", nNs + "tiny_" + nP + "_fluid_pipe") + .put(oNs + "small_" + oP + "_fluid_pipe", nNs + "small_" + nP + "_fluid_pipe") + .put(oNs + "normal_" + oP + "_fluid_pipe", nNs + "normal_" + nP + "_fluid_pipe") + .put(oNs + "large_" + oP + "_fluid_pipe", nNs + "large_" + nP + "_fluid_pipe") + .put(oNs + "huge_" + oP + "_fluid_pipe", nNs + "huge_" + nP + "_fluid_pipe") + .put(oNs + "quadruple_" + oP + "_fluid_pipe", nNs + "quadruple_" + nP + "_fluid_pipe") + .put(oNs + "nonuple_" + oP + "_fluid_pipe", nNs + "nonuple_" + nP + "_fluid_pipe") + + .put(oNs + "small_" + oP + "_item_pipe", nNs + "small_" + nP + "_item_pipe") + .put(oNs + "normal_" + oP + "_item_pipe", nNs + "normal_" + nP + "_item_pipe") + .put(oNs + "large_" + oP + "_item_pipe", nNs + "large_" + nP + "_item_pipe") + .put(oNs + "huge_" + oP + "_item_pipe", nNs + "huge_" + nP + "_item_pipe") + .put(oNs + "small_" + "restrictive_" + oP + "_item_pipe", nNs + "small_" + "restrictive_" + nP + "_item_pipe") + .put(oNs + "normal_" + "restrictive_" + oP + "_item_pipe", nNs + "normal_" + "restrictive_" + nP + "_item_pipe") + .put(oNs + "large_" + "restrictive_" + oP + "_item_pipe", nNs + "large_" + "restrictive_" + nP + "_item_pipe") + .put(oNs + "huge_" + "restrictive_" + oP + "_item_pipe", nNs + "huge_" + "restrictive_" + nP + "_item_pipe") + .build(); // spotless:on + + // noinspection DataFlowIssue + return id -> renameMap.getOrDefault(NamespacedSchema.ensureNamespaced(id), id); + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java deleted file mode 100644 index 016fc5e7994..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/OilVariantsRenameFix.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.gregtechceu.gtceu.common.datafixer.fixes; - -import com.google.common.collect.ImmutableMap; - -import java.util.Map; - -public class OilVariantsRenameFix { - - public static final Map RENAMED_IDS = ImmutableMap.builder() - .put("gtceu:oil_heavy", "gtceu:heavy_oil") - .put("gtceu:oil_light", "gtceu:light_oil") - .put("gtceu:oil_medium", "gtceu:raw_oil") - .put("gtceu:oil_heavy_bucket", "gtceu:heavy_oil_bucket") - .put("gtceu:oil_light_bucket", "gtceu:light_oil_bucket") - .put("gtceu:oil_medium_bucket", "gtceu:raw_oil_bucket") - .build(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java deleted file mode 100644 index b720a8a4b04..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RedGraniteRenameFix.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.gregtechceu.gtceu.common.datafixer.fixes; - -import com.google.common.collect.ImmutableMap; - -import java.util.Map; - -public class RedGraniteRenameFix { - - public static final Map RENAMED_IDS = ImmutableMap.builder() - .put("gtceu:granite_red_dust", "gtceu:red_granite_dust") - .put("gtceu:small_granite_red_dust", "gtceu:small_red_granite_dust") - .put("gtceu:tiny_granite_red_dust", "gtceu:tiny_red_granite_dust") - .build(); -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java new file mode 100644 index 00000000000..b114fb9f303 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java @@ -0,0 +1,163 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.google.common.collect.ImmutableMap; + +import java.util.Map; +import java.util.Set; + +public class RemoveMoltenFluidsFix { + + public static final Map REMOVED_BLOCKS = ImmutableMap.builder() + .put("gtceu:molten_bismuth_bronze", "gtceu:bismuth_bronze") + .put("gtceu:molten_black_bronze", "gtceu:black_bronze") + .put("gtceu:molten_black_steel", "gtceu:black_steel") + .put("gtceu:molten_blue_steel", "gtceu:blue_steel") + .put("gtceu:molten_enriched_naquadah_trinium_europium_duranide", "gtceu:enriched_naquadah_trinium_europium_duranide") + .put("gtceu:molten_gallium_arsenide", "gtceu:gallium_arsenide") + .put("gtceu:molten_hastelloy_c_276", "gtceu:hastelloy_c_276") + .put("gtceu:molten_hastelloy_x", "gtceu:hastelloy_x") + .put("gtceu:molten_hsla_steel", "gtceu:hsla_steel") + .put("gtceu:molten_hsse", "gtceu:hsse") + .put("gtceu:molten_hssg", "gtceu:hssg") + .put("gtceu:molten_hsss", "gtceu:hsss") + .put("gtceu:molten_incoloy_ma_956", "gtceu:incoloy_ma_956") + .put("gtceu:molten_indium_tin_barium_titanium_cuprate", "gtceu:indium_tin_barium_titanium_cuprate") + .put("gtceu:molten_kanthal", "gtceu:kanthal") + .put("gtceu:molten_magnesium_diboride", "gtceu:magnesium_diboride") + .put("gtceu:molten_manganese_phosphide", "gtceu:manganese_phosphide") + .put("gtceu:molten_maraging_steel_300", "gtceu:maraging_steel_300") + .put("gtceu:molten_mercury_barium_calcium_cuprate", "gtceu:mercury_barium_calcium_cuprate") + .put("gtceu:molten_molybdenum_disilicide", "gtceu:molybdenum_disilicide") + .put("gtceu:molten_naquadah_alloy", "gtceu:naquadah_alloy") + .put("gtceu:molten_nichrome", "gtceu:nichrome") + .put("gtceu:molten_niobium_nitride", "gtceu:niobium_nitride") + .put("gtceu:molten_niobium_titanium", "gtceu:niobium_titanium") + .put("gtceu:molten_osmiridium", "gtceu:osmiridium") + .put("gtceu:molten_red_steel", "gtceu:red_steel") + .put("gtceu:molten_rhodium_plated_palladium", "gtceu:rhodium_plated_palladium") + .put("gtceu:molten_rose_gold", "gtceu:rose_gold") + .put("gtceu:molten_rtm_alloy", "gtceu:rtm_alloy") + .put("gtceu:molten_ruridit", "gtceu:ruridit") + .put("gtceu:molten_ruthenium_trinium_americium_neutronate", "gtceu:ruthenium_trinium_americium_neutronate") + .put("gtceu:molten_samarium_iron_arsenic_oxide", "gtceu:samarium_iron_arsenic_oxide") + .put("gtceu:molten_stainless_steel", "gtceu:stainless_steel") + .put("gtceu:molten_stellite_100", "gtceu:stellite_100") + .put("gtceu:molten_sterling_silver", "gtceu:sterling_silver") + .put("gtceu:molten_tantalum_carbide", "gtceu:tantalum_carbide") + .put("gtceu:molten_titanium_carbide", "gtceu:titanium_carbide") + .put("gtceu:molten_titanium_tungsten_carbide", "gtceu:titanium_tungsten_carbide") + .put("gtceu:molten_tungsten_carbide", "gtceu:tungsten_carbide") + .put("gtceu:molten_tungsten_steel", "gtceu:tungsten_steel") + .put("gtceu:molten_ultimet", "gtceu:ultimet") + .put("gtceu:molten_uranium_rhodium_dinaquadide", "gtceu:uranium_rhodium_dinaquadide") + .put("gtceu:molten_uranium_triplatinum", "gtceu:uranium_triplatinum") + .put("gtceu:molten_vanadium_gallium", "gtceu:vanadium_gallium") + .put("gtceu:molten_vanadium_steel", "gtceu:vanadium_steel") + .put("gtceu:molten_watertight_steel", "gtceu:watertight_steel") + .put("gtceu:molten_yttrium_barium_cuprate", "gtceu:yttrium_barium_cuprate") + .put("gtceu:molten_zeron_100", "gtceu:zeron_100") + .build(); + + public static final Map REMOVED_FLUIDS = ImmutableMap.builder() + .putAll(REMOVED_BLOCKS) + .put("gtceu:flowing_molten_bismuth_bronze", "gtceu:flowing_bismuth_bronze") + .put("gtceu:flowing_molten_black_bronze", "gtceu:flowing_black_bronze") + .put("gtceu:flowing_molten_black_steel", "gtceu:flowing_black_steel") + .put("gtceu:flowing_molten_blue_steel", "gtceu:flowing_blue_steel") + .put("gtceu:flowing_molten_enriched_naquadah_trinium_europium_duranide", "gtceu:flowing_enriched_naquadah_trinium_europium_duranide") + .put("gtceu:flowing_molten_gallium_arsenide", "gtceu:flowing_gallium_arsenide") + .put("gtceu:flowing_molten_hastelloy_c_276", "gtceu:flowing_hastelloy_c_276") + .put("gtceu:flowing_molten_hastelloy_x", "gtceu:flowing_hastelloy_x") + .put("gtceu:flowing_molten_hsla_steel", "gtceu:flowing_hsla_steel") + .put("gtceu:flowing_molten_hsse", "gtceu:flowing_hsse") + .put("gtceu:flowing_molten_hssg", "gtceu:flowing_hssg") + .put("gtceu:flowing_molten_hsss", "gtceu:flowing_hsss") + .put("gtceu:flowing_molten_incoloy_ma_956", "gtceu:flowing_incoloy_ma_956") + .put("gtceu:flowing_molten_indium_tin_barium_titanium_cuprate", "gtceu:flowing_indium_tin_barium_titanium_cuprate") + .put("gtceu:flowing_molten_kanthal", "gtceu:flowing_kanthal") + .put("gtceu:flowing_molten_magnesium_diboride", "gtceu:flowing_magnesium_diboride") + .put("gtceu:flowing_molten_manganese_phosphide", "gtceu:flowing_manganese_phosphide") + .put("gtceu:flowing_molten_maraging_steel_300", "gtceu:flowing_maraging_steel_300") + .put("gtceu:flowing_molten_mercury_barium_calcium_cuprate", "gtceu:flowing_mercury_barium_calcium_cuprate") + .put("gtceu:flowing_molten_molybdenum_disilicide", "gtceu:flowing_molybdenum_disilicide") + .put("gtceu:flowing_molten_naquadah_alloy", "gtceu:flowing_naquadah_alloy") + .put("gtceu:flowing_molten_nichrome", "gtceu:flowing_nichrome") + .put("gtceu:flowing_molten_niobium_nitride", "gtceu:flowing_niobium_nitride") + .put("gtceu:flowing_molten_niobium_titanium", "gtceu:flowing_niobium_titanium") + .put("gtceu:flowing_molten_osmiridium", "gtceu:flowing_osmiridium") + .put("gtceu:flowing_molten_red_steel", "gtceu:flowing_red_steel") + .put("gtceu:flowing_molten_rhodium_plated_palladium", "gtceu:flowing_rhodium_plated_palladium") + .put("gtceu:flowing_molten_rose_gold", "gtceu:flowing_rose_gold") + .put("gtceu:flowing_molten_rtm_alloy", "gtceu:flowing_rtm_alloy") + .put("gtceu:flowing_molten_ruridit", "gtceu:flowing_ruridit") + .put("gtceu:flowing_molten_ruthenium_trinium_americium_neutronate", "gtceu:flowing_ruthenium_trinium_americium_neutronate") + .put("gtceu:flowing_molten_samarium_iron_arsenic_oxide", "gtceu:flowing_samarium_iron_arsenic_oxide") + .put("gtceu:flowing_molten_stainless_steel", "gtceu:flowing_stainless_steel") + .put("gtceu:flowing_molten_stellite_100", "gtceu:flowing_stellite_100") + .put("gtceu:flowing_molten_sterling_silver", "gtceu:flowing_sterling_silver") + .put("gtceu:flowing_molten_tantalum_carbide", "gtceu:flowing_tantalum_carbide") + .put("gtceu:flowing_molten_titanium_carbide", "gtceu:flowing_titanium_carbide") + .put("gtceu:flowing_molten_titanium_tungsten_carbide", "gtceu:flowing_titanium_tungsten_carbide") + .put("gtceu:flowing_molten_tungsten_carbide", "gtceu:flowing_tungsten_carbide") + .put("gtceu:flowing_molten_tungsten_steel", "gtceu:flowing_tungsten_steel") + .put("gtceu:flowing_molten_ultimet", "gtceu:flowing_ultimet") + .put("gtceu:flowing_molten_uranium_rhodium_dinaquadide", "gtceu:flowing_uranium_rhodium_dinaquadide") + .put("gtceu:flowing_molten_uranium_triplatinum", "gtceu:flowing_uranium_triplatinum") + .put("gtceu:flowing_molten_vanadium_gallium", "gtceu:flowing_vanadium_gallium") + .put("gtceu:flowing_molten_vanadium_steel", "gtceu:flowing_vanadium_steel") + .put("gtceu:flowing_molten_watertight_steel", "gtceu:flowing_watertight_steel") + .put("gtceu:flowing_molten_yttrium_barium_cuprate", "gtceu:flowing_yttrium_barium_cuprate") + .put("gtceu:flowing_molten_zeron_100", "gtceu:flowing_zeron_100") + .build(); + + public static final Map REMOVED_ITEMS = ImmutableMap.builder() + .put("gtceu:molten_bismuth_bronze_bucket", "gtceu:bismuth_bronze_bucket") + .put("gtceu:molten_black_bronze_bucket", "gtceu:black_bronze_bucket") + .put("gtceu:molten_black_steel_bucket", "gtceu:black_steel_bucket") + .put("gtceu:molten_blue_steel_bucket", "gtceu:blue_steel_bucket") + .put("gtceu:molten_enriched_naquadah_trinium_europium_duranide_bucket", "gtceu:enriched_naquadah_trinium_europium_duranide_bucket") + .put("gtceu:molten_gallium_arsenide_bucket", "gtceu:gallium_arsenide_bucket") + .put("gtceu:molten_hastelloy_c_276_bucket", "gtceu:hastelloy_c_276_bucket") + .put("gtceu:molten_hastelloy_x_bucket", "gtceu:hastelloy_x_bucket") + .put("gtceu:molten_hsla_steel_bucket", "gtceu:hsla_steel_bucket") + .put("gtceu:molten_hsse_bucket", "gtceu:hsse_bucket") + .put("gtceu:molten_hssg_bucket", "gtceu:hssg_bucket") + .put("gtceu:molten_hsss_bucket", "gtceu:hsss_bucket") + .put("gtceu:molten_incoloy_ma_956_bucket", "gtceu:incoloy_ma_956_bucket") + .put("gtceu:molten_indium_tin_barium_titanium_cuprate_bucket", "gtceu:indium_tin_barium_titanium_cuprate_bucket") + .put("gtceu:molten_kanthal_bucket", "gtceu:kanthal_bucket") + .put("gtceu:molten_magnesium_diboride_bucket", "gtceu:magnesium_diboride_bucket") + .put("gtceu:molten_manganese_phosphide_bucket", "gtceu:manganese_phosphide_bucket") + .put("gtceu:molten_maraging_steel_300_bucket", "gtceu:maraging_steel_300_bucket") + .put("gtceu:molten_mercury_barium_calcium_cuprate_bucket", "gtceu:mercury_barium_calcium_cuprate_bucket") + .put("gtceu:molten_molybdenum_disilicide_bucket", "gtceu:molybdenum_disilicide_bucket") + .put("gtceu:molten_naquadah_alloy_bucket", "gtceu:naquadah_alloy_bucket") + .put("gtceu:molten_nichrome_bucket", "gtceu:nichrome_bucket") + .put("gtceu:molten_niobium_nitride_bucket", "gtceu:niobium_nitride_bucket") + .put("gtceu:molten_niobium_titanium_bucket", "gtceu:niobium_titanium_bucket") + .put("gtceu:molten_osmiridium_bucket", "gtceu:osmiridium_bucket") + .put("gtceu:molten_red_steel_bucket", "gtceu:red_steel_bucket") + .put("gtceu:molten_rhodium_plated_palladium_bucket", "gtceu:rhodium_plated_palladium_bucket") + .put("gtceu:molten_rose_gold_bucket", "gtceu:rose_gold_bucket") + .put("gtceu:molten_rtm_alloy_bucket", "gtceu:rtm_alloy_bucket") + .put("gtceu:molten_ruridit_bucket", "gtceu:ruridit_bucket") + .put("gtceu:molten_ruthenium_trinium_americium_neutronate_bucket", "gtceu:ruthenium_trinium_americium_neutronate_bucket") + .put("gtceu:molten_samarium_iron_arsenic_oxide_bucket", "gtceu:samarium_iron_arsenic_oxide_bucket") + .put("gtceu:molten_stainless_steel_bucket", "gtceu:stainless_steel_bucket") + .put("gtceu:molten_stellite_100_bucket", "gtceu:stellite_100_bucket") + .put("gtceu:molten_sterling_silver_bucket", "gtceu:sterling_silver_bucket") + .put("gtceu:molten_tantalum_carbide_bucket", "gtceu:tantalum_carbide_bucket") + .put("gtceu:molten_titanium_carbide_bucket", "gtceu:titanium_carbide_bucket") + .put("gtceu:molten_titanium_tungsten_carbide_bucket", "gtceu:titanium_tungsten_carbide_bucket") + .put("gtceu:molten_tungsten_carbide_bucket", "gtceu:tungsten_carbide_bucket") + .put("gtceu:molten_tungsten_steel_bucket", "gtceu:tungsten_steel_bucket") + .put("gtceu:molten_ultimet_bucket", "gtceu:ultimet_bucket") + .put("gtceu:molten_uranium_rhodium_dinaquadide_bucket", "gtceu:uranium_rhodium_dinaquadide_bucket") + .put("gtceu:molten_uranium_triplatinum_bucket", "gtceu:uranium_triplatinum_bucket") + .put("gtceu:molten_vanadium_gallium_bucket", "gtceu:vanadium_gallium_bucket") + .put("gtceu:molten_vanadium_steel_bucket", "gtceu:vanadium_steel_bucket") + .put("gtceu:molten_watertight_steel_bucket", "gtceu:watertight_steel_bucket") + .put("gtceu:molten_yttrium_barium_cuprate_bucket", "gtceu:yttrium_barium_cuprate_bucket") + .put("gtceu:molten_zeron_100_bucket", "gtceu:zeron_100_bucket") + .build(); +} From e3e6ea391ede650b03e036bf7910a2200e663f96 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 18:25:13 +0300 Subject: [PATCH 63/83] Fall back to iron rotor if the nbt is invalid in ItemStackTurbineRotorFix --- .../datafixer/fixes/ItemStackTurbineRotorFix.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java index b03edbc0450..97c11d322e0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java @@ -4,7 +4,6 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; import com.mojang.datafixers.util.Pair; -import com.mojang.serialization.Dynamic; import net.minecraft.util.datafix.fixes.References; import net.minecraft.util.datafix.schemas.NamespacedSchema; @@ -32,8 +31,13 @@ public TypeRewriteRule makeRule() { if (itemId.isEmpty() || !Objects.equals(itemId.get().getSecond(), OLD_TURBINE_ROTOR_ITEM_ID)) { return typed; } - Typed tag = typed.getOrCreateTyped(tagFinder); - Typed partStats = tag.getOrCreateTyped(partStatsFinder); + var tag = typed.getOptionalTyped(tagFinder); + if (tag.isEmpty()) { + // if it doesn't have a tag (registry snapshots?), make it an iron turbine rotor by default. + return typed.set(itemIdFinder, + Pair.of(References.ITEM_NAME.typeName(), "gtceu:iron_turbine_rotor")); + } + Typed partStats = tag.get().getOrCreateTyped(partStatsFinder); // move the Damage nbt field to the root of nbt var damage = partStats.getOrCreate(DSL.remainderFinder()) From c637d987307ef9b27e919e0a35a84cac8f817cb4 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 18:35:10 +0300 Subject: [PATCH 64/83] WHOOPS --- .../gtceu/api/datafixer/fixes/FluidRenameFix.java | 10 +++++----- .../common/datafixer/fixes/MaterialRenameHelper.java | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) 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 index af78321d7b0..c0b6a099117 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/fixes/FluidRenameFix.java @@ -29,17 +29,17 @@ public TypeRewriteRule makeRule() { 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::fixItem)); + return this.fixTypeEverywhere(this.name, type, (ops) -> (typeAndId) -> typeAndId.mapSecond(this::fixFluid)); } } - protected abstract String fixItem(String item); + protected abstract String fixFluid(String fluid); public static DataFix create(Schema outputSchema, String name, final Function fixer) { - return new net.minecraft.util.datafix.fixes.ItemRenameFix(outputSchema, name) { + return new FluidRenameFix(outputSchema, name) { - protected String fixItem(String item) { - return fixer.apply(item); + protected String fixFluid(String fluid) { + return fixer.apply(fluid); } }; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java index 025a63b9ea3..c3de2c0a228 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java @@ -70,7 +70,6 @@ public static UnaryOperator createRenamer(String oldName, String newName .put(oNs + oP + "_round", nNs + nP + "_round") .put(oNs + oP + "_foil", nNs + nP + "_foil") - .put(oNs + oP + "_foil", nNs + nP + "_foil") .put(oNs + oP + "_rod", nNs + nP + "_rod") .put(oNs + "long_" + oP + "_rod", nNs + "long_" + nP + "_rod") .put(oNs + oP + "_bolt", nNs + nP + "_bolt") From 85096716a05f3e46eb146e83b47d9ebd70a69556 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 18:55:14 +0300 Subject: [PATCH 65/83] the way I renamed the old turbine_rotor item didn't work, let's try this --- .../fixes/ItemStackTurbineRotorFix.java | 95 ++++++++++--------- 1 file changed, 51 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java index 97c11d322e0..edeecc02083 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java @@ -2,7 +2,6 @@ import com.mojang.datafixers.*; import com.mojang.datafixers.schemas.Schema; -import com.mojang.datafixers.types.Type; import com.mojang.datafixers.util.Pair; import net.minecraft.util.datafix.fixes.References; import net.minecraft.util.datafix.schemas.NamespacedSchema; @@ -13,59 +12,67 @@ public class ItemStackTurbineRotorFix extends DataFix { private static final String OLD_TURBINE_ROTOR_ITEM_ID = "gtceu:turbine_rotor"; + private static final String DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID = "gtceu:iron_turbine_rotor"; public ItemStackTurbineRotorFix(Schema outputSchema) { super(outputSchema, true); } public TypeRewriteRule makeRule() { - Type type = this.getInputSchema().getType(References.ITEM_STACK); - OpticFinder> itemIdFinder = DSL.fieldFinder("id", - DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString())); - OpticFinder tagFinder = type.findField("tag"); - OpticFinder partStatsFinder = tagFinder.type().findField("GT.PartStats"); - OpticFinder materialFinder = DSL.fieldFinder("Material", NamespacedSchema.namespacedString()); + var type = this.getInputSchema().getType(References.ITEM_STACK); + var itemNameType = DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString()); + if (!Objects.equals(this.getInputSchema().getType(References.ITEM_NAME), itemNameType)) { + throw new IllegalStateException("item name type is not what was expected."); + } - return this.fixTypeEverywhereTyped("ItemStackTurbineRotorFix", type, (typed) -> { - Optional> itemId = typed.getOptional(itemIdFinder); - if (itemId.isEmpty() || !Objects.equals(itemId.get().getSecond(), OLD_TURBINE_ROTOR_ITEM_ID)) { - return typed; - } - var tag = typed.getOptionalTyped(tagFinder); - if (tag.isEmpty()) { - // if it doesn't have a tag (registry snapshots?), make it an iron turbine rotor by default. - return typed.set(itemIdFinder, - Pair.of(References.ITEM_NAME.typeName(), "gtceu:iron_turbine_rotor")); - } - Typed partStats = tag.get().getOrCreateTyped(partStatsFinder); + var itemIdFinder = DSL.fieldFinder("id", itemNameType); + var tagFinder = type.findField("tag"); + var partStatsFinder = tagFinder.type().findField("GT.PartStats"); + var materialFinder = DSL.fieldFinder("Material", NamespacedSchema.namespacedString()); - // move the Damage nbt field to the root of nbt - var damage = partStats.getOrCreate(DSL.remainderFinder()) - .get("Damage").result(); - if (damage.isPresent()) { - typed = typed.update(DSL.remainderFinder(), dynamic -> { - return dynamic.set("Damage", damage.get()); - }); - } + return TypeRewriteRule.seq( + this.fixTypeEverywhereTyped("ItemStackTurbineRotorFix", type, (typed) -> { + var itemName = typed.getOptional(itemIdFinder); + if (itemName.isEmpty() || !Objects.equals(itemName.get().getSecond(), OLD_TURBINE_ROTOR_ITEM_ID)) { + return typed; + } + Typed tag = typed.getOrCreateTyped(tagFinder); + Typed partStats = tag.getOrCreateTyped(partStatsFinder); - Optional material = partStats.getOptional(materialFinder); - if (material.isEmpty()) { - // if it doesn't have a material (somehow??), make it an iron turbine rotor by default. - return typed.set(itemIdFinder, - Pair.of(References.ITEM_NAME.typeName(), "gtceu:iron_turbine_rotor")); - } + // move the Damage nbt field to the root of nbt + var damage = partStats.getOrCreate(DSL.remainderFinder()) + .get("Damage").result(); + if (damage.isPresent()) { + typed = typed.update(DSL.remainderFinder(), dynamic -> { + return dynamic.set("Damage", damage.get()); + }); + } - String materialName = material.get(); - if (materialName.indexOf(':') == -1) { - // compatibility for very old turbine rotors we might come across - // shouldn't happen but better safe than sorry - materialName = "gtceu:" + materialName; - } - // All turbine rotor items' names follow a specific pattern and are registered under the material's - // namespace so this *should* be safe - return typed.set(itemIdFinder, - Pair.of(References.ITEM_NAME.typeName(), materialName + "_turbine_rotor")); + Optional material = partStats.getOptional(materialFinder); + if (material.isEmpty()) { + // if it doesn't have a material (somehow??), make it an iron turbine rotor by default. + return typed.set(itemIdFinder, + Pair.of(References.ITEM_NAME.typeName(), DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID)); + } - }); + String materialName = material.get(); + if (materialName.indexOf(':') == -1) { + // compatibility for very old turbine rotors we might come across + // shouldn't happen but better safe than sorry + materialName = "gtceu:" + materialName; + } + // All turbine rotor items' names follow a specific pattern and are registered under the material's + // namespace so this *should* be safe + return typed.set(itemIdFinder, + Pair.of(References.ITEM_NAME.typeName(), materialName + "_turbine_rotor")); + + }), + this.fixTypeEverywhere("Rename blank Turbine Rotor item", itemNameType, + ops -> itemName -> itemName.mapSecond(id -> { + return Objects.equals(id, OLD_TURBINE_ROTOR_ITEM_ID) ? + DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID : id; + }) + ) + ); } } From b5516b97251407e5cd3f97fea7f117e3e890ec66 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 18:55:44 +0300 Subject: [PATCH 66/83] Add fixer for remapping the (ancient) (duplicate) GT milk fluid --- .../gtceu/common/data/datafixer/GTDataFixers.java | 6 ++++++ 1 file changed, 6 insertions(+) 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 index 938274024a7..13b0ca93642 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -124,6 +124,12 @@ public static void addFixers(DataFixerBuilder builder) { builder.addFixer(ItemRenameFix.create(v1_0, "Rename electric wire cutters", createRenamer(Pattern.compile("([lhi])v_([a-z0-9/._-]+)_wirecutter"), "$1v_$2_wire_cutter"))); + // for whatever reason forge registers the milk fluid under MC's namespace + builder.addFixer(FluidRenameFix.create(v1_0, "Remove GT milk fluid", + createRenamer(Map.of("gtceu:milk", "minecraft:milk", "gtceu:flowing_milk", "minecraft:flowing_milk")))); + builder.addFixer(ItemRenameFix.create(v1_0, "Remove GT milk bucket", + createRenamer("gtceu:milk_bucket", "minecraft:milk_bucket"))); + // separator Schema v1_1 = builder.addSchema(1, 1, SAME_NAMESPACED); From 6103fdf4f358f34062439335c637a0fbbf5a6746 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 19:08:49 +0300 Subject: [PATCH 67/83] I forgot buckets. and non-default fluid states. --- .../datafixer/fixes/MaterialRenameHelper.java | 102 +++++++++++------- 1 file changed, 61 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java index c3de2c0a228..9f596ef60ba 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java @@ -8,24 +8,44 @@ public class MaterialRenameHelper { + /** + * This class creates a renamer that handles all of a material's (default) forms + * @param oldName + * @param newName + * @return + */ public static UnaryOperator createRenamer(String oldName, String newName) { // variable names are shoter than usual to make the rename map be as small as possible - // old namespace + // old namespace (including colon) final String oNs = oldName.substring(0, oldName.indexOf(':') + 1); // old path final String oP = oldName.substring(oldName.indexOf(':') + 1); - // new namespace + // new namespace (including colon) final String nNs = newName.substring(0, newName.indexOf(':') + 1); // new path final String nP = newName.substring(newName.indexOf(':') + 1); // if anyone has a better suggestion on how to implement this, feel free to tell. final Map renameMap = ImmutableMap.builder() // spotless:off - .put(oNs + oP, nNs + nP) + .put(oldName, newName) .put(oNs + "flowing_" + oP, nNs + "flowing_" + nP) - - .put(oNs + oP + "_ore", nNs + nP + "_ore") + .put(oNs + "liquid_" + oP, nNs + "liquid_" + nP) + .put(oNs + "flowing_" + "liquid_" + oP, nNs + "flowing_" + "liquid_" + nP) + .put(oldName + "_gas", newName + "_gas") + .put(oNs + "flowing_" + oP + "_gas", nNs + "flowing_" + nP + "_gas") + .put(oldName + "_plasma", newName + "_plasma") + .put(oNs + "flowing_" + oP + "_plasma", nNs + "flowing_" + nP + "_plasma") + .put(oNs + "molten_" + oP, nNs + "molten_" + nP) + .put(oNs + "flowing_" + "molten_" + oP, nNs + "flowing_" + "molten_" + nP) + + .put(oldName + "_bucket", newName + "_bucket") + .put(oNs + "liquid_" + oP + "_bucket", nNs + "liquid_" + nP + "_bucket") + .put(oldName + "_gas" + "_bucket", newName + "_gas" + "_bucket") + .put(oldName + "_plasma" + "_bucket", newName + "_plasma" + "_bucket") + .put(oNs + "molten_" + oP + "_bucket", nNs + "molten_" + nP + "_bucket") + + .put(oldName + "_ore", newName + "_ore") .put(oNs + "granite_" + oP + "_ore", nNs + "granite_" + nP + "_ore") .put(oNs + "diorite_" + oP + "_ore", nNs + "diorite_" + nP + "_ore") .put(oNs + "andesite_" + oP + "_ore", nNs + "andesite_" + nP + "_ore") @@ -40,7 +60,7 @@ public static UnaryOperator createRenamer(String oldName, String newName .put(oNs + "netherrack_" + oP + "_ore", nNs + "netherrack_" + nP + "_ore") .put(oNs + "blackstone_" + oP + "_ore", nNs + "blackstone_" + nP + "_ore") .put(oNs + "endstone_" + oP + "_ore", nNs + "endstone_" + nP + "_ore") - .put(oNs + oP + "_indicator", nNs + nP + "_indicator") + .put(oldName + "_indicator", newName + "_indicator") .put(oNs + "raw_" + oP, nNs + "raw_" + nP) .put(oNs + "raw_" + oP + "_block", nNs + "raw_" + nP + "_block") @@ -48,63 +68,63 @@ public static UnaryOperator createRenamer(String oldName, String newName .put(oNs + "refined_" + oP + "_ore", nNs + "refined_" + nP + "_ore") .put(oNs + "purified_" + oP + "_ore", nNs + "purified_" + nP + "_ore") - .put(oNs + oP + "_dust", nNs + nP + "_dust") + .put(oldName + "_dust", newName + "_dust") .put(oNs + "small_" + oP + "_dust", nNs + "small_" + nP + "_dust") .put(oNs + "tiny_" + oP + "_dust", nNs + "tiny_" + nP + "_dust") .put(oNs + "impure_" + oP + "_dust", nNs + "impure_" + nP + "_dust") .put(oNs + "purified_" + oP + "_dust", nNs + "purified_" + nP + "_dust") - .put(oNs + oP + "_ingot", nNs + nP + "_ingot") + .put(oldName + "_ingot", newName + "_ingot") .put(oNs + "hot_" + oP + "_ingot", nNs + "hot_" + nP + "_ingot") - .put(oNs + oP + "_nugget", nNs + nP + "_nugget") + .put(oldName + "_nugget", newName + "_nugget") - .put(oNs + oP + "_gem", nNs + nP + "_gem") + .put(oldName + "_gem", newName + "_gem") .put(oNs + "chipped_" + oP + "_gem", nNs + "chipped_" + nP + "_gem") .put(oNs + "flawed_" + oP + "_gem", nNs + "flawed_" + nP + "_gem") .put(oNs + "flawless_" + oP + "_gem", nNs + "flawless_" + nP + "_gem") .put(oNs + "exquisite_" + oP + "_gem", nNs + "exquisite_" + nP + "_gem") - .put(oNs + oP + "_plate", nNs + nP + "_plate") + .put(oldName + "_plate", newName + "_plate") .put(oNs + "dense_" + oP + "_plate", nNs + "dense_" + nP + "_plate") .put(oNs + "double_" + oP + "_plate", nNs + "double_" + nP + "_plate") - .put(oNs + oP + "_round", nNs + nP + "_round") - .put(oNs + oP + "_foil", nNs + nP + "_foil") - .put(oNs + oP + "_rod", nNs + nP + "_rod") + .put(oldName + "_round", newName + "_round") + .put(oldName + "_foil", newName + "_foil") + .put(oldName + "_rod", newName + "_rod") .put(oNs + "long_" + oP + "_rod", nNs + "long_" + nP + "_rod") - .put(oNs + oP + "_bolt", nNs + nP + "_bolt") - .put(oNs + oP + "_screw", nNs + nP + "_screw") - .put(oNs + oP + "_ring", nNs + nP + "_ring") - .put(oNs + oP + "_spring", nNs + nP + "_spring") + .put(oldName + "_bolt", newName + "_bolt") + .put(oldName + "_screw", newName + "_screw") + .put(oldName + "_ring", newName + "_ring") + .put(oldName + "_spring", newName + "_spring") .put(oNs + "small_" + oP + "_spring", nNs + "small_" + nP + "_spring") - .put(oNs + oP + "_rotor", nNs + nP + "_rotor") - .put(oNs + oP + "_gear", nNs + nP + "_gear") + .put(oldName + "_rotor", newName + "_rotor") + .put(oldName + "_gear", newName + "_gear") .put(oNs + "small_" + oP + "_gear", nNs + "small_" + nP + "_gear") - .put(oNs + oP + "_lens", nNs + nP + "_lens") + .put(oldName + "_lens", newName + "_lens") - .put(oNs + oP + "_buzz_saw_blade", nNs + nP + "_buzz_saw_blade") - .put(oNs + oP + "_screwdriver_tip", nNs + nP + "_screwdriver_tip") - .put(oNs + oP + "_drill_head", nNs + nP + "_drill_head") - .put(oNs + oP + "_chainsaw_head", nNs + nP + "_chainsaw_head") - .put(oNs + oP + "_wrench_tip", nNs + nP + "_wrench_tip") - .put(oNs + oP + "_wire_cutter_head", nNs + nP + "_wire_cutter_head") - .put(oNs + oP + "_turbine_blade", nNs + nP + "_turbine_blade") - .put(oNs + oP + "_turbine_rotor", nNs + nP + "_turbine_rotor") + .put(oldName + "_buzz_saw_blade", newName + "_buzz_saw_blade") + .put(oldName + "_screwdriver_tip", newName + "_screwdriver_tip") + .put(oldName + "_drill_head", newName + "_drill_head") + .put(oldName + "_chainsaw_head", newName + "_chainsaw_head") + .put(oldName + "_wrench_tip", newName + "_wrench_tip") + .put(oldName + "_wire_cutter_head", newName + "_wire_cutter_head") + .put(oldName + "_turbine_blade", newName + "_turbine_blade") + .put(oldName + "_turbine_rotor", newName + "_turbine_rotor") - .put(oNs + oP + "_block", nNs + nP + "_block") - .put(oNs + oP + "_frame", nNs + nP + "_frame") + .put(oldName + "_block", newName + "_block") + .put(oldName + "_frame", newName + "_frame") .put(oNs + "fine_" + oP + "_wire", nNs + "fine_" + nP + "_wire") - .put(oNs + oP + "_single_wire", nNs + nP + "_single_wire") - .put(oNs + oP + "_double_wire", nNs + nP + "_double_wire") - .put(oNs + oP + "_quadruple_wire", nNs + nP + "_quadruple_wire") - .put(oNs + oP + "_octal_wire", nNs + nP + "_octal_wire") - .put(oNs + oP + "_hex_wire", nNs + nP + "_hex_wire") - .put(oNs + oP + "_single_cable", nNs + nP + "_single_cable") - .put(oNs + oP + "_double_cable", nNs + nP + "_double_cable") - .put(oNs + oP + "_quadruple_cable", nNs + nP + "_quadruple_cable") - .put(oNs + oP + "_octal_cable", nNs + nP + "_octal_cable") - .put(oNs + oP + "_hex_cable", nNs + nP + "_hex_cable") + .put(oldName + "_single_wire", newName + "_single_wire") + .put(oldName + "_double_wire", newName + "_double_wire") + .put(oldName + "_quadruple_wire", newName + "_quadruple_wire") + .put(oldName + "_octal_wire", newName + "_octal_wire") + .put(oldName + "_hex_wire", newName + "_hex_wire") + .put(oldName + "_single_cable", newName + "_single_cable") + .put(oldName + "_double_cable", newName + "_double_cable") + .put(oldName + "_quadruple_cable", newName + "_quadruple_cable") + .put(oldName + "_octal_cable", newName + "_octal_cable") + .put(oldName + "_hex_cable", newName + "_hex_cable") .put(oNs + "tiny_" + oP + "_fluid_pipe", nNs + "tiny_" + nP + "_fluid_pipe") .put(oNs + "small_" + oP + "_fluid_pipe", nNs + "small_" + nP + "_fluid_pipe") From 13663af0028599909fa677fadc35d3aec78537c7 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sun, 11 Oct 2026 20:12:38 +0300 Subject: [PATCH 68/83] Remap the removed extruder molds to blanks --- .../common/data/datafixer/GTDataFixers.java | 1 + .../fixes/ExtruderCastingMoldRemapFix.java | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java 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 index 13b0ca93642..635b8f77c79 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -186,6 +186,7 @@ public static void addFixers(DataFixerBuilder builder) { createRenamer("gtceu:steel_brick_casing", "gtceu:bricked_wrought_iron_casing")); builder.addFixer(new ItemStackTurbineRotorFix(v1_5)); + builder.addFixer(new ExtruderCastingMoldRemapFix(v1_5)); } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java new file mode 100644 index 00000000000..85db992d7f4 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java @@ -0,0 +1,28 @@ +package com.gregtechceu.gtceu.common.datafixer.fixes; + +import com.mojang.datafixers.schemas.Schema; +import net.minecraft.util.datafix.fixes.ItemRenameFix; + +import java.util.Set; + +public class ExtruderCastingMoldRemapFix extends ItemRenameFix { + + private static Set REMOVED_MOLDS = Set.of( + "gtceu:rod_extruder_mold", + "gtceu:bolt_extruder_mold", + "gtceu:gear_extruder_mold", + "gtceu:small_gear_extruder_mold", + "gtceu:rotor_extruder_mold"//, + //"gtceu:rotor_casting_mold" TODO uncomment when this is removed + ); + private static final String REPLACEMENT_ITEM = "gtceu:empty_mold"; + + public ExtruderCastingMoldRemapFix(Schema outputSchema) { + super(outputSchema, "Extruder/Casting Mold Remap Fix"); + } + + @Override + protected String fixItem(String item) { + return REMOVED_MOLDS.contains(item) ? REPLACEMENT_ITEM : item; + } +} From 80956ce3da73dc9b09b759947ebb27a36dbc204a Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Mon, 12 Oct 2026 20:35:46 +0300 Subject: [PATCH 69/83] spotless --- .gitignore | 1 + .../api/item/component/IMaterialPartItem.java | 2 +- .../trait/customlogic/ToolDecompLogic.java | 2 ++ .../common/data/datafixer/GTDataFixers.java | 1 + .../fixes/ExtruderCastingMoldRemapFix.java | 7 +++--- .../fixes/ItemStackTurbineRotorFix.java | 9 ++++---- .../datafixer/fixes/MaterialRenameHelper.java | 4 +++- .../fixes/RemoveMoltenFluidsFix.java | 22 ++++++++++++------- .../schemas/AutoGTNamespacedSchema.java | 3 ++- .../gtceu/common/datafixer/schemas/V0.java | 4 ++-- .../gtceu/common/datafixer/schemas/V1_5.java | 11 +++++----- .../gtceu/common/item/TurbineRotorItem.java | 5 ++++- .../trait/customlogic/MaceratorLogic.java | 2 +- .../core/mixins/datafixer/V705Accessor.java | 3 ++- 14 files changed, 46 insertions(+), 30 deletions(-) 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/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java index 3cdf2db04c4..deaeab35c1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java @@ -23,7 +23,7 @@ /** * @deprecated Create separate items for every material instead. If you want custom functionality, check - * {@link com.gregtechceu.gtceu.api.data.tag.TagPrefix#turbineRotor TagPrefix.turbineRotor}. + * {@link com.gregtechceu.gtceu.api.data.tag.TagPrefix#turbineRotor TagPrefix.turbineRotor}. * * @see com.gregtechceu.gtceu.api.data.tag.TagPrefix#turbineRotor TagPrefix.turbineRotor */ diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java index 1fe7d28b34d..e270cd04ab2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java @@ -14,8 +14,10 @@ import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.item.TurbineRotorItem; + import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; + import org.jetbrains.annotations.Nullable; import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; 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 index 635b8f77c79..b1a1d3e4bfd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -204,6 +204,7 @@ private static void createBlockItemFluidRenameFix(DataFixerBuilder builder, Sche /** * create and add all required fixes to rename a material. + * * @param builder the DFU builder instance * @param schema the current version's schema * @param oldName the material's old name INCLUDING the namespace diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java index 85db992d7f4..0b3a163ffb9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ExtruderCastingMoldRemapFix.java @@ -1,8 +1,9 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; -import com.mojang.datafixers.schemas.Schema; import net.minecraft.util.datafix.fixes.ItemRenameFix; +import com.mojang.datafixers.schemas.Schema; + import java.util.Set; public class ExtruderCastingMoldRemapFix extends ItemRenameFix { @@ -12,8 +13,8 @@ public class ExtruderCastingMoldRemapFix extends ItemRenameFix { "gtceu:bolt_extruder_mold", "gtceu:gear_extruder_mold", "gtceu:small_gear_extruder_mold", - "gtceu:rotor_extruder_mold"//, - //"gtceu:rotor_casting_mold" TODO uncomment when this is removed + "gtceu:rotor_extruder_mold" + // "gtceu:rotor_casting_mold" TODO uncomment when this is removed ); private static final String REPLACEMENT_ITEM = "gtceu:empty_mold"; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java index edeecc02083..b00cb6655a4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java @@ -1,10 +1,11 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; +import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + import com.mojang.datafixers.*; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.util.Pair; -import net.minecraft.util.datafix.fixes.References; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Objects; import java.util.Optional; @@ -71,8 +72,6 @@ public TypeRewriteRule makeRule() { ops -> itemName -> itemName.mapSecond(id -> { return Objects.equals(id, OLD_TURBINE_ROTOR_ITEM_ID) ? DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID : id; - }) - ) - ); + }))); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java index 9f596ef60ba..86c1ddbffa6 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/MaterialRenameHelper.java @@ -1,8 +1,9 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; -import com.google.common.collect.ImmutableMap; import net.minecraft.util.datafix.schemas.NamespacedSchema; +import com.google.common.collect.ImmutableMap; + import java.util.Map; import java.util.function.UnaryOperator; @@ -10,6 +11,7 @@ public class MaterialRenameHelper { /** * This class creates a renamer that handles all of a material's (default) forms + * * @param oldName * @param newName * @return diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java index b114fb9f303..60421f6dbe3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/RemoveMoltenFluidsFix.java @@ -3,7 +3,6 @@ import com.google.common.collect.ImmutableMap; import java.util.Map; -import java.util.Set; public class RemoveMoltenFluidsFix { @@ -12,7 +11,8 @@ public class RemoveMoltenFluidsFix { .put("gtceu:molten_black_bronze", "gtceu:black_bronze") .put("gtceu:molten_black_steel", "gtceu:black_steel") .put("gtceu:molten_blue_steel", "gtceu:blue_steel") - .put("gtceu:molten_enriched_naquadah_trinium_europium_duranide", "gtceu:enriched_naquadah_trinium_europium_duranide") + .put("gtceu:molten_enriched_naquadah_trinium_europium_duranide", + "gtceu:enriched_naquadah_trinium_europium_duranide") .put("gtceu:molten_gallium_arsenide", "gtceu:gallium_arsenide") .put("gtceu:molten_hastelloy_c_276", "gtceu:hastelloy_c_276") .put("gtceu:molten_hastelloy_x", "gtceu:hastelloy_x") @@ -64,7 +64,8 @@ public class RemoveMoltenFluidsFix { .put("gtceu:flowing_molten_black_bronze", "gtceu:flowing_black_bronze") .put("gtceu:flowing_molten_black_steel", "gtceu:flowing_black_steel") .put("gtceu:flowing_molten_blue_steel", "gtceu:flowing_blue_steel") - .put("gtceu:flowing_molten_enriched_naquadah_trinium_europium_duranide", "gtceu:flowing_enriched_naquadah_trinium_europium_duranide") + .put("gtceu:flowing_molten_enriched_naquadah_trinium_europium_duranide", + "gtceu:flowing_enriched_naquadah_trinium_europium_duranide") .put("gtceu:flowing_molten_gallium_arsenide", "gtceu:flowing_gallium_arsenide") .put("gtceu:flowing_molten_hastelloy_c_276", "gtceu:flowing_hastelloy_c_276") .put("gtceu:flowing_molten_hastelloy_x", "gtceu:flowing_hastelloy_x") @@ -73,7 +74,8 @@ public class RemoveMoltenFluidsFix { .put("gtceu:flowing_molten_hssg", "gtceu:flowing_hssg") .put("gtceu:flowing_molten_hsss", "gtceu:flowing_hsss") .put("gtceu:flowing_molten_incoloy_ma_956", "gtceu:flowing_incoloy_ma_956") - .put("gtceu:flowing_molten_indium_tin_barium_titanium_cuprate", "gtceu:flowing_indium_tin_barium_titanium_cuprate") + .put("gtceu:flowing_molten_indium_tin_barium_titanium_cuprate", + "gtceu:flowing_indium_tin_barium_titanium_cuprate") .put("gtceu:flowing_molten_kanthal", "gtceu:flowing_kanthal") .put("gtceu:flowing_molten_magnesium_diboride", "gtceu:flowing_magnesium_diboride") .put("gtceu:flowing_molten_manganese_phosphide", "gtceu:flowing_manganese_phosphide") @@ -90,7 +92,8 @@ public class RemoveMoltenFluidsFix { .put("gtceu:flowing_molten_rose_gold", "gtceu:flowing_rose_gold") .put("gtceu:flowing_molten_rtm_alloy", "gtceu:flowing_rtm_alloy") .put("gtceu:flowing_molten_ruridit", "gtceu:flowing_ruridit") - .put("gtceu:flowing_molten_ruthenium_trinium_americium_neutronate", "gtceu:flowing_ruthenium_trinium_americium_neutronate") + .put("gtceu:flowing_molten_ruthenium_trinium_americium_neutronate", + "gtceu:flowing_ruthenium_trinium_americium_neutronate") .put("gtceu:flowing_molten_samarium_iron_arsenic_oxide", "gtceu:flowing_samarium_iron_arsenic_oxide") .put("gtceu:flowing_molten_stainless_steel", "gtceu:flowing_stainless_steel") .put("gtceu:flowing_molten_stellite_100", "gtceu:flowing_stellite_100") @@ -115,7 +118,8 @@ public class RemoveMoltenFluidsFix { .put("gtceu:molten_black_bronze_bucket", "gtceu:black_bronze_bucket") .put("gtceu:molten_black_steel_bucket", "gtceu:black_steel_bucket") .put("gtceu:molten_blue_steel_bucket", "gtceu:blue_steel_bucket") - .put("gtceu:molten_enriched_naquadah_trinium_europium_duranide_bucket", "gtceu:enriched_naquadah_trinium_europium_duranide_bucket") + .put("gtceu:molten_enriched_naquadah_trinium_europium_duranide_bucket", + "gtceu:enriched_naquadah_trinium_europium_duranide_bucket") .put("gtceu:molten_gallium_arsenide_bucket", "gtceu:gallium_arsenide_bucket") .put("gtceu:molten_hastelloy_c_276_bucket", "gtceu:hastelloy_c_276_bucket") .put("gtceu:molten_hastelloy_x_bucket", "gtceu:hastelloy_x_bucket") @@ -124,7 +128,8 @@ public class RemoveMoltenFluidsFix { .put("gtceu:molten_hssg_bucket", "gtceu:hssg_bucket") .put("gtceu:molten_hsss_bucket", "gtceu:hsss_bucket") .put("gtceu:molten_incoloy_ma_956_bucket", "gtceu:incoloy_ma_956_bucket") - .put("gtceu:molten_indium_tin_barium_titanium_cuprate_bucket", "gtceu:indium_tin_barium_titanium_cuprate_bucket") + .put("gtceu:molten_indium_tin_barium_titanium_cuprate_bucket", + "gtceu:indium_tin_barium_titanium_cuprate_bucket") .put("gtceu:molten_kanthal_bucket", "gtceu:kanthal_bucket") .put("gtceu:molten_magnesium_diboride_bucket", "gtceu:magnesium_diboride_bucket") .put("gtceu:molten_manganese_phosphide_bucket", "gtceu:manganese_phosphide_bucket") @@ -141,7 +146,8 @@ public class RemoveMoltenFluidsFix { .put("gtceu:molten_rose_gold_bucket", "gtceu:rose_gold_bucket") .put("gtceu:molten_rtm_alloy_bucket", "gtceu:rtm_alloy_bucket") .put("gtceu:molten_ruridit_bucket", "gtceu:ruridit_bucket") - .put("gtceu:molten_ruthenium_trinium_americium_neutronate_bucket", "gtceu:ruthenium_trinium_americium_neutronate_bucket") + .put("gtceu:molten_ruthenium_trinium_americium_neutronate_bucket", + "gtceu:ruthenium_trinium_americium_neutronate_bucket") .put("gtceu:molten_samarium_iron_arsenic_oxide_bucket", "gtceu:samarium_iron_arsenic_oxide_bucket") .put("gtceu:molten_stainless_steel_bucket", "gtceu:stainless_steel_bucket") .put("gtceu:molten_stellite_100_bucket", "gtceu:stellite_100_bucket") diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java index 508ab1c4283..e693d1aac04 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java @@ -2,9 +2,10 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; + import com.mojang.datafixers.schemas.Schema; -/*package-private*/ class AutoGTNamespacedSchema extends AutomaticNamespacedSchema { +/* package-private */ class AutoGTNamespacedSchema extends AutomaticNamespacedSchema { public AutoGTNamespacedSchema(int versionKey, Schema parent) { super(versionKey, parent); diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 322bd9b206a..3f20db1b0b8 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -3,14 +3,14 @@ import com.gregtechceu.gtceu.api.GTCEuAPI; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; - import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; -import com.mojang.datafixers.types.templates.Hook; + import net.minecraft.util.datafix.fixes.References; import net.minecraftforge.fml.loading.LoadingModList; import com.mojang.datafixers.DSL; import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.Hook; import com.mojang.datafixers.types.templates.TypeTemplate; import java.util.Locale; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java index 2cefa808b06..2f2744f64f2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java @@ -1,10 +1,12 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; + +import net.minecraft.util.datafix.fixes.References; + import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.Hook; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.fixes.References; import java.util.Map; import java.util.function.Supplier; @@ -31,10 +33,7 @@ public void registerTypes(Schema schema, Map> ent "BlockEntityTag", References.BLOCK_ENTITY.in(schema), "CanDestroy", list(References.BLOCK_NAME.in(schema)), "CanPlaceOn", list(References.BLOCK_NAME.in(schema)), - "Items", list(References.ITEM_STACK.in(schema)) - ) - ), - V705Accessor.gtceu$getAddNames(), Hook.HookFunction.IDENTITY - )); + "Items", list(References.ITEM_STACK.in(schema)))), + V705Accessor.gtceu$getAddNames(), Hook.HookFunction.IDENTITY)); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java index f7ae18db7cf..ac08a9882d3 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java @@ -5,10 +5,12 @@ import com.gregtechceu.gtceu.api.data.chemical.material.properties.RotorProperty; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.item.TagPrefixItem; + import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; + import org.jetbrains.annotations.Nullable; import java.util.List; @@ -43,7 +45,8 @@ public static int getMaxRotorDurability(Material material) { public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag isAdvanced) { super.appendHoverText(stack, level, tooltipComponents, isAdvanced); - tooltipComponents.add(Component.translatable("item.gtceu.turbine_rotor.tooltip.efficiency", getRotorEfficiency(stack))); + tooltipComponents.add(Component.translatable("item.gtceu.turbine_rotor.tooltip.efficiency", + getRotorEfficiency(stack))); tooltipComponents.add(Component.translatable("item.gtceu.turbine_rotor.tooltip.power", getRotorPower(stack))); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java index 312f76b82fb..81e27c6b10a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java @@ -5,8 +5,8 @@ import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.machine.trait.customlogic.ToolDecompLogic; import com.gregtechceu.gtceu.api.recipe.GTRecipe; - import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; + import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java index 0c63ccb8725..eb71256ae1e 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/V705Accessor.java @@ -1,7 +1,8 @@ package com.gregtechceu.gtceu.core.mixins.datafixer; -import com.mojang.datafixers.types.templates.Hook; import net.minecraft.util.datafix.schemas.V705; + +import com.mojang.datafixers.types.templates.Hook; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; From de8432d092f02ee2fd4e94e30acd1542718e1fad Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 13 Oct 2026 00:21:46 +0300 Subject: [PATCH 70/83] Patch the modernfix structure cache to include us in the data version check --- .../gtceu/api/datafixer/DataFixHelper.java | 8 ++-- .../gtceu/core/config/GTEarlyConfig.java | 2 + .../CachingStructureManagerMixin.java | 46 +++++++++++++++++++ src/main/resources/gtceu.mixins.json | 1 + 4 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java index d108f326c26..dd60cb641c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/DataFixHelper.java @@ -56,25 +56,25 @@ public static CompoundTag addGTDataVersion(CompoundTag tag) { } @Contract(pure = true) - @Range(from = 0, to = Integer.MAX_VALUE) + @Range(from = -1, to = Integer.MAX_VALUE) public static int getGTDataVersion(Dynamic dynamic) { return getGTDataVersion(dynamic, -1); } @Contract(pure = true) - @Range(from = 0, to = Integer.MAX_VALUE) + @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 = 0, to = Integer.MAX_VALUE) + @Range(from = -1, to = Integer.MAX_VALUE) public static int getGTDataVersion(CompoundTag tag) { return getGTDataVersion(tag, -1); } @Contract(pure = true) - @Range(from = 0, to = Integer.MAX_VALUE) + @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; diff --git a/src/main/java/com/gregtechceu/gtceu/core/config/GTEarlyConfig.java b/src/main/java/com/gregtechceu/gtceu/core/config/GTEarlyConfig.java index 58b15e174f2..7cb00ab03bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/config/GTEarlyConfig.java +++ b/src/main/java/com/gregtechceu/gtceu/core/config/GTEarlyConfig.java @@ -61,6 +61,8 @@ private GTEarlyConfig(File file) { enableIfModPresent("xaerominimap", "xaerominimap"); enableIfModPresent("xaeroworldmap", "xaeroworldmap"); + enableIfModPresent("datafixer.modernfix", "modernfix"); + // bind non-empty parents for (Map.Entry entry : this.options.entrySet()) { if (entry.getValue().getParent() != null) continue; diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java new file mode 100644 index 00000000000..abb07da58d6 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java @@ -0,0 +1,46 @@ +package com.gregtechceu.gtceu.core.mixins.datafixer.modernfix; + +import com.gregtechceu.gtceu.GTCEu; +import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; +import com.llamalad7.mixinextras.expression.Definition; +import com.llamalad7.mixinextras.expression.Expression; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.datafixers.DataFixer; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; +import org.embeddedt.modernfix.structure.CachingStructureManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.io.InputStream; + +@Mixin(value = CachingStructureManager.class, remap = false) +public class CachingStructureManagerMixin { + + @Definition(id = "currentDataVersion", local = @Local(type = int.class, name = "currentDataVersion")) + @Expression("currentDataVersion < ?") + @ModifyExpressionValue(method = "readStructureTag", at = @At("MIXINEXTRAS:EXPRESSION")) + private static boolean gtceu$alsoRequireGTDataVersionToBeUpToDate1(boolean original, + @Local CompoundTag currentTag) { + return original || DataFixHelper.getGTDataVersion(currentTag) < GTCEu.GT_DATA_VERSION; + } + + @Definition(id = "cachedUpgraded", local = @Local(type = CompoundTag.class, name = "cachedUpgraded")) + @Definition(id = "getInt", method = "Lnet/minecraft/nbt/CompoundTag;getInt(Ljava/lang/String;)I", remap = true) + @Expression("cachedUpgraded.getInt('DataVersion') == ?") + @ModifyExpressionValue(method = "readStructureTag", at = @At("MIXINEXTRAS:EXPRESSION")) + private static boolean gtceu$alsoRequireGTDataVersionToBeUpToDate2(boolean original, + @Local(name = "cachedUpgraded") CompoundTag cachedUpgraded) { + return original && cachedUpgraded.getInt(DataFixHelper.GT_DATA_VERSION_TAG) == GTCEu.GT_DATA_VERSION; + } + + @Inject(method = "readStructureTag", at = @At(value = "INVOKE", target = "Lnet/minecraft/nbt/CompoundTag;putInt(Ljava/lang/String;I)V", remap = true, ordinal = 1)) + private static void gtceu$addGTDataVersion(ResourceLocation location, DataFixer datafixer, InputStream stream, + CallbackInfoReturnable cir, + @Local(name = "currentTag") CompoundTag currentTag) { + DataFixHelper.addGTDataVersion(currentTag); + } +} diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index 31014ff0ff3..6e47f06f259 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -98,6 +98,7 @@ "datafixer.ForgeHooksMixin", "datafixer.NbtUtilsMixin", "datafixer.V705Accessor", + "datafixer.modernfix.CachingStructureManagerMixin", "dev.datagen.FixParallelKeyMappingRegistrationMixin", "dev.test.GameTestRegistryMixin", "emi.EmiApiAccessor", From c26555943453300b8e925ac4fc139167c0379f96 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 13 Oct 2026 00:23:14 +0300 Subject: [PATCH 71/83] oops! --- .../gtceu/common/datafixer/fixes/AutoOutputTraitFix.java | 3 +-- .../common/machine/multiblock/part/RotorHolderPartMachine.java | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java index d4089bca9cb..a0fa36e8239 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/AutoOutputTraitFix.java @@ -39,8 +39,7 @@ protected TypeRewriteRule makeRule() { dynamic = dynamic.remove(oldName); } } - dynamic.set("autoOutput", traitValue); - return dynamic; + return dynamic.set("autoOutput", traitValue); })); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 9c3517d5ab9..7753becc910 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -324,6 +324,8 @@ public int getRotorPower() { */ public int getRotorDurabilityPercent() { ItemStack stack = getRotorStack(); + if (stack.getMaxDamage() == 0) return -1; + return 100 - 100 * stack.getDamageValue() / stack.getMaxDamage(); } From 9cf1ed17c7fbe63dc2a2542c4025dc531d6ed816 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 13 Oct 2026 01:16:28 +0300 Subject: [PATCH 72/83] Automatic namespace addition is a bust, removing --- .../schemas/AutomaticNamespacedSchema.java | 105 ---- .../schemas/AutoGTNamespacedSchema.java | 18 - .../gtceu/common/datafixer/schemas/V0.java | 481 +++++++++--------- .../gtceu/common/datafixer/schemas/V1.java | 7 +- .../gtceu/common/datafixer/schemas/V1_3.java | 467 ++++++++--------- .../gtceu/common/datafixer/schemas/V1_4.java | 7 +- .../gtceu/common/datafixer/schemas/V1_5.java | 3 +- 7 files changed, 487 insertions(+), 601 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java deleted file mode 100644 index bcd0b595e3f..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/schemas/AutomaticNamespacedSchema.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.gregtechceu.gtceu.api.datafixer.schemas; - -import com.gregtechceu.gtceu.common.datafixer.schemas.V0; - -import net.minecraft.util.datafix.schemas.NamespacedSchema; - -import com.mojang.datafixers.schemas.Schema; -import com.mojang.datafixers.types.templates.TypeTemplate; - -import java.util.Map; -import java.util.function.Supplier; - -public abstract class AutomaticNamespacedSchema extends NamespacedSchema { - - private String currentAutomaticNamespace; - - public AutomaticNamespacedSchema(int versionKey, Schema parent) { - super(versionKey, parent); - } - - protected abstract String getAutomaticNamespace(); - - private String getCurrentAutomaticNamespace() { - if (this.currentAutomaticNamespace == null) { - this.currentAutomaticNamespace = getAutomaticNamespace(); - } - return this.currentAutomaticNamespace; - } - - @Override - public void register(final Map> map, String name, - final Supplier template) { - if (name.indexOf(':') == -1) { - name = getCurrentAutomaticNamespace() + ":" + name; - } else if (name.indexOf(':') == 0) { - // protect against typos/copy-paste errors - name = getCurrentAutomaticNamespace() + name; - } - super.register(map, name, template); - } - - /** - * Register block entity types to the schema by overriding this and calling {@link #register} (and {@link #remove}). - * There are also a variety of utility functions in {@linkplain Schema vanilla's} and {@linkplain V0 GT's} schemas - * you may use. - * - *

    - * Warning: Do not modify the returned map directly. If you do, the values you put in it will default to the - * {@code minecraft} namespace, which is most likely not what you want. Use the aforementioned utility functions - * instead. - */ - @Override - public Map> registerBlockEntities(Schema schema) { - String originalNamespace = this.getAutomaticNamespace(); - try { - // switch the namespace to the parent's one automatically - if (parent instanceof AutomaticNamespacedSchema autoNamespace) { - this.currentAutomaticNamespace = autoNamespace.getCurrentAutomaticNamespace(); - } else { - this.currentAutomaticNamespace = "minecraft"; - } - return super.registerBlockEntities(schema); - } finally { - // after processing vanilla things, go back to the assigned namespace - this.currentAutomaticNamespace = originalNamespace; - } - } - - /** - * Register block entity types to the schema by overriding this and calling {@link #register} (and {@link #remove}). - * There are also a variety of utility functions in {@linkplain Schema vanilla's} and {@linkplain V0 GT's} schemas - * you may use. - * - *

    - * Warning: Do not modify the returned map directly. If you do, the values you put in it will default to the - * {@code minecraft} namespace, which is most likely not what you want. Use the aforementioned utility functions - * instead. - */ - @Override - public Map> registerEntities(Schema schema) { - String originalNamespace = this.getAutomaticNamespace(); - try { - // switch the namespace to the parent's one automatically - if (parent instanceof AutomaticNamespacedSchema autoNamespace) { - this.currentAutomaticNamespace = autoNamespace.getCurrentAutomaticNamespace(); - } else { - this.currentAutomaticNamespace = "minecraft"; - } - return super.registerEntities(schema); - } finally { - // after processing vanilla things, go back to the assigned namespace - this.currentAutomaticNamespace = originalNamespace; - } - } - - public void remove(final Map> map, String name) { - if (name.indexOf(':') == -1) { - name = getCurrentAutomaticNamespace() + ":" + name; - } else if (name.indexOf(':') == 0) { - // protect against typos/copy-paste errors - name = getCurrentAutomaticNamespace() + name; - } - map.remove(name); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java deleted file mode 100644 index e693d1aac04..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/AutoGTNamespacedSchema.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.gregtechceu.gtceu.common.datafixer.schemas; - -import com.gregtechceu.gtceu.GTCEu; -import com.gregtechceu.gtceu.api.datafixer.schemas.AutomaticNamespacedSchema; - -import com.mojang.datafixers.schemas.Schema; - -/* package-private */ class AutoGTNamespacedSchema extends AutomaticNamespacedSchema { - - public AutoGTNamespacedSchema(int versionKey, Schema parent) { - super(versionKey, parent); - } - - @Override - protected final String getAutomaticNamespace() { - return GTCEu.MOD_ID; - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 3f20db1b0b8..5eee899a0e4 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -6,6 +6,7 @@ import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.schemas.NamespacedSchema; import net.minecraftforge.fml.loading.LoadingModList; import com.mojang.datafixers.DSL; @@ -23,7 +24,7 @@ import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ALL_TIERS; import static com.mojang.datafixers.DSL.*; -public class V0 extends AutoGTNamespacedSchema { +public class V0 extends NamespacedSchema { public V0(int versionKey, Schema parent) { super(versionKey, parent); @@ -104,24 +105,24 @@ public Map> registerBlockEntities(Schema schema) "waterTank", notifiableFluidTank(schema), steamMachine.get() ); - registerSteamMachine(schema, map, "steam_solid_boiler", () -> optionalFields( + registerSteamMachine(schema, map, "gtceu:steam_solid_boiler", () -> optionalFields( "fuelHandler", notifiableItemHandler(schema), "ashHandler", notifiableItemHandler(schema), steamBoiler.get() )); - registerSteamMachine(schema, map, "steam_liquid_boiler", () -> optionalFields( + registerSteamMachine(schema, map, "gtceu:steam_liquid_boiler", () -> optionalFields( "fuelTank", notifiableFluidTank(schema), steamBoiler.get() )); - registerSteamMachine(schema, map, "steam_solar_boiler", steamBoiler); - registerSimpleSteamMachine(schema, map, "extractor"); - registerSimpleSteamMachine(schema, map, "steam_macerator"); - registerSimpleSteamMachine(schema, map, "compressor"); - registerSimpleSteamMachine(schema, map, "forge_hammer"); - registerSimpleSteamMachine(schema, map, "furnace"); - registerSimpleSteamMachine(schema, map, "alloy_smelter"); - registerSimpleSteamMachine(schema, map, "rock_crusher"); - schema.register(map, "steam_miner", () -> optionalFields( + registerSteamMachine(schema, map, "gtceu:steam_solar_boiler", steamBoiler); + registerSimpleSteamMachine(schema, map, "gtceu:extractor"); + registerSimpleSteamMachine(schema, map, "gtceu:steam_macerator"); + registerSimpleSteamMachine(schema, map, "gtceu:compressor"); + registerSimpleSteamMachine(schema, map, "gtceu:forge_hammer"); + registerSimpleSteamMachine(schema, map, "gtceu:furnace"); + registerSimpleSteamMachine(schema, map, "gtceu:alloy_smelter"); + registerSimpleSteamMachine(schema, map, "gtceu:rock_crusher"); + schema.register(map, "gtceu:steam_miner", () -> optionalFields( "importItems", notifiableItemHandler(schema), "exportItems", notifiableItemHandler(schema), "steamTank", notifiableFluidTank(schema) @@ -129,89 +130,89 @@ public Map> registerBlockEntities(Schema schema) // endregion // region simple - registerForTiers(schema, map, "machine_hull", DSL::remainder, ALL_TIERS); - registerSimpleMachine(schema, map, "electric_furnace", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "alloy_smelter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "arc_furnace", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "assembler", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "autoclave", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "bender", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "brewery", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "canner", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "centrifuge", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "chemical_bath", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "chemical_reactor", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "compressor", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "cutter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "distillery", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "electrolyzer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "electromagnetic_separator", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "extractor", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "extruder", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "fermenter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "fluid_heater", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "fluid_solidifier", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "forge_hammer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "forming_press", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "lathe", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "scanner", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "mixer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "ore_washer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "packer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "polarizer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "laser_engraver", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "sifter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "thermal_centrifuge", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "wiremill", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "circuit_assembler", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "macerator", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "gas_collector", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "rock_crusher", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "air_scrubber", LOW_TIERS); - registerSimpleMachine(schema, map, "combustion", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "steam_turbine", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "gas_turbine", ELECTRIC_TIERS); + registerForTiers(schema, map, "gtceu:machine_hull", DSL::remainder, ALL_TIERS); + registerSimpleMachine(schema, map, "gtceu:electric_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:alloy_smelter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:arc_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:autoclave", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:bender", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:brewery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:canner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:chemical_bath", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:chemical_reactor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:compressor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:cutter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:distillery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:electrolyzer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:electromagnetic_separator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:extractor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:extruder", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:fermenter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:fluid_heater", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:fluid_solidifier", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:forge_hammer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:forming_press", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:lathe", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:scanner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:mixer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:ore_washer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:packer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:polarizer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:laser_engraver", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:sifter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:thermal_centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:wiremill", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:circuit_assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:macerator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:gas_collector", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:rock_crusher", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:air_scrubber", LOW_TIERS); + registerSimpleMachine(schema, map, "gtceu:combustion", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:steam_turbine", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:gas_turbine", ELECTRIC_TIERS); // endregion // region electric final int[] transformerTiers = GTValues.tiersBetween(ULV, GTCEuAPI.isHighTier() ? OpV : UV); - registerForTiers(schema, map, "transformer_1a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "transformer_2a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "transformer_4a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "transformer_16a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_1a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_2a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_4a", DSL::remainder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_16a", DSL::remainder, transformerTiers); - registerForTiers(schema, map, "1a_energy_converter", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "4a_energy_converter", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "8a_energy_converter", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "16a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:1a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:4a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:8a_energy_converter", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:16a_energy_converter", DSL::remainder, ALL_TIERS); - schema.registerSimple(map, "long_distance_item_pipeline_endpoint"); - schema.registerSimple(map, "long_distance_fluid_pipeline_endpoint"); - schema.registerSimple(map, "long_distance_fluid_pipeline_endpoint"); + schema.registerSimple(map, "gtceu:long_distance_item_pipeline_endpoint"); + schema.registerSimple(map, "gtceu:long_distance_fluid_pipeline_endpoint"); + schema.registerSimple(map, "gtceu:long_distance_fluid_pipeline_endpoint"); final Supplier batteryBuffer = () -> optionalFields( "batteryInventory", itemHandler(schema) ); - registerForTiers(schema, map, "battery_buffer_4x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "battery_buffer_8x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "battery_buffer_16x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "charger_4x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:battery_buffer_4x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:battery_buffer_8x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:battery_buffer_16x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:charger_4x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "pump", () -> optionalFields( + registerForTiers(schema, map, "gtceu:pump", () -> optionalFields( "cache", notifiableFluidTank(schema) ), LV, MV, HV, EV); - registerForTiers(schema, map, "fisher", () -> optionalFields( + registerForTiers(schema, map, "gtceu:fisher", () -> optionalFields( "cache", notifiableItemHandler(schema), "baitHandler", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema) ), LV, MV, HV, EV, IV, LuV); - registerForTiers(schema, map, "block_breaker", () -> optionalFields( + registerForTiers(schema, map, "gtceu:block_breaker", () -> optionalFields( "cache", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema) ), LV, MV, HV, EV); - registerSimpleMachine(schema, map, "miner", LV, MV, HV); - registerForTiers(schema, map, "world_accelerator", DSL::remainder, LV, MV, HV, EV, IV, LuV, ZPM, UV); - registerForTiers(schema, map, "item_collector", () -> optionalFields( + registerSimpleMachine(schema, map, "gtceu:miner", LV, MV, HV); + registerForTiers(schema, map, "gtceu:world_accelerator", DSL::remainder, LV, MV, HV, EV, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "gtceu:item_collector", () -> optionalFields( "output", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema), "filterInventory", itemHandler(schema) @@ -222,12 +223,12 @@ public Map> registerBlockEntities(Schema schema) final Supplier itemStorage = () -> optionalFields( "inventory", notifiableItemHandler(schema) ); - registerForTiers(schema, map, "buffer", () -> optionalFields( + registerForTiers(schema, map, "gtceu:buffer", () -> optionalFields( "tank", notifiableFluidTank(schema), itemStorage.get() ), LV, MV, HV); - schema.registerSimple(map, "creative_energy"); - schema.registerSimple(map, "creative_computation_provider"); + schema.registerSimple(map, "gtceu:creative_energy"); + schema.registerSimple(map, "gtceu:creative_computation_provider"); final Supplier quantumChest = () -> optionalFields( "lockedFluid", GTReferences.FLUID_STACK.in(schema), @@ -237,32 +238,32 @@ public Map> registerBlockEntities(Schema schema) "lockedItem", itemHandler(schema), "stored", References.ITEM_STACK.in(schema) ); - schema.register(map, "creative_chest", quantumChest); - schema.register(map, "creative_tank", quantumTank); - registerForTiers(schema, map, "super_chest", quantumChest, LOW_TIERS); - registerForTiers(schema, map, "quantum_chest", quantumChest, HIGH_TIERS); - registerForTiers(schema, map, "super_tank", quantumTank, LOW_TIERS); - registerForTiers(schema, map, "quantum_tank", quantumTank, HIGH_TIERS); - - schema.register(map, "wood_crate", itemStorage); - schema.register(map, "bronze_crate", itemStorage); - schema.register(map, "steel_crate", itemStorage); - schema.register(map, "aluminium_crate", itemStorage); - schema.register(map, "stainless_steel_crate", itemStorage); - schema.register(map, "titanium_crate", itemStorage); - schema.register(map, "tungsten_steel_crate", itemStorage); + schema.register(map, "gtceu:creative_chest", quantumChest); + schema.register(map, "gtceu:creative_tank", quantumTank); + registerForTiers(schema, map, "gtceu:super_chest", quantumChest, LOW_TIERS); + registerForTiers(schema, map, "gtceu:quantum_chest", quantumChest, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:super_tank", quantumTank, LOW_TIERS); + registerForTiers(schema, map, "gtceu:quantum_tank", quantumTank, HIGH_TIERS); + + schema.register(map, "gtceu:wood_crate", itemStorage); + schema.register(map, "gtceu:bronze_crate", itemStorage); + schema.register(map, "gtceu:steel_crate", itemStorage); + schema.register(map, "gtceu:aluminium_crate", itemStorage); + schema.register(map, "gtceu:stainless_steel_crate", itemStorage); + schema.register(map, "gtceu:titanium_crate", itemStorage); + schema.register(map, "gtceu:tungsten_steel_crate", itemStorage); final Supplier drum = () -> optionalFields( "stored", GTReferences.FLUID_STACK.in(schema) ); - schema.register(map, "wood_drum", drum); - schema.register(map, "bronze_drum", drum); - schema.register(map, "steel_drum", drum); - schema.register(map, "aluminium_drum", drum); - schema.register(map, "stainless_steel_drum", drum); - schema.register(map, "gold_drum", drum); - schema.register(map, "titanium_drum", drum); - schema.register(map, "tungsten_steel_drum", drum); + schema.register(map, "gtceu:wood_drum", drum); + schema.register(map, "gtceu:bronze_drum", drum); + schema.register(map, "gtceu:steel_drum", drum); + schema.register(map, "gtceu:aluminium_drum", drum); + schema.register(map, "gtceu:stainless_steel_drum", drum); + schema.register(map, "gtceu:gold_drum", drum); + schema.register(map, "gtceu:titanium_drum", drum); + schema.register(map, "gtceu:tungsten_steel_drum", drum); // endregion // region part @@ -270,75 +271,75 @@ public Map> registerBlockEntities(Schema schema) "circuitInventory", notifiableItemHandler(schema), itemStorage.get() ); - registerForTiers(schema, map, "input_bus", itemBus, ALL_TIERS); - registerForTiers(schema, map, "output_bus", itemBus, ALL_TIERS); + registerForTiers(schema, map, "gtceu:input_bus", itemBus, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_bus", itemBus, ALL_TIERS); final Supplier fluidHatch = () -> optionalFields( "tank", notifiableFluidTank(schema), "circuitInventory", notifiableItemHandler(schema) ); - registerForTiers(schema, map, "input_hatch", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "input_hatch_4x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "input_hatch_9x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "output_hatch", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "output_hatch_4x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "output_hatch_9x", fluidHatch, ALL_TIERS); - - registerForTiers(schema, map, "energy_input_hatch", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_4a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_4a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_16a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_16a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "substation_input_hatch_64a", DSL::remainder, ALL_TIERS); - registerForTiers(schema, map, "substation_output_hatch_64a", DSL::remainder, ALL_TIERS); - - registerForTiers(schema, map, "muffler_hatch", itemStorage, ELECTRIC_TIERS); - - schema.register(map, "steam_input_bus", itemBus); - schema.register(map, "steam_output_bus", itemBus); - schema.register(map, "steam_input_hatch", fluidHatch); - schema.registerSimple(map, "coke_oven_hatch"); - schema.register(map, "pump_hatch", fluidHatch); + registerForTiers(schema, map, "gtceu:input_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:input_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:input_hatch_9x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_hatch_9x", fluidHatch, ALL_TIERS); + + registerForTiers(schema, map, "gtceu:energy_input_hatch", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_output_hatch", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_input_hatch_4a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_output_hatch_4a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_input_hatch_16a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_output_hatch_16a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:substation_input_hatch_64a", DSL::remainder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:substation_output_hatch_64a", DSL::remainder, ALL_TIERS); + + registerForTiers(schema, map, "gtceu:muffler_hatch", itemStorage, ELECTRIC_TIERS); + + schema.register(map, "gtceu:steam_input_bus", itemBus); + schema.register(map, "gtceu:steam_output_bus", itemBus); + schema.register(map, "gtceu:steam_input_hatch", fluidHatch); + schema.registerSimple(map, "gtceu:coke_oven_hatch"); + schema.register(map, "gtceu:pump_hatch", fluidHatch); final Supplier maintenanceHatch = () -> optionalFields( "itemStackHandler", notifiableItemHandler(schema) ); - schema.register(map, "maintenance_hatch", maintenanceHatch); - schema.register(map, "configurable_maintenance_hatch", maintenanceHatch); - schema.register(map, "cleaning_maintenance_hatch", maintenanceHatch); - schema.register(map, "auto_maintenance_hatch", maintenanceHatch); - - registerForTiers(schema, map, "item_passthrough_hatch", itemBus, ELECTRIC_TIERS); - registerForTiers(schema, map, "fluid_passthrough_hatch", fluidHatch, ELECTRIC_TIERS); - schema.register(map, "reservoir_hatch", fluidHatch); + schema.register(map, "gtceu:maintenance_hatch", maintenanceHatch); + schema.register(map, "gtceu:configurable_maintenance_hatch", maintenanceHatch); + schema.register(map, "gtceu:cleaning_maintenance_hatch", maintenanceHatch); + schema.register(map, "gtceu:auto_maintenance_hatch", maintenanceHatch); + + registerForTiers(schema, map, "gtceu:item_passthrough_hatch", itemBus, ELECTRIC_TIERS); + registerForTiers(schema, map, "gtceu:fluid_passthrough_hatch", fluidHatch, ELECTRIC_TIERS); + schema.register(map, "gtceu:reservoir_hatch", fluidHatch); final Supplier dualHatch = () -> optionalFields( "tank", notifiableFluidTank(schema), itemBus.get() ); - registerForTiers(schema, map, "dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); - registerForTiers(schema, map, "dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); + registerForTiers(schema, map, "gtceu:dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); + registerForTiers(schema, map, "gtceu:dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); - registerForTiers(schema, map, "diode", DSL::remainder, ELECTRIC_TIERS); - registerForTiers(schema, map, "rotor_holder", () -> optionalFields( + registerForTiers(schema, map, "gtceu:diode", DSL::remainder, ELECTRIC_TIERS); + registerForTiers(schema, map, "gtceu:rotor_holder", () -> optionalFields( "rotorMaterial", GTReferences.MATERIAL_NAME.in(schema), itemStorage.get() ), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); - registerForTiers(schema, map, "256a_laser_target_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "256a_laser_source_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_target_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_source_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_target_hatch", DSL::remainder, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:256a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:256a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:1024a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:1024a_laser_source_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:4096a_laser_target_hatch", DSL::remainder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:4096a_laser_source_hatch", DSL::remainder, HIGH_TIERS); - schema.registerSimple(map, "monitor"); - schema.registerSimple(map, "advanced_monitor"); + schema.registerSimple(map, "gtceu:monitor"); + schema.registerSimple(map, "gtceu:advanced_monitor"); // endregion // region multiblock - schema.registerSimple(map, "bronze_large_boiler"); - schema.registerSimple(map, "steel_large_boiler"); - schema.registerSimple(map, "titanium_large_boiler"); - schema.registerSimple(map, "tungstensteel_large_boiler"); + schema.registerSimple(map, "gtceu:bronze_large_boiler"); + schema.registerSimple(map, "gtceu:steel_large_boiler"); + schema.registerSimple(map, "gtceu:titanium_large_boiler"); + schema.registerSimple(map, "gtceu:tungstensteel_large_boiler"); final Supplier primitiveMachine = () -> optionalFields( "importItems", notifiableItemHandler(schema), @@ -346,106 +347,106 @@ public Map> registerBlockEntities(Schema schema) "importFluids", notifiableFluidTank(schema), "exportFluids", notifiableFluidTank(schema) ); - schema.register(map, "coke_oven", primitiveMachine); - schema.register(map, "primitive_blast_furnace", primitiveMachine); - - schema.registerSimple(map, "electric_blast_furnace"); - schema.registerSimple(map, "large_chemical_reactor"); - schema.registerSimple(map, "implosion_compressor"); - schema.registerSimple(map, "pyrolyse_oven"); - schema.registerSimple(map, "multi_smelter"); - schema.registerSimple(map, "cracker"); - schema.registerSimple(map, "distillation_tower"); - schema.registerSimple(map, "vacuum_freezer"); - schema.registerSimple(map, "assembly_line"); - schema.registerSimple(map, "primitive_pump"); - schema.registerSimple(map, "steam_grinder"); - schema.registerSimple(map, "steam_oven"); - registerForTiers(schema, map, "fusion_reactor", DSL::remainder, LuV, ZPM, UV); - registerForTiers(schema, map, "fluid_drilling_rig", DSL::remainder, MV, HV, EV); - registerForTiers(schema, map, "large_miner", DSL::remainder, EV, IV, LuV); - schema.registerSimple(map, "cleanroom"); - schema.registerSimple(map, "large_combustion_engine"); - schema.registerSimple(map, "extreme_combustion_engine"); - schema.registerSimple(map, "steam_large_turbine"); - schema.registerSimple(map, "gas_large_turbine"); - schema.registerSimple(map, "plasma_large_turbine"); - schema.registerSimple(map, "active_transformer"); - schema.registerSimple(map, "power_substation"); - registerForTiers(schema, map, "bedrock_ore_miner", DSL::remainder, MV, HV, EV); - schema.registerSimple(map, "wooden_tank_valve"); - schema.registerSimple(map, "wooden_multiblock_tank"); - schema.registerSimple(map, "bronze_tank_valve"); - schema.registerSimple(map, "bronze_multiblock_tank"); - schema.registerSimple(map, "steel_tank_valve"); - schema.registerSimple(map, "steel_multiblock_tank"); - - schema.registerSimple(map, "central_monitor"); + schema.register(map, "gtceu:coke_oven", primitiveMachine); + schema.register(map, "gtceu:primitive_blast_furnace", primitiveMachine); + + schema.registerSimple(map, "gtceu:electric_blast_furnace"); + schema.registerSimple(map, "gtceu:large_chemical_reactor"); + schema.registerSimple(map, "gtceu:implosion_compressor"); + schema.registerSimple(map, "gtceu:pyrolyse_oven"); + schema.registerSimple(map, "gtceu:multi_smelter"); + schema.registerSimple(map, "gtceu:cracker"); + schema.registerSimple(map, "gtceu:distillation_tower"); + schema.registerSimple(map, "gtceu:vacuum_freezer"); + schema.registerSimple(map, "gtceu:assembly_line"); + schema.registerSimple(map, "gtceu:primitive_pump"); + schema.registerSimple(map, "gtceu:steam_grinder"); + schema.registerSimple(map, "gtceu:steam_oven"); + registerForTiers(schema, map, "gtceu:fusion_reactor", DSL::remainder, LuV, ZPM, UV); + registerForTiers(schema, map, "gtceu:fluid_drilling_rig", DSL::remainder, MV, HV, EV); + registerForTiers(schema, map, "gtceu:large_miner", DSL::remainder, EV, IV, LuV); + schema.registerSimple(map, "gtceu:cleanroom"); + schema.registerSimple(map, "gtceu:large_combustion_engine"); + schema.registerSimple(map, "gtceu:extreme_combustion_engine"); + schema.registerSimple(map, "gtceu:steam_large_turbine"); + schema.registerSimple(map, "gtceu:gas_large_turbine"); + schema.registerSimple(map, "gtceu:plasma_large_turbine"); + schema.registerSimple(map, "gtceu:active_transformer"); + schema.registerSimple(map, "gtceu:power_substation"); + registerForTiers(schema, map, "gtceu:bedrock_ore_miner", DSL::remainder, MV, HV, EV); + schema.registerSimple(map, "gtceu:wooden_tank_valve"); + schema.registerSimple(map, "gtceu:wooden_multiblock_tank"); + schema.registerSimple(map, "gtceu:bronze_tank_valve"); + schema.registerSimple(map, "gtceu:bronze_multiblock_tank"); + schema.registerSimple(map, "gtceu:steel_tank_valve"); + schema.registerSimple(map, "gtceu:steel_multiblock_tank"); + + schema.registerSimple(map, "gtceu:central_monitor"); // region GCYM - registerForTiers(schema, map, "parallel_hatch", DSL::remainder, IV, LuV, ZPM, UV); - schema.registerSimple(map, "large_maceration_tower"); - schema.registerSimple(map, "large_chemical_bath"); - schema.registerSimple(map, "large_centrifuge"); - schema.registerSimple(map, "large_mixer"); - schema.registerSimple(map, "large_electrolyzer"); - schema.registerSimple(map, "large_electromagnet"); - schema.registerSimple(map, "large_packer"); - schema.registerSimple(map, "large_assembler"); - schema.registerSimple(map, "large_circuit_assembler"); - schema.registerSimple(map, "large_arc_smelter"); - schema.registerSimple(map, "large_engraving_laser"); - schema.registerSimple(map, "large_sifting_funnel"); - schema.registerSimple(map, "alloy_blast_smelter"); - schema.registerSimple(map, "large_autoclave"); - schema.registerSimple(map, "large_material_press"); - schema.registerSimple(map, "large_brewer"); - schema.registerSimple(map, "large_cutter"); - schema.registerSimple(map, "large_extractor"); - schema.registerSimple(map, "large_extruder"); - schema.registerSimple(map, "large_solidifier"); - schema.registerSimple(map, "large_wiremill"); - schema.registerSimple(map, "mega_blast_furnace"); // TODO add fixer to rename to "rotary_hearth_furnace" - schema.registerSimple(map, "mega_vacuum_freezer"); // TODO add fixer to rename to "bulk_blast_chiller" + registerForTiers(schema, map, "gtceu:parallel_hatch", DSL::remainder, IV, LuV, ZPM, UV); + schema.registerSimple(map, "gtceu:large_maceration_tower"); + schema.registerSimple(map, "gtceu:large_chemical_bath"); + schema.registerSimple(map, "gtceu:large_centrifuge"); + schema.registerSimple(map, "gtceu:large_mixer"); + schema.registerSimple(map, "gtceu:large_electrolyzer"); + schema.registerSimple(map, "gtceu:large_electromagnet"); + schema.registerSimple(map, "gtceu:large_packer"); + schema.registerSimple(map, "gtceu:large_assembler"); + schema.registerSimple(map, "gtceu:large_circuit_assembler"); + schema.registerSimple(map, "gtceu:large_arc_smelter"); + schema.registerSimple(map, "gtceu:large_engraving_laser"); + schema.registerSimple(map, "gtceu:large_sifting_funnel"); + schema.registerSimple(map, "gtceu:alloy_blast_smelter"); + schema.registerSimple(map, "gtceu:large_autoclave"); + schema.registerSimple(map, "gtceu:large_material_press"); + schema.registerSimple(map, "gtceu:large_brewer"); + schema.registerSimple(map, "gtceu:large_cutter"); + schema.registerSimple(map, "gtceu:large_extractor"); + schema.registerSimple(map, "gtceu:large_extruder"); + schema.registerSimple(map, "gtceu:large_solidifier"); + schema.registerSimple(map, "gtceu:large_wiremill"); + schema.registerSimple(map, "gtceu:mega_blast_furnace"); // TODO add fixer to rename to "rotary_hearth_furnace" + schema.registerSimple(map, "gtceu:mega_vacuum_freezer"); // TODO add fixer to rename to "bulk_blast_chiller" // endregion // endregion // region research - schema.registerSimple(map, "research_station"); - schema.register(map, "object_holder", () -> optionalFields( + schema.registerSimple(map, "gtceu:research_station"); + schema.register(map, "gtceu:object_holder", () -> optionalFields( "heldItems", notifiableItemHandler(schema) )); - schema.registerSimple(map, "data_bank"); - schema.registerSimple(map, "network_switch"); - schema.registerSimple(map, "high_performance_computation_array"); - schema.registerSimple(map, "computation_transmitter_hatch"); - schema.registerSimple(map, "computation_receiver_hatch"); - schema.registerSimple(map, "data_transmitter_hatch"); - schema.registerSimple(map, "data_receiver_hatch"); + schema.registerSimple(map, "gtceu:data_bank"); + schema.registerSimple(map, "gtceu:network_switch"); + schema.registerSimple(map, "gtceu:high_performance_computation_array"); + schema.registerSimple(map, "gtceu:computation_transmitter_hatch"); + schema.registerSimple(map, "gtceu:computation_receiver_hatch"); + schema.registerSimple(map, "gtceu:data_transmitter_hatch"); + schema.registerSimple(map, "gtceu:data_receiver_hatch"); final Supplier dataAccessHatch = () -> optionalFields( "importItems", notifiableItemHandler(schema) ); - schema.register(map, "basic_data_access_hatch", dataAccessHatch); - schema.register(map, "data_access_hatch", dataAccessHatch); - schema.register(map, "advanced_data_access_hatch", dataAccessHatch); - schema.register(map, "creative_data_access_hatch", dataAccessHatch); - schema.registerSimple(map, "hpca_empty_component"); - schema.registerSimple(map, "hpca_computation_component"); - schema.registerSimple(map, "hpca_advanced_computation_component"); - schema.registerSimple(map, "hpca_heat_sink_component"); - schema.registerSimple(map, "hpca_active_cooler_component"); - schema.registerSimple(map, "hpca_bridge_component"); + schema.register(map, "gtceu:basic_data_access_hatch", dataAccessHatch); + schema.register(map, "gtceu:data_access_hatch", dataAccessHatch); + schema.register(map, "gtceu:advanced_data_access_hatch", dataAccessHatch); + schema.register(map, "gtceu:creative_data_access_hatch", dataAccessHatch); + schema.registerSimple(map, "gtceu:hpca_empty_component"); + schema.registerSimple(map, "gtceu:hpca_computation_component"); + schema.registerSimple(map, "gtceu:hpca_advanced_computation_component"); + schema.registerSimple(map, "gtceu:hpca_heat_sink_component"); + schema.registerSimple(map, "gtceu:hpca_active_cooler_component"); + schema.registerSimple(map, "gtceu:hpca_bridge_component"); // endregion // region AE2 compat if (LoadingModList.get().getModFileById(MODID_APPENG) != null) { // only add these if AE2 is loaded - schema.register(map, "me_input_bus", itemBus); - schema.register(map, "me_stocking_input_bus", itemBus); - schema.register(map, "me_output_bus", itemBus); - schema.register(map, "me_input_hatch", fluidHatch); - schema.register(map, "me_stocking_input_hatch", fluidHatch); - schema.register(map, "me_output_hatch", fluidHatch); - schema.register(map, "me_pattern_buffer", () -> optionalFields( + schema.register(map, "gtceu:me_input_bus", itemBus); + schema.register(map, "gtceu:me_stocking_input_bus", itemBus); + schema.register(map, "gtceu:me_output_bus", itemBus); + schema.register(map, "gtceu:me_input_hatch", fluidHatch); + schema.register(map, "gtceu:me_stocking_input_hatch", fluidHatch); + schema.register(map, "gtceu:me_output_hatch", fluidHatch); + schema.register(map, "gtceu:me_pattern_buffer", () -> optionalFields( "patternInventory", itemHandler(schema), "shareInventory", notifiableItemHandler(schema), "shareTank", notifiableFluidTank(schema), @@ -457,7 +458,7 @@ public Map> registerBlockEntities(Schema schema) ), itemBus.get() )); - schema.registerSimple(map, "me_pattern_buffer_proxy"); + schema.registerSimple(map, "gtceu:me_pattern_buffer_proxy"); } // endregion @@ -477,15 +478,19 @@ private static void registerSimpleMachine(Schema schema, Map> map, String name, Supplier template, int... tiers) { + String namespace = name.substring(0, name.indexOf(':') + 1); + String path = name.substring(name.indexOf(':') + 1); for (int tier : tiers) { - schema.register(map, GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + name, template); + schema.register(map, namespace + GTValues.VN[tier].toLowerCase(Locale.ROOT) + "_" + path, template); } } protected static void registerSteamMachine(Schema schema, Map> map, String name, Supplier template) { - schema.register(map, "lp_%s".formatted(name), template); - schema.register(map, "hp_%s".formatted(name), template); + String namespace = name.substring(0, name.indexOf(':') + 1); + String path = name.substring(name.indexOf(':') + 1); + schema.register(map, namespace + "lp_" + path, template); + schema.register(map, namespace + "hp_" + path, template); } protected static void registerSimpleSteamMachine(Schema schema, Map> map, String name) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java index 1e6ea114045..bda245a8e5a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java @@ -2,13 +2,14 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; -public class V1 extends AutoGTNamespacedSchema { +public class V1 extends NamespacedSchema { public V1(int versionKey, Schema parent) { super(versionKey, parent); @@ -18,8 +19,8 @@ public V1(int versionKey, Schema parent) { public Map> registerBlockEntities(Schema schema) { Map> map = super.registerBlockEntities(schema); - remove(map, "steam_miner"); - registerSimpleSteamMachine(schema, map, "steam_miner"); + map.remove("gtceu:steam_miner"); + registerSimpleSteamMachine(schema, map, "gtceu:steam_miner"); return map; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java index 745f2894b13..187060e6f99 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java @@ -5,6 +5,7 @@ import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.schemas.NamespacedSchema; import net.minecraftforge.fml.loading.LoadingModList; import com.mojang.datafixers.schemas.Schema; @@ -19,7 +20,7 @@ import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; import static com.mojang.datafixers.DSL.*; -public class V1_3 extends AutoGTNamespacedSchema { +public class V1_3 extends NamespacedSchema { public V1_3(int versionKey, Schema parent) { super(versionKey, parent); @@ -41,15 +42,15 @@ public Map> registerBlockEntities(Schema schema) "waterTank", notifiableFluidTank(schema), steamMachine.get() ); - registerSteamMachine(schema, map, "steam_solar_boiler", steamBoiler); - registerSimpleSteamMachine(schema, map, "extractor"); - registerSimpleSteamMachine(schema, map, "steam_macerator"); - registerSimpleSteamMachine(schema, map, "compressor"); - registerSimpleSteamMachine(schema, map, "forge_hammer"); - registerSimpleSteamMachine(schema, map, "furnace"); - registerSimpleSteamMachine(schema, map, "alloy_smelter"); - registerSimpleSteamMachine(schema, map, "rock_crusher"); - schema.register(map, "steam_miner", () -> optionalFields( + registerSteamMachine(schema, map, "gtceu:steam_solar_boiler", steamBoiler); + registerSimpleSteamMachine(schema, map, "gtceu:extractor"); + registerSimpleSteamMachine(schema, map, "gtceu:steam_macerator"); + registerSimpleSteamMachine(schema, map, "gtceu:compressor"); + registerSimpleSteamMachine(schema, map, "gtceu:forge_hammer"); + registerSimpleSteamMachine(schema, map, "gtceu:furnace"); + registerSimpleSteamMachine(schema, map, "gtceu:alloy_smelter"); + registerSimpleSteamMachine(schema, map, "gtceu:rock_crusher"); + schema.register(map, "gtceu:steam_miner", () -> optionalFields( "importItems", notifiableItemHandler(schema), "exportItems", notifiableItemHandler(schema), "steamTank", notifiableFluidTank(schema), @@ -58,93 +59,93 @@ public Map> registerBlockEntities(Schema schema) // endregion // region simple - registerForTiers(schema, map, "machine_hull", traitHolder, ALL_TIERS); - registerSimpleMachine(schema, map, "electric_furnace", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "alloy_smelter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "arc_furnace", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "assembler", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "autoclave", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "bender", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "brewery", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "canner", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "centrifuge", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "chemical_bath", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "chemical_reactor", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "compressor", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "cutter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "distillery", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "electrolyzer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "electromagnetic_separator", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "extractor", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "extruder", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "fermenter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "fluid_heater", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "fluid_solidifier", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "forge_hammer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "forming_press", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "lathe", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "scanner", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "mixer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "ore_washer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "packer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "polarizer", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "laser_engraver", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "sifter", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "thermal_centrifuge", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "wiremill", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "circuit_assembler", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "macerator", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "gas_collector", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "rock_crusher", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "air_scrubber", LOW_TIERS); - registerSimpleMachine(schema, map, "combustion", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "steam_turbine", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "gas_turbine", ELECTRIC_TIERS); + registerForTiers(schema, map, "gtceu:machine_hull", traitHolder, ALL_TIERS); + registerSimpleMachine(schema, map, "gtceu:electric_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:alloy_smelter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:arc_furnace", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:autoclave", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:bender", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:brewery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:canner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:chemical_bath", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:chemical_reactor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:compressor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:cutter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:distillery", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:electrolyzer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:electromagnetic_separator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:extractor", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:extruder", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:fermenter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:fluid_heater", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:fluid_solidifier", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:forge_hammer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:forming_press", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:lathe", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:scanner", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:mixer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:ore_washer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:packer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:polarizer", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:laser_engraver", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:sifter", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:thermal_centrifuge", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:wiremill", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:circuit_assembler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:macerator", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:gas_collector", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:rock_crusher", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:air_scrubber", LOW_TIERS); + registerSimpleMachine(schema, map, "gtceu:combustion", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:steam_turbine", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:gas_turbine", ELECTRIC_TIERS); // endregion // region electric final int[] transformerTiers = GTValues.tiersBetween(ULV, GTCEuAPI.isHighTier() ? OpV : UV); - registerForTiers(schema, map, "transformer_1a", traitHolder, transformerTiers); - registerForTiers(schema, map, "transformer_2a", traitHolder, transformerTiers); - registerForTiers(schema, map, "transformer_4a", traitHolder, transformerTiers); - registerForTiers(schema, map, "transformer_16a", traitHolder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_1a", traitHolder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_2a", traitHolder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_4a", traitHolder, transformerTiers); + registerForTiers(schema, map, "gtceu:transformer_16a", traitHolder, transformerTiers); - registerForTiers(schema, map, "1a_energy_converter", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "4a_energy_converter", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "8a_energy_converter", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "16a_energy_converter", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:1a_energy_converter", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:4a_energy_converter", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:8a_energy_converter", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:16a_energy_converter", traitHolder, ALL_TIERS); - schema.register(map, "long_distance_item_pipeline_endpoint", traitHolder); - schema.register(map, "long_distance_fluid_pipeline_endpoint", traitHolder); - schema.register(map, "long_distance_fluid_pipeline_endpoint", traitHolder); + schema.register(map, "gtceu:long_distance_item_pipeline_endpoint", traitHolder); + schema.register(map, "gtceu:long_distance_fluid_pipeline_endpoint", traitHolder); + schema.register(map, "gtceu:long_distance_fluid_pipeline_endpoint", traitHolder); final Supplier batteryBuffer = () -> optionalFields( "batteryInventory", itemHandler(schema), traitHolder(schema) ); - registerForTiers(schema, map, "battery_buffer_4x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "battery_buffer_8x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "battery_buffer_16x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "charger_4x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:battery_buffer_4x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:battery_buffer_8x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:battery_buffer_16x", batteryBuffer, ALL_TIERS); + registerForTiers(schema, map, "gtceu:charger_4x", batteryBuffer, ALL_TIERS); - registerForTiers(schema, map, "pump", () -> optionalFields( + registerForTiers(schema, map, "gtceu:pump", () -> optionalFields( "cache", notifiableFluidTank(schema), traitHolder(schema) ), LV, MV, HV, EV); - registerForTiers(schema, map, "fisher", () -> optionalFields( + registerForTiers(schema, map, "gtceu:fisher", () -> optionalFields( "cache", notifiableItemHandler(schema), "baitHandler", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema), traitHolder(schema) ), LV, MV, HV, EV, IV, LuV); - registerForTiers(schema, map, "block_breaker", () -> optionalFields( + registerForTiers(schema, map, "gtceu:block_breaker", () -> optionalFields( "cache", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema), traitHolder(schema) ), LV, MV, HV, EV); - registerSimpleMachine(schema, map, "miner", LV, MV, HV); - registerForTiers(schema, map, "world_accelerator", traitHolder, LV, MV, HV, EV, IV, LuV, ZPM, UV); - registerForTiers(schema, map, "item_collector", () -> optionalFields( + registerSimpleMachine(schema, map, "gtceu:miner", LV, MV, HV); + registerForTiers(schema, map, "gtceu:world_accelerator", traitHolder, LV, MV, HV, EV, IV, LuV, ZPM, UV); + registerForTiers(schema, map, "gtceu:item_collector", () -> optionalFields( "output", notifiableItemHandler(schema), "chargerInventory", itemHandler(schema), "filterInventory", itemHandler(schema), @@ -157,12 +158,12 @@ public Map> registerBlockEntities(Schema schema) "inventory", notifiableItemHandler(schema), traitHolder(schema) ); - registerForTiers(schema, map, "buffer", () -> optionalFields( + registerForTiers(schema, map, "gtceu:buffer", () -> optionalFields( "tank", notifiableFluidTank(schema), itemStorage.get() ), LV, MV, HV); - schema.register(map, "creative_energy", traitHolder); - schema.register(map, "creative_computation_provider", traitHolder); + schema.register(map, "gtceu:creative_energy", traitHolder); + schema.register(map, "gtceu:creative_computation_provider", traitHolder); final Supplier quantumChest = () -> optionalFields( "lockedFluid", GTReferences.FLUID_STACK.in(schema), @@ -174,33 +175,33 @@ public Map> registerBlockEntities(Schema schema) "stored", References.ITEM_STACK.in(schema), traitHolder(schema) ); - schema.register(map, "creative_chest", quantumChest); - schema.register(map, "creative_tank", quantumTank); - registerForTiers(schema, map, "super_chest", quantumChest, LOW_TIERS); - registerForTiers(schema, map, "quantum_chest", quantumChest, HIGH_TIERS); - registerForTiers(schema, map, "super_tank", quantumTank, LOW_TIERS); - registerForTiers(schema, map, "quantum_tank", quantumTank, HIGH_TIERS); - - schema.register(map, "wood_crate", itemStorage); - schema.register(map, "bronze_crate", itemStorage); - schema.register(map, "steel_crate", itemStorage); - schema.register(map, "aluminium_crate", itemStorage); - schema.register(map, "stainless_steel_crate", itemStorage); - schema.register(map, "titanium_crate", itemStorage); - schema.register(map, "tungsten_steel_crate", itemStorage); + schema.register(map, "gtceu:creative_chest", quantumChest); + schema.register(map, "gtceu:creative_tank", quantumTank); + registerForTiers(schema, map, "gtceu:super_chest", quantumChest, LOW_TIERS); + registerForTiers(schema, map, "gtceu:quantum_chest", quantumChest, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:super_tank", quantumTank, LOW_TIERS); + registerForTiers(schema, map, "gtceu:quantum_tank", quantumTank, HIGH_TIERS); + + schema.register(map, "gtceu:wood_crate", itemStorage); + schema.register(map, "gtceu:bronze_crate", itemStorage); + schema.register(map, "gtceu:steel_crate", itemStorage); + schema.register(map, "gtceu:aluminium_crate", itemStorage); + schema.register(map, "gtceu:stainless_steel_crate", itemStorage); + schema.register(map, "gtceu:titanium_crate", itemStorage); + schema.register(map, "gtceu:tungsten_steel_crate", itemStorage); final Supplier drum = () -> optionalFields( "stored", GTReferences.FLUID_STACK.in(schema), traitHolder(schema) ); - schema.register(map, "wood_drum", drum); - schema.register(map, "bronze_drum", drum); - schema.register(map, "steel_drum", drum); - schema.register(map, "aluminium_drum", drum); - schema.register(map, "stainless_steel_drum", drum); - schema.register(map, "gold_drum", drum); - schema.register(map, "titanium_drum", drum); - schema.register(map, "tungsten_steel_drum", drum); + schema.register(map, "gtceu:wood_drum", drum); + schema.register(map, "gtceu:bronze_drum", drum); + schema.register(map, "gtceu:steel_drum", drum); + schema.register(map, "gtceu:aluminium_drum", drum); + schema.register(map, "gtceu:stainless_steel_drum", drum); + schema.register(map, "gtceu:gold_drum", drum); + schema.register(map, "gtceu:titanium_drum", drum); + schema.register(map, "gtceu:tungsten_steel_drum", drum); // endregion // region part @@ -208,77 +209,77 @@ public Map> registerBlockEntities(Schema schema) "circuitSlot", notifiableItemHandler(schema), itemStorage.get() ); - registerForTiers(schema, map, "input_bus", itemBus, ALL_TIERS); - registerForTiers(schema, map, "output_bus", itemBus, ALL_TIERS); + registerForTiers(schema, map, "gtceu:input_bus", itemBus, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_bus", itemBus, ALL_TIERS); final Supplier fluidHatch = () -> optionalFields( "tank", notifiableFluidTank(schema), "circuitSlot", notifiableItemHandler(schema), traitHolder(schema) ); - registerForTiers(schema, map, "input_hatch", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "input_hatch_4x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "input_hatch_9x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "output_hatch", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "output_hatch_4x", fluidHatch, ALL_TIERS); - registerForTiers(schema, map, "output_hatch_9x", fluidHatch, ALL_TIERS); - - registerForTiers(schema, map, "energy_input_hatch", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_4a", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_4a", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "energy_input_hatch_16a", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "energy_output_hatch_16a", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "substation_input_hatch_64a", traitHolder, ALL_TIERS); - registerForTiers(schema, map, "substation_output_hatch_64a", traitHolder, ALL_TIERS); - - registerForTiers(schema, map, "muffler_hatch", itemStorage, ELECTRIC_TIERS); - - schema.register(map, "steam_input_bus", itemBus); - schema.register(map, "steam_output_bus", itemBus); - schema.register(map, "steam_input_hatch", fluidHatch); - schema.register(map, "coke_oven_hatch", traitHolder); - schema.register(map, "pump_hatch", fluidHatch); + registerForTiers(schema, map, "gtceu:input_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:input_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:input_hatch_9x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_hatch", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_hatch_4x", fluidHatch, ALL_TIERS); + registerForTiers(schema, map, "gtceu:output_hatch_9x", fluidHatch, ALL_TIERS); + + registerForTiers(schema, map, "gtceu:energy_input_hatch", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_output_hatch", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_input_hatch_4a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_output_hatch_4a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_input_hatch_16a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:energy_output_hatch_16a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:substation_input_hatch_64a", traitHolder, ALL_TIERS); + registerForTiers(schema, map, "gtceu:substation_output_hatch_64a", traitHolder, ALL_TIERS); + + registerForTiers(schema, map, "gtceu:muffler_hatch", itemStorage, ELECTRIC_TIERS); + + schema.register(map, "gtceu:steam_input_bus", itemBus); + schema.register(map, "gtceu:steam_output_bus", itemBus); + schema.register(map, "gtceu:steam_input_hatch", fluidHatch); + schema.register(map, "gtceu:coke_oven_hatch", traitHolder); + schema.register(map, "gtceu:pump_hatch", fluidHatch); final Supplier maintenanceHatch = () -> optionalFields( "itemStackHandler", notifiableItemHandler(schema), traitHolder(schema) ); - schema.register(map, "maintenance_hatch", maintenanceHatch); - schema.register(map, "configurable_maintenance_hatch", maintenanceHatch); - schema.register(map, "cleaning_maintenance_hatch", maintenanceHatch); - schema.register(map, "auto_maintenance_hatch", maintenanceHatch); - - registerForTiers(schema, map, "item_passthrough_hatch", itemBus, ELECTRIC_TIERS); - registerForTiers(schema, map, "fluid_passthrough_hatch", fluidHatch, ELECTRIC_TIERS); - schema.register(map, "reservoir_hatch", fluidHatch); + schema.register(map, "gtceu:maintenance_hatch", maintenanceHatch); + schema.register(map, "gtceu:configurable_maintenance_hatch", maintenanceHatch); + schema.register(map, "gtceu:cleaning_maintenance_hatch", maintenanceHatch); + schema.register(map, "gtceu:auto_maintenance_hatch", maintenanceHatch); + + registerForTiers(schema, map, "gtceu:item_passthrough_hatch", itemBus, ELECTRIC_TIERS); + registerForTiers(schema, map, "gtceu:fluid_passthrough_hatch", fluidHatch, ELECTRIC_TIERS); + schema.register(map, "gtceu:reservoir_hatch", fluidHatch); final Supplier dualHatch = () -> optionalFields( "tank", notifiableFluidTank(schema), itemBus.get() ); - registerForTiers(schema, map, "dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); - registerForTiers(schema, map, "dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); + registerForTiers(schema, map, "gtceu:dual_input_hatch", dualHatch, DUAL_HATCH_TIERS); + registerForTiers(schema, map, "gtceu:dual_output_hatch", dualHatch, DUAL_HATCH_TIERS); - registerForTiers(schema, map, "diode", traitHolder, ELECTRIC_TIERS); - registerForTiers(schema, map, "rotor_holder", () -> optionalFields( + registerForTiers(schema, map, "gtceu:diode", traitHolder, ELECTRIC_TIERS); + registerForTiers(schema, map, "gtceu:rotor_holder", () -> optionalFields( "rotorMaterial", GTReferences.MATERIAL_NAME.in(schema), itemStorage.get() ), GTValues.tiersBetween(HV, GTCEuAPI.isHighTier() ? OpV : UV)); - registerForTiers(schema, map, "256a_laser_target_hatch", traitHolder, HIGH_TIERS); - registerForTiers(schema, map, "256a_laser_source_hatch", traitHolder, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_target_hatch", traitHolder, HIGH_TIERS); - registerForTiers(schema, map, "1024a_laser_source_hatch", traitHolder, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_target_hatch", traitHolder, HIGH_TIERS); - registerForTiers(schema, map, "4096a_laser_source_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:256a_laser_target_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:256a_laser_source_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:1024a_laser_target_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:1024a_laser_source_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:4096a_laser_target_hatch", traitHolder, HIGH_TIERS); + registerForTiers(schema, map, "gtceu:4096a_laser_source_hatch", traitHolder, HIGH_TIERS); - schema.register(map, "monitor", traitHolder); - schema.register(map, "advanced_monitor", traitHolder); + schema.register(map, "gtceu:monitor", traitHolder); + schema.register(map, "gtceu:advanced_monitor", traitHolder); // endregion // region multiblock - schema.register(map, "bronze_large_boiler", traitHolder); - schema.register(map, "steel_large_boiler", traitHolder); - schema.register(map, "titanium_large_boiler", traitHolder); - schema.register(map, "tungstensteel_large_boiler", traitHolder); + schema.register(map, "gtceu:bronze_large_boiler", traitHolder); + schema.register(map, "gtceu:steel_large_boiler", traitHolder); + schema.register(map, "gtceu:titanium_large_boiler", traitHolder); + schema.register(map, "gtceu:tungstensteel_large_boiler", traitHolder); final Supplier primitiveMachine = () -> optionalFields( "importItems", notifiableItemHandler(schema), @@ -287,108 +288,108 @@ public Map> registerBlockEntities(Schema schema) "exportFluids", notifiableFluidTank(schema), traitHolder(schema) ); - schema.register(map, "coke_oven", primitiveMachine); - schema.register(map, "primitive_blast_furnace", primitiveMachine); - - schema.register(map, "electric_blast_furnace", traitHolder); - schema.register(map, "large_chemical_reactor", traitHolder); - schema.register(map, "implosion_compressor", traitHolder); - schema.register(map, "pyrolyse_oven", traitHolder); - schema.register(map, "multi_smelter", traitHolder); - schema.register(map, "cracker", traitHolder); - schema.register(map, "distillation_tower", traitHolder); - schema.register(map, "vacuum_freezer", traitHolder); - schema.register(map, "assembly_line", traitHolder); - schema.register(map, "primitive_pump", traitHolder); - schema.register(map, "steam_grinder", traitHolder); - schema.register(map, "steam_oven", traitHolder); - registerForTiers(schema, map, "fusion_reactor", traitHolder, LuV, ZPM, UV); - registerForTiers(schema, map, "fluid_drilling_rig", traitHolder, MV, HV, EV); - registerForTiers(schema, map, "large_miner", traitHolder, EV, IV, LuV); - schema.register(map, "cleanroom", traitHolder); - schema.register(map, "large_combustion_engine", traitHolder); - schema.register(map, "extreme_combustion_engine", traitHolder); - schema.register(map, "steam_large_turbine", traitHolder); - schema.register(map, "gas_large_turbine", traitHolder); - schema.register(map, "plasma_large_turbine", traitHolder); - schema.register(map, "active_transformer", traitHolder); - schema.register(map, "power_substation", traitHolder); - registerForTiers(schema, map, "bedrock_ore_miner", traitHolder, MV, HV, EV); - schema.register(map, "wooden_tank_valve", traitHolder); - schema.register(map, "wooden_multiblock_tank", traitHolder); - schema.register(map, "bronze_tank_valve", traitHolder); - schema.register(map, "bronze_multiblock_tank", traitHolder); - schema.register(map, "steel_tank_valve", traitHolder); - schema.register(map, "steel_multiblock_tank", traitHolder); - - schema.register(map, "central_monitor", traitHolder); + schema.register(map, "gtceu:coke_oven", primitiveMachine); + schema.register(map, "gtceu:primitive_blast_furnace", primitiveMachine); + + schema.register(map, "gtceu:electric_blast_furnace", traitHolder); + schema.register(map, "gtceu:large_chemical_reactor", traitHolder); + schema.register(map, "gtceu:implosion_compressor", traitHolder); + schema.register(map, "gtceu:pyrolyse_oven", traitHolder); + schema.register(map, "gtceu:multi_smelter", traitHolder); + schema.register(map, "gtceu:cracker", traitHolder); + schema.register(map, "gtceu:distillation_tower", traitHolder); + schema.register(map, "gtceu:vacuum_freezer", traitHolder); + schema.register(map, "gtceu:assembly_line", traitHolder); + schema.register(map, "gtceu:primitive_pump", traitHolder); + schema.register(map, "gtceu:steam_grinder", traitHolder); + schema.register(map, "gtceu:steam_oven", traitHolder); + registerForTiers(schema, map, "gtceu:fusion_reactor", traitHolder, LuV, ZPM, UV); + registerForTiers(schema, map, "gtceu:fluid_drilling_rig", traitHolder, MV, HV, EV); + registerForTiers(schema, map, "gtceu:large_miner", traitHolder, EV, IV, LuV); + schema.register(map, "gtceu:cleanroom", traitHolder); + schema.register(map, "gtceu:large_combustion_engine", traitHolder); + schema.register(map, "gtceu:extreme_combustion_engine", traitHolder); + schema.register(map, "gtceu:steam_large_turbine", traitHolder); + schema.register(map, "gtceu:gas_large_turbine", traitHolder); + schema.register(map, "gtceu:plasma_large_turbine", traitHolder); + schema.register(map, "gtceu:active_transformer", traitHolder); + schema.register(map, "gtceu:power_substation", traitHolder); + registerForTiers(schema, map, "gtceu:bedrock_ore_miner", traitHolder, MV, HV, EV); + schema.register(map, "gtceu:wooden_tank_valve", traitHolder); + schema.register(map, "gtceu:wooden_multiblock_tank", traitHolder); + schema.register(map, "gtceu:bronze_tank_valve", traitHolder); + schema.register(map, "gtceu:bronze_multiblock_tank", traitHolder); + schema.register(map, "gtceu:steel_tank_valve", traitHolder); + schema.register(map, "gtceu:steel_multiblock_tank", traitHolder); + + schema.register(map, "gtceu:central_monitor", traitHolder); // region GCYM - registerForTiers(schema, map, "parallel_hatch", traitHolder, IV, LuV, ZPM, UV); - schema.register(map, "large_maceration_tower", traitHolder); - schema.register(map, "large_chemical_bath", traitHolder); - schema.register(map, "large_centrifuge", traitHolder); - schema.register(map, "large_mixer", traitHolder); - schema.register(map, "large_electrolyzer", traitHolder); - schema.register(map, "large_electromagnet", traitHolder); - schema.register(map, "large_packer", traitHolder); - schema.register(map, "large_assembler", traitHolder); - schema.register(map, "large_circuit_assembler", traitHolder); - schema.register(map, "large_arc_smelter", traitHolder); - schema.register(map, "large_engraving_laser", traitHolder); - schema.register(map, "large_sifting_funnel", traitHolder); - schema.register(map, "alloy_blast_smelter", traitHolder); - schema.register(map, "large_autoclave", traitHolder); - schema.register(map, "large_material_press", traitHolder); - schema.register(map, "large_brewer", traitHolder); - schema.register(map, "large_cutter", traitHolder); - schema.register(map, "large_extractor", traitHolder); - schema.register(map, "large_extruder", traitHolder); - schema.register(map, "large_solidifier", traitHolder); - schema.register(map, "large_wiremill", traitHolder); - schema.register(map, "mega_blast_furnace", traitHolder); - schema.register(map, "mega_vacuum_freezer", traitHolder); + registerForTiers(schema, map, "gtceu:parallel_hatch", traitHolder, IV, LuV, ZPM, UV); + schema.register(map, "gtceu:large_maceration_tower", traitHolder); + schema.register(map, "gtceu:large_chemical_bath", traitHolder); + schema.register(map, "gtceu:large_centrifuge", traitHolder); + schema.register(map, "gtceu:large_mixer", traitHolder); + schema.register(map, "gtceu:large_electrolyzer", traitHolder); + schema.register(map, "gtceu:large_electromagnet", traitHolder); + schema.register(map, "gtceu:large_packer", traitHolder); + schema.register(map, "gtceu:large_assembler", traitHolder); + schema.register(map, "gtceu:large_circuit_assembler", traitHolder); + schema.register(map, "gtceu:large_arc_smelter", traitHolder); + schema.register(map, "gtceu:large_engraving_laser", traitHolder); + schema.register(map, "gtceu:large_sifting_funnel", traitHolder); + schema.register(map, "gtceu:alloy_blast_smelter", traitHolder); + schema.register(map, "gtceu:large_autoclave", traitHolder); + schema.register(map, "gtceu:large_material_press", traitHolder); + schema.register(map, "gtceu:large_brewer", traitHolder); + schema.register(map, "gtceu:large_cutter", traitHolder); + schema.register(map, "gtceu:large_extractor", traitHolder); + schema.register(map, "gtceu:large_extruder", traitHolder); + schema.register(map, "gtceu:large_solidifier", traitHolder); + schema.register(map, "gtceu:large_wiremill", traitHolder); + schema.register(map, "gtceu:mega_blast_furnace", traitHolder); + schema.register(map, "gtceu:mega_vacuum_freezer", traitHolder); // endregion // endregion // region research - schema.register(map, "research_station", traitHolder); - schema.register(map, "object_holder", () -> optionalFields( + schema.register(map, "gtceu:research_station", traitHolder); + schema.register(map, "gtceu:object_holder", () -> optionalFields( "heldItems", notifiableItemHandler(schema), traitHolder(schema) )); - schema.register(map, "data_bank", traitHolder); - schema.register(map, "network_switch", traitHolder); - schema.register(map, "high_performance_computation_array", traitHolder); - schema.register(map, "computation_transmitter_hatch", traitHolder); - schema.register(map, "computation_receiver_hatch", traitHolder); - schema.register(map, "data_transmitter_hatch", traitHolder); - schema.register(map, "data_receiver_hatch", traitHolder); + schema.register(map, "gtceu:data_bank", traitHolder); + schema.register(map, "gtceu:network_switch", traitHolder); + schema.register(map, "gtceu:high_performance_computation_array", traitHolder); + schema.register(map, "gtceu:computation_transmitter_hatch", traitHolder); + schema.register(map, "gtceu:computation_receiver_hatch", traitHolder); + schema.register(map, "gtceu:data_transmitter_hatch", traitHolder); + schema.register(map, "gtceu:data_receiver_hatch", traitHolder); final Supplier dataAccessHatch = () -> optionalFields( "importItems", notifiableItemHandler(schema), traitHolder(schema) ); - schema.register(map, "basic_data_access_hatch", dataAccessHatch); - schema.register(map, "data_access_hatch", dataAccessHatch); - schema.register(map, "advanced_data_access_hatch", dataAccessHatch); - schema.register(map, "creative_data_access_hatch", dataAccessHatch); - schema.register(map, "hpca_empty_component", traitHolder); - schema.register(map, "hpca_computation_component", traitHolder); - schema.register(map, "hpca_advanced_computation_component", traitHolder); - schema.register(map, "hpca_heat_sink_component", traitHolder); - schema.register(map, "hpca_active_cooler_component", traitHolder); - schema.register(map, "hpca_bridge_component", traitHolder); + schema.register(map, "gtceu:basic_data_access_hatch", dataAccessHatch); + schema.register(map, "gtceu:data_access_hatch", dataAccessHatch); + schema.register(map, "gtceu:advanced_data_access_hatch", dataAccessHatch); + schema.register(map, "gtceu:creative_data_access_hatch", dataAccessHatch); + schema.register(map, "gtceu:hpca_empty_component", traitHolder); + schema.register(map, "gtceu:hpca_computation_component", traitHolder); + schema.register(map, "gtceu:hpca_advanced_computation_component", traitHolder); + schema.register(map, "gtceu:hpca_heat_sink_component", traitHolder); + schema.register(map, "gtceu:hpca_active_cooler_component", traitHolder); + schema.register(map, "gtceu:hpca_bridge_component", traitHolder); // endregion // region AE2 compat if (LoadingModList.get().getModFileById(MODID_APPENG) != null) { // only add these if AE2 is loaded - schema.register(map, "me_input_bus", itemBus); - schema.register(map, "me_stocking_input_bus", itemBus); - schema.register(map, "me_output_bus", itemBus); - schema.register(map, "me_input_hatch", fluidHatch); - schema.register(map, "me_stocking_input_hatch", fluidHatch); - schema.register(map, "me_output_hatch", fluidHatch); - schema.register(map, "me_pattern_buffer", () -> optionalFields( + schema.register(map, "gtceu:me_input_bus", itemBus); + schema.register(map, "gtceu:me_stocking_input_bus", itemBus); + schema.register(map, "gtceu:me_output_bus", itemBus); + schema.register(map, "gtceu:me_input_hatch", fluidHatch); + schema.register(map, "gtceu:me_stocking_input_hatch", fluidHatch); + schema.register(map, "gtceu:me_output_hatch", fluidHatch); + schema.register(map, "gtceu:me_pattern_buffer", () -> optionalFields( "patternInventory", itemHandler(schema), "shareInventory", notifiableItemHandler(schema), "shareTank", notifiableFluidTank(schema), @@ -400,7 +401,7 @@ public Map> registerBlockEntities(Schema schema) ), itemBus.get() )); - schema.register(map, "me_pattern_buffer_proxy", traitHolder); + schema.register(map, "gtceu:me_pattern_buffer_proxy", traitHolder); } // endregion diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java index ded84437f27..1b59d1267cd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java @@ -2,6 +2,7 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; @@ -9,7 +10,7 @@ import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ELECTRIC_TIERS; import static com.gregtechceu.gtceu.common.datafixer.schemas.V1_3.registerSimpleMachine; -public class V1_4 extends AutoGTNamespacedSchema { +public class V1_4 extends NamespacedSchema { public V1_4(int versionKey, Schema parent) { super(versionKey, parent); @@ -19,8 +20,8 @@ public V1_4(int versionKey, Schema parent) { public Map> registerBlockEntities(Schema schema) { Map> map = super.registerBlockEntities(schema); - registerSimpleMachine(schema, map, "welder", ELECTRIC_TIERS); - registerSimpleMachine(schema, map, "spooler", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:welder", ELECTRIC_TIERS); + registerSimpleMachine(schema, map, "gtceu:spooler", ELECTRIC_TIERS); return map; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java index 2f2744f64f2..be543327d48 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java @@ -7,13 +7,14 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.Hook; import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; import static com.mojang.datafixers.DSL.*; -public class V1_5 extends AutoGTNamespacedSchema { +public class V1_5 extends NamespacedSchema { public V1_5(int versionKey, Schema parent) { super(versionKey, parent); From 9cc674e8814e048d5c9c19864f7fe3226586845a Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 13 Oct 2026 10:46:23 +0300 Subject: [PATCH 73/83] Add fixer for fixing the Rotary Hearth Furnace's and Bulk Blast Chiller's names --- .../java/com/gregtechceu/gtceu/GTCEu.java | 12 ++++----- .../common/data/datafixer/GTDataFixers.java | 9 +++++++ .../common/data/machines/GCYMMachines.java | 12 ++++----- .../gtceu/common/datafixer/schemas/V0.java | 4 +-- .../gtceu/common/datafixer/schemas/V1_6.java | 25 ++++++++++++++++++ .../gtceu/data/recipe/misc/GCYMRecipes.java | 4 +-- .../overlay_front.png | Bin .../overlay_front_active.png | Bin .../overlay_front_active.png.mcmeta | 0 .../overlay_front_active_emissive.png | Bin .../overlay_front_active_emissive.png.mcmeta | 0 .../overlay_front_emissive.png | Bin .../overlay_front_paused.png | Bin .../overlay_front_paused_emissive.png | Bin .../overlay_front.png | Bin .../overlay_front_active.png | Bin .../overlay_front_active.png.mcmeta | 0 .../overlay_front_active_emissive.png | Bin .../overlay_front_active_emissive.png.mcmeta | 0 .../overlay_front_emissive.png | Bin .../overlay_front_paused.png | Bin .../overlay_front_paused_emissive.png | Bin 22 files changed, 50 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_6.java rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front_active.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front_active.png.mcmeta (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front_active_emissive.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front_active_emissive.png.mcmeta (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front_emissive.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front_paused.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_blast_furnace => bulk_blast_chiller}/overlay_front_paused_emissive.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front_active.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front_active.png.mcmeta (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front_active_emissive.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front_active_emissive.png.mcmeta (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front_emissive.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front_paused.png (100%) rename src/main/resources/assets/gtceu/textures/block/multiblock/gcym/{mega_vacuum_freezer => rotary_hearth_furnace}/overlay_front_paused_emissive.png (100%) diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index af5efbff1d0..a6ed77f4851 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -40,15 +40,15 @@ public class GTCEu { * change. * *

    - * Example versions: + * Versions: *

      - *
    • 0: 7.5.3
    • - *
    • 1.0: 8.0.0-SNAPSHOT+HASH1
    • // TODO set the correct hash here - *
    • 1.1: 8.0.0-SNAPSHOT+HASH2
    • - *
    • 2.0: 8.0.1-SNAPSHOT+HASH2
    • + *
    • 0: 1.3.0-7.5.3
    • + *
    • 1.0: 8.0.0-SNAPSHOT+HASH1
    • // TODO set the correct hash(es) here + *
    • 1.1-1.6: 8.0.0-SNAPSHOT+HASH2
    • + *
    • 2.0: 8.0.1-SNAPSHOT+HASH3
    • *
    */ - public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 5); + public static final int GT_DATA_VERSION = DataFixUtils.makeKey(1, 6); public GTCEu() { GTCEu.init(); 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 index b1a1d3e4bfd..4220c323ba2 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -187,6 +187,15 @@ public static void addFixers(DataFixerBuilder builder) { builder.addFixer(new ItemStackTurbineRotorFix(v1_5)); builder.addFixer(new ExtruderCastingMoldRemapFix(v1_5)); + + // separator + + Schema v1_6 = builder.addSchema(1, 6, V1_6::new); + createBlockItemEntityRenameFix(builder, v1_6, "Fix Rotary Hearth Furnace name", + createRenamer("gtceu:mega_blast_furnace", "gtceu:rotary_hearth_furnace")); + createBlockItemEntityRenameFix(builder, v1_6, "Fix Bulk Blast Chiller name", + createRenamer("gtceu:mega_vacuum_freezer", "gtceu:bulk_blast_chiller")); + } private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java index 219825b0542..272283562a5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/machines/GCYMMachines.java @@ -802,8 +802,8 @@ public static void init() {} .register(); // spotless:off - public final static MultiblockMachineDefinition MEGA_BLAST_FURNACE = REGISTRATE - .multiblock("mega_blast_furnace", CoilWorkableElectricMultiblockMachine::new) + public final static MultiblockMachineDefinition ROTARY_HEARTH_FURNACE = REGISTRATE + .multiblock("rotary_hearth_furnace", CoilWorkableElectricMultiblockMachine::new) .langValue("Rotary Hearth Furnace") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", @@ -850,7 +850,7 @@ public static void init() {} .build(); }) .workableCasingModel(GTCEu.id("block/casings/gcym/high_temperature_smelting_casing"), - GTCEu.id("block/multiblock/gcym/mega_blast_furnace")) + GTCEu.id("block/multiblock/gcym/rotary_hearth_furnace")) .additionalDisplay((controller, syncManager) -> { if (!(controller instanceof CoilWorkableElectricMultiblockMachine coilMachine)) return Collections.emptyList(); @@ -871,8 +871,8 @@ public static void init() {} }) .register(); - public final static MultiblockMachineDefinition MEGA_VACUUM_FREEZER = REGISTRATE - .multiblock("mega_vacuum_freezer", WorkableElectricMultiblockMachine::new) + public final static MultiblockMachineDefinition BULK_BLAST_CHILLER = REGISTRATE + .multiblock("bulk_blast_chiller", WorkableElectricMultiblockMachine::new) .langValue("Bulk Blast Chiller") .tooltips(Component.translatable("gtceu.multiblock.parallelizable.tooltip")) .tooltips(Component.translatable("gtceu.machine.available_recipe_map_1.tooltip", @@ -902,7 +902,7 @@ public static void init() {} .where('#', any()) .build()) .workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_frost_proof"), - GTCEu.id("block/multiblock/gcym/mega_vacuum_freezer")) + GTCEu.id("block/multiblock/gcym/bulk_blast_chiller")) .register(); // spotless:on } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java index 5eee899a0e4..369d836e913 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V0.java @@ -406,8 +406,8 @@ public Map> registerBlockEntities(Schema schema) schema.registerSimple(map, "gtceu:large_extruder"); schema.registerSimple(map, "gtceu:large_solidifier"); schema.registerSimple(map, "gtceu:large_wiremill"); - schema.registerSimple(map, "gtceu:mega_blast_furnace"); // TODO add fixer to rename to "rotary_hearth_furnace" - schema.registerSimple(map, "gtceu:mega_vacuum_freezer"); // TODO add fixer to rename to "bulk_blast_chiller" + schema.registerSimple(map, "gtceu:mega_blast_furnace"); + schema.registerSimple(map, "gtceu:mega_vacuum_freezer"); // endregion // endregion diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_6.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_6.java new file mode 100644 index 00000000000..ba47483068e --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_6.java @@ -0,0 +1,25 @@ +package com.gregtechceu.gtceu.common.datafixer.schemas; + +import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.templates.TypeTemplate; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + +import java.util.Map; +import java.util.function.Supplier; + +public class V1_6 extends NamespacedSchema { + + public V1_6(int versionKey, Schema parent) { + super(versionKey, parent); + } + + @Override + public Map> registerBlockEntities(Schema schema) { + Map> map = super.registerBlockEntities(schema); + + schema.register(map, "gtceu:rotary_hearth_furnace", map.remove("gtceu:mega_blast_furnace")); + schema.register(map, "gtceu:bulk_blast_chiller", map.remove("gtceu:mega_vacuum_freezer")); + + return map; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java index ea048d869eb..269c06402fc 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java @@ -104,12 +104,12 @@ private static void registerMultiblockControllerRecipes(Consumer VanillaRecipeHelper.addShapedRecipe(provider, true, "blast_alloy_smelter", BLAST_ALLOY_SMELTER.asStack(), "TCT", "WXW", "TCT", 'C', CustomTags.EV_CIRCUITS, 'T', new MaterialEntry(plate, TantalumCarbide), 'W', new MaterialEntry(cableGtSingle, Aluminium), 'X', ALLOY_SMELTER[EV].asStack()); - VanillaRecipeHelper.addShapedRecipe(provider, true, "mega_blast_furnace", MEGA_BLAST_FURNACE.asStack(), "PCP", + VanillaRecipeHelper.addShapedRecipe(provider, true, "rotary_hearth_furnace", ROTARY_HEARTH_FURNACE.asStack(), "PCP", "FSF", "DWD", 'C', ZPM_CIRCUITS, 'S', GTMultiMachines.ELECTRIC_BLAST_FURNACE.asStack(), 'F', FIELD_GENERATOR_ZPM.asStack(), 'P', new MaterialEntry(spring, Naquadah), 'D', new MaterialEntry(plateDense, NaquadahAlloy), 'W', new MaterialEntry(wireGtQuadruple, RutheniumTriniumAmericiumNeutronate)); - VanillaRecipeHelper.addShapedRecipe(provider, true, "mega_vacuum_freezer", MEGA_VACUUM_FREEZER.asStack(), "PCP", + VanillaRecipeHelper.addShapedRecipe(provider, true, "bulk_blast_chiller", BULK_BLAST_CHILLER.asStack(), "PCP", "FSF", "DWD", 'C', ZPM_CIRCUITS, 'S', GTMultiMachines.VACUUM_FREEZER.asStack(), 'F', FIELD_GENERATOR_ZPM.asStack(), 'P', new MaterialEntry(pipeNormalFluid, NiobiumTitanium), 'D', diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active.png.mcmeta similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active.png.mcmeta rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active.png.mcmeta diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active_emissive.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active_emissive.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active_emissive.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active_emissive.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active_emissive.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active_emissive.png.mcmeta similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_active_emissive.png.mcmeta rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_active_emissive.png.mcmeta diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_emissive.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_emissive.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_emissive.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_emissive.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_paused.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_paused.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_paused.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_paused.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_paused_emissive.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_paused_emissive.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_blast_furnace/overlay_front_paused_emissive.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/bulk_blast_chiller/overlay_front_paused_emissive.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active.png.mcmeta similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active.png.mcmeta rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active.png.mcmeta diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active_emissive.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active_emissive.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active_emissive.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active_emissive.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active_emissive.png.mcmeta b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active_emissive.png.mcmeta similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_active_emissive.png.mcmeta rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_active_emissive.png.mcmeta diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_emissive.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_emissive.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_emissive.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_emissive.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_paused.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_paused.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_paused.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_paused.png diff --git a/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_paused_emissive.png b/src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_paused_emissive.png similarity index 100% rename from src/main/resources/assets/gtceu/textures/block/multiblock/gcym/mega_vacuum_freezer/overlay_front_paused_emissive.png rename to src/main/resources/assets/gtceu/textures/block/multiblock/gcym/rotary_hearth_furnace/overlay_front_paused_emissive.png From 0b2c12d21e5c2028b15ff28cc76f1d479304d300 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 13 Oct 2026 11:41:54 +0300 Subject: [PATCH 74/83] Backport a fix from (a newer version of DFU)[https://github.com/Mojang/DataFixerUpper/commit/b81c76b] and make it happy with the version number --- .../java/com/gregtechceu/gtceu/GTCEu.java | 10 +- .../api/datafixer/FixedDataFixerBuilder.java | 106 ++++++++++++++++++ .../api/datafixer/FixedDataFixerUpper.java | 76 +++++++++++++ .../common/data/datafixer/GTDataFixers.java | 96 ++++++++-------- .../schemas/{V1_3.java => V2_2.java} | 4 +- .../schemas/{V1_4.java => V2_3.java} | 6 +- .../datafixer/schemas/{V1_5.java => V3.java} | 4 +- .../schemas/{V1_6.java => V3_1.java} | 4 +- .../CachingStructureManagerMixin.java | 3 + 9 files changed, 247 insertions(+), 62 deletions(-) create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java create mode 100644 src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerUpper.java rename src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/{V1_3.java => V2_2.java} (99%) rename src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/{V1_4.java => V2_3.java} (81%) rename src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/{V1_5.java => V3.java} (94%) rename src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/{V1_6.java => V3_1.java} (88%) diff --git a/src/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index a6ed77f4851..0297a046274 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -42,13 +42,13 @@ public class GTCEu { *

    * Versions: *

      - *
    • 0: 1.3.0-7.5.3
    • - *
    • 1.0: 8.0.0-SNAPSHOT+HASH1
    • // TODO set the correct hash(es) here - *
    • 1.1-1.6: 8.0.0-SNAPSHOT+HASH2
    • - *
    • 2.0: 8.0.1-SNAPSHOT+HASH3
    • + *
    • 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 = DataFixUtils.makeKey(1, 6); + public static final int GT_DATA_VERSION = 3; public GTCEu() { GTCEu.init(); 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..402c49cfa8a --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java @@ -0,0 +1,106 @@ +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..5c6fe4f9951 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerUpper.java @@ -0,0 +1,76 @@ +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/common/data/datafixer/GTDataFixers.java b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java index 4220c323ba2..680a6f9aa64 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -2,6 +2,7 @@ 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; @@ -17,7 +18,6 @@ import com.mojang.datafixers.DSL; import com.mojang.datafixers.DataFixUtils; import com.mojang.datafixers.DataFixer; -import com.mojang.datafixers.DataFixerBuilder; import com.mojang.datafixers.schemas.Schema; import lombok.Getter; import org.jetbrains.annotations.Nullable; @@ -32,7 +32,7 @@ import java.util.regex.Pattern; /** - * Register new datafixers in {@link #addFixers(DataFixerBuilder)}. Remember to bump {@link GTCEu#GT_DATA_VERSION} in + * 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. * *

    @@ -83,7 +83,7 @@ public static void init() {} return new LazyDataFixer(() -> { try { - DataFixerBuilder builder = new DataFixerBuilder(GTCEu.GT_DATA_VERSION); + FixedDataFixerBuilder builder = new FixedDataFixerBuilder(GTCEu.GT_DATA_VERSION); addFixers(builder); if (typesToOptimize.isEmpty()) { @@ -104,108 +104,108 @@ public static void init() {} }); } - public static void addFixers(DataFixerBuilder builder) { + public static void addFixers(FixedDataFixerBuilder builder) { builder.addSchema(new V0(DataFixUtils.makeKey(0), DataFixHelper.getLatestVanillaSchema())); - Schema v1_0 = builder.addSchema(1, V1::new); - builder.addFixer(new AddNewChoices(v1_0, "Added High Pressure Steam Miner", References.BLOCK_ENTITY)); - createBlockItemRenameFix(builder, v1_0, "Rename RTM Alloy Coil Block", + Schema v1 = builder.addSchema(1, V1::new); + builder.addFixer(new AddNewChoices(v1, "Added High Pressure Steam Miner", References.BLOCK_ENTITY)); + createBlockItemRenameFix(builder, v1, "Rename RTM Alloy Coil Block", createRenamer("tungstensteel_coil_block", "rtm_alloy_coil_block")); - builder.addFixer(ItemRenameFix.create(v1_0, "Fix Advanced Nanomuscle Chestplate name", + builder.addFixer(ItemRenameFix.create(v1, "Fix Advanced Nanomuscle Chestplate name", createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); - builder.addFixer(ItemRenameFix.create(v1_0, "Rename Tungstensteel Fluid Cell", + builder.addFixer(ItemRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", createRenamer("gtceu:tungstensteel_fluid_cell", "gtceu:tungsten_steel_fluid_cell"))); - createBlockItemEntityRenameFix(builder, v1_0, "Rename Low Pressure Steam Miner", + createBlockItemEntityRenameFix(builder, v1, "Rename Low Pressure Steam Miner", createRenamer("gtceu:steam_miner", "gtceu:lp_steam_miner")); - builder.addFixer(ItemRenameFix.create(v1_0, "Rename electric wire cutters", + builder.addFixer(ItemRenameFix.create(v1, "Rename electric wire cutters", createRenamer(Pattern.compile("([lhi])v_([a-z0-9/._-]+)_wirecutter"), "$1v_$2_wire_cutter"))); // for whatever reason forge registers the milk fluid under MC's namespace - builder.addFixer(FluidRenameFix.create(v1_0, "Remove GT milk fluid", + builder.addFixer(FluidRenameFix.create(v1, "Remove GT milk fluid", createRenamer(Map.of("gtceu:milk", "minecraft:milk", "gtceu:flowing_milk", "minecraft:flowing_milk")))); - builder.addFixer(ItemRenameFix.create(v1_0, "Remove GT milk bucket", + builder.addFixer(ItemRenameFix.create(v1, "Remove GT milk bucket", createRenamer("gtceu:milk_bucket", "minecraft:milk_bucket"))); // separator - Schema v1_1 = builder.addSchema(1, 1, SAME_NAMESPACED); - builder.addFixer(new LDLibPayloadWrapperRemovalFix(v1_1)); - builder.addFixer(new AutoOutputTraitFix(v1_1)); + Schema v2_0 = builder.addSchema(2, SAME_NAMESPACED); + builder.addFixer(new LDLibPayloadWrapperRemovalFix(v2_0)); + builder.addFixer(new AutoOutputTraitFix(v2_0)); // separator - Schema v1_2 = builder.addSchema(1, 2, SAME_NAMESPACED); - builder.addFixer(new UpwardsFacingPropertyFix(v1_2)); + Schema v2_1 = builder.addSchema(2, 1, SAME_NAMESPACED); + builder.addFixer(new UpwardsFacingPropertyFix(v2_1)); // separator - Schema v1_3 = builder.addSchema(1, 3, V1_3::new); - builder.addFixer(new TraitHolderificationFix(v1_3)); + Schema v2_2 = builder.addSchema(2, 2, V2_2::new); + builder.addFixer(new TraitHolderificationFix(v2_2)); // separator - Schema v1_4 = builder.addSchema(1, 4, V1_4::new); - builder.addFixer(new AddNewChoices(v1_4, "Added Welder and Spooler", References.BLOCK_ENTITY)); + Schema v2_3 = builder.addSchema(2, 3, V2_3::new); + builder.addFixer(new AddNewChoices(v2_3, "Added Welder and Spooler", References.BLOCK_ENTITY)); + builder.addFixer(new ExtruderCastingMoldRemapFix(v2_3)); // Migrate GT's Molten fluids, ignore addons to allow them to fail loudly - builder.addFixer(BlockRenameFix.create(v1_4, "Remove molten fluid blocks", + builder.addFixer(BlockRenameFix.create(v2_3, "Remove molten fluid blocks", createRenamer(RemoveMoltenFluidsFix.REMOVED_BLOCKS))); - builder.addFixer(ItemRenameFix.create(v1_4, "Remove molten fluid buckets", + builder.addFixer(ItemRenameFix.create(v2_3, "Remove molten fluid buckets", createRenamer(RemoveMoltenFluidsFix.REMOVED_ITEMS))); - builder.addFixer(FluidRenameFix.create(v1_4, "Remove molten fluids", + builder.addFixer(FluidRenameFix.create(v2_3, "Remove molten fluids", createRenamer(RemoveMoltenFluidsFix.REMOVED_FLUIDS))); // version that doesn't ignore addons: - // createBlockItemFluidRenameFix(builder, v1_4, "Remove molten fluids", + // createBlockItemFluidRenameFix(builder, v2_3, "Remove molten fluids", // createRenamer(Pattern.compile("(flowing_)?molten_"), "$1")); // separator - Schema v1_5 = builder.addSchema(1, 5, V1_5::new); - // createMaterialRenameFix(builder, v1_5, "Rename uranium to uranium_238", + Schema v3_0 = builder.addSchema(3, 0, V3::new); + // createMaterialRenameFix(builder, v3_0, "Rename uranium to uranium_238", // createRenamer(Pattern.compile("gtceu:(.*)?uranium"), "gtceu:$1uranium_238")); - // createMaterialRenameFix(builder, v1_5, "Rename uranium_235 to uranium", + // createMaterialRenameFix(builder, v3_0, "Rename uranium_235 to uranium", // createRenamer(Pattern.compile("gtceu:(.*)uranium_235"), "gtceu:$1uranium")); - createMaterialRenameFix(builder, v1_5, "gtceu:granite_red", "gtceu:red_granite"); - createMaterialRenameFix(builder, v1_5, "gtceu:oil_heavy", "gtceu:heavy_oil"); - createMaterialRenameFix(builder, v1_5, "gtceu:oil_light", "gtceu:light_oil"); - createMaterialRenameFix(builder, v1_5, "gtceu:oil_medium", "gtceu:raw_oil"); - createMaterialRenameFix(builder, v1_5, "gtceu:palladium_raw", "gtceu:raw_palladium"); + createMaterialRenameFix(builder, v3_0, "gtceu:granite_red", "gtceu:red_granite"); + createMaterialRenameFix(builder, v3_0, "gtceu:oil_heavy", "gtceu:heavy_oil"); + createMaterialRenameFix(builder, v3_0, "gtceu:oil_light", "gtceu:light_oil"); + createMaterialRenameFix(builder, v3_0, "gtceu:oil_medium", "gtceu:raw_oil"); + createMaterialRenameFix(builder, v3_0, "gtceu:palladium_raw", "gtceu:raw_palladium"); - createBlockItemRenameFix(builder, v1_5, "Fix Palladium Substation Casing name", + createBlockItemRenameFix(builder, v3_0, "Fix Palladium Substation Casing name", createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); - createBlockItemRenameFix(builder, v1_5, "Fix Assembly Control Casing name", + createBlockItemRenameFix(builder, v3_0, "Fix Assembly Control Casing name", createRenamer("gtceu:assembly_line_casing", "gtceu:assembly_control_casing")); - createBlockItemRenameFix(builder, v1_5, "Fix Magnalium Turbine Casing name", + createBlockItemRenameFix(builder, v3_0, "Fix Magnalium Turbine Casing name", createRenamer("gtceu:steel_turbine_casing", "gtceu:magnalium_turbine_casing")); - createBlockItemRenameFix(builder, v1_5, "Fix Bricked Bronze Casing name", + createBlockItemRenameFix(builder, v3_0, "Fix Bricked Bronze Casing name", createRenamer("gtceu:bronze_brick_casing", "gtceu:bricked_bronze_casing")); - createBlockItemRenameFix(builder, v1_5, "Fix Bricked Wrought Iron Casing name", + createBlockItemRenameFix(builder, v3_0, "Fix Bricked Wrought Iron Casing name", createRenamer("gtceu:steel_brick_casing", "gtceu:bricked_wrought_iron_casing")); - builder.addFixer(new ItemStackTurbineRotorFix(v1_5)); - builder.addFixer(new ExtruderCastingMoldRemapFix(v1_5)); + builder.addFixer(new ItemStackTurbineRotorFix(v3_0)); // separator - Schema v1_6 = builder.addSchema(1, 6, V1_6::new); - createBlockItemEntityRenameFix(builder, v1_6, "Fix Rotary Hearth Furnace name", + Schema v3_1 = builder.addSchema(3, 1, V3_1::new); + createBlockItemEntityRenameFix(builder, v3_1, "Fix Rotary Hearth Furnace name", createRenamer("gtceu:mega_blast_furnace", "gtceu:rotary_hearth_furnace")); - createBlockItemEntityRenameFix(builder, v1_6, "Fix Bulk Blast Chiller name", + createBlockItemEntityRenameFix(builder, v3_1, "Fix Bulk Blast Chiller name", createRenamer("gtceu:mega_vacuum_freezer", "gtceu:bulk_blast_chiller")); } - private static void createBlockItemRenameFix(DataFixerBuilder builder, Schema schema, String name, + private static void createBlockItemRenameFix(FixedDataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { builder.addFixer(ItemRenameFix.create(schema, name + " for item", renamer)); // BlockRenameFix adds the " for block" and " for block_state" parts builder.addFixer(BlockRenameFix.create(schema, name, renamer)); } - private static void createBlockItemFluidRenameFix(DataFixerBuilder builder, Schema schema, String name, + private static void createBlockItemFluidRenameFix(FixedDataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { createBlockItemRenameFix(builder, schema, name, renamer); builder.addFixer(FluidRenameFix.create(schema, name + " for fluid", renamer)); @@ -219,7 +219,7 @@ private static void createBlockItemFluidRenameFix(DataFixerBuilder builder, Sche * @param oldName the material's old name INCLUDING the namespace * @param newName the material's new name INCLUDING the namespace */ - private static void createMaterialRenameFix(DataFixerBuilder builder, Schema schema, + private static void createMaterialRenameFix(FixedDataFixerBuilder builder, Schema schema, String oldName, String newName) { final UnaryOperator renamer = MaterialRenameHelper.createRenamer(oldName, newName); final String dataFixName = "Fix " + newName + " name"; @@ -228,7 +228,7 @@ private static void createMaterialRenameFix(DataFixerBuilder builder, Schema sch builder.addFixer(MaterialRenameFix.create(schema, dataFixName + " for material", renamer)); } - private static void createBlockItemEntityRenameFix(DataFixerBuilder builder, Schema schema, String name, + private static void createBlockItemEntityRenameFix(FixedDataFixerBuilder builder, Schema schema, String name, UnaryOperator renamer) { createBlockItemRenameFix(builder, schema, name, renamer); builder.addFixer(BlockEntityRenameFix.create(schema, name + " for block_entity", renamer)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_2.java similarity index 99% rename from src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java rename to src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_2.java index 187060e6f99..9992c116977 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_3.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_2.java @@ -20,9 +20,9 @@ import static com.gregtechceu.gtceu.common.datafixer.schemas.V0.*; import static com.mojang.datafixers.DSL.*; -public class V1_3 extends NamespacedSchema { +public class V2_2 extends NamespacedSchema { - public V1_3(int versionKey, Schema parent) { + public V2_2(int versionKey, Schema parent) { super(versionKey, parent); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java similarity index 81% rename from src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java rename to src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java index 1b59d1267cd..1e2c30a2404 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_4.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java @@ -8,11 +8,11 @@ import java.util.function.Supplier; import static com.gregtechceu.gtceu.common.data.machines.GTMachineUtils.ELECTRIC_TIERS; -import static com.gregtechceu.gtceu.common.datafixer.schemas.V1_3.registerSimpleMachine; +import static com.gregtechceu.gtceu.common.datafixer.schemas.V2_2.registerSimpleMachine; -public class V1_4 extends NamespacedSchema { +public class V2_3 extends NamespacedSchema { - public V1_4(int versionKey, Schema parent) { + public V2_3(int versionKey, Schema parent) { super(versionKey, parent); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java similarity index 94% rename from src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java rename to src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java index be543327d48..b4690a66813 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_5.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java @@ -14,9 +14,9 @@ import static com.mojang.datafixers.DSL.*; -public class V1_5 extends NamespacedSchema { +public class V3 extends NamespacedSchema { - public V1_5(int versionKey, Schema parent) { + public V3(int versionKey, Schema parent) { super(versionKey, parent); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_6.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3_1.java similarity index 88% rename from src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_6.java rename to src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3_1.java index ba47483068e..8893b667535 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1_6.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3_1.java @@ -7,9 +7,9 @@ import java.util.Map; import java.util.function.Supplier; -public class V1_6 extends NamespacedSchema { +public class V3_1 extends NamespacedSchema { - public V1_6(int versionKey, Schema parent) { + public V3_1(int versionKey, Schema parent) { super(versionKey, parent); } diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java index abb07da58d6..cb1c251d4bf 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java @@ -2,6 +2,7 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; +import com.gregtechceu.gtceu.common.data.datafixer.GTDataFixers; import com.llamalad7.mixinextras.expression.Definition; import com.llamalad7.mixinextras.expression.Expression; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; @@ -25,6 +26,7 @@ public class CachingStructureManagerMixin { @ModifyExpressionValue(method = "readStructureTag", at = @At("MIXINEXTRAS:EXPRESSION")) private static boolean gtceu$alsoRequireGTDataVersionToBeUpToDate1(boolean original, @Local CompoundTag currentTag) { + if (GTDataFixers.getDataFixer() == null) return original; return original || DataFixHelper.getGTDataVersion(currentTag) < GTCEu.GT_DATA_VERSION; } @@ -34,6 +36,7 @@ public class CachingStructureManagerMixin { @ModifyExpressionValue(method = "readStructureTag", at = @At("MIXINEXTRAS:EXPRESSION")) private static boolean gtceu$alsoRequireGTDataVersionToBeUpToDate2(boolean original, @Local(name = "cachedUpgraded") CompoundTag cachedUpgraded) { + if (GTDataFixers.getDataFixer() == null) return original; return original && cachedUpgraded.getInt(DataFixHelper.GT_DATA_VERSION_TAG) == GTCEu.GT_DATA_VERSION; } From 0dee4a3f7d3397c408164770fe37eb087140bef5 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 13 Oct 2026 19:35:15 +0300 Subject: [PATCH 75/83] IT WORKSSS --- .../common/data/datafixer/GTDataFixers.java | 22 ++--- .../fixes/ItemStackTurbineRotorFix.java | 98 ++++++++++--------- .../fixes/LDLibPayloadWrapperRemovalFix.java | 46 ++++----- .../fixes/TraitHolderificationFix.java | 31 +++--- .../gtceu/common/datafixer/schemas/V2_2.java | 8 +- 5 files changed, 103 insertions(+), 102 deletions(-) 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 index 680a6f9aa64..532ca3cfd87 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -109,10 +109,10 @@ public static void addFixers(FixedDataFixerBuilder builder) { Schema v1 = builder.addSchema(1, V1::new); builder.addFixer(new AddNewChoices(v1, "Added High Pressure Steam Miner", References.BLOCK_ENTITY)); - createBlockItemRenameFix(builder, v1, "Rename RTM Alloy Coil Block", - createRenamer("tungstensteel_coil_block", "rtm_alloy_coil_block")); + createBlockItemRenameFix(builder, v1, "Rename Tungstensteel Coil Block", + createRenamer("gtceu:tungstensteel_coil_block", "gtceu:rtm_alloy_coil_block")); - builder.addFixer(ItemRenameFix.create(v1, "Fix Advanced Nanomuscle Chestplate name", + builder.addFixer(ItemRenameFix.create(v1, "Rename Advanced Nanomuscle Chestplate", createRenamer("gtceu:avanced_nanomuscle_chestplate", "gtceu:advanced_nanomuscle_chestplate"))); builder.addFixer(ItemRenameFix.create(v1, "Rename Tungstensteel Fluid Cell", @@ -175,15 +175,15 @@ public static void addFixers(FixedDataFixerBuilder builder) { createMaterialRenameFix(builder, v3_0, "gtceu:oil_medium", "gtceu:raw_oil"); createMaterialRenameFix(builder, v3_0, "gtceu:palladium_raw", "gtceu:raw_palladium"); - createBlockItemRenameFix(builder, v3_0, "Fix Palladium Substation Casing name", + createBlockItemRenameFix(builder, v3_0, "Rename Palladium Substation Casing", createRenamer("gtceu:palladium_substation", "gtceu:palladium_substation_casing")); - createBlockItemRenameFix(builder, v3_0, "Fix Assembly Control Casing name", + createBlockItemRenameFix(builder, v3_0, "Rename Assembly Control Casing", createRenamer("gtceu:assembly_line_casing", "gtceu:assembly_control_casing")); - createBlockItemRenameFix(builder, v3_0, "Fix Magnalium Turbine Casing name", + createBlockItemRenameFix(builder, v3_0, "Rename Magnalium Turbine Casing", createRenamer("gtceu:steel_turbine_casing", "gtceu:magnalium_turbine_casing")); - createBlockItemRenameFix(builder, v3_0, "Fix Bricked Bronze Casing name", + createBlockItemRenameFix(builder, v3_0, "Rename Bricked Bronze Casing", createRenamer("gtceu:bronze_brick_casing", "gtceu:bricked_bronze_casing")); - createBlockItemRenameFix(builder, v3_0, "Fix Bricked Wrought Iron Casing name", + createBlockItemRenameFix(builder, v3_0, "Rename Bricked Wrought Iron Casing", createRenamer("gtceu:steel_brick_casing", "gtceu:bricked_wrought_iron_casing")); builder.addFixer(new ItemStackTurbineRotorFix(v3_0)); @@ -191,9 +191,9 @@ public static void addFixers(FixedDataFixerBuilder builder) { // separator Schema v3_1 = builder.addSchema(3, 1, V3_1::new); - createBlockItemEntityRenameFix(builder, v3_1, "Fix Rotary Hearth Furnace name", + createBlockItemEntityRenameFix(builder, v3_1, "Rename Rotary Hearth Furnace", createRenamer("gtceu:mega_blast_furnace", "gtceu:rotary_hearth_furnace")); - createBlockItemEntityRenameFix(builder, v3_1, "Fix Bulk Blast Chiller name", + createBlockItemEntityRenameFix(builder, v3_1, "Rename Bulk Blast Chiller", createRenamer("gtceu:mega_vacuum_freezer", "gtceu:bulk_blast_chiller")); } @@ -222,7 +222,7 @@ private static void createBlockItemFluidRenameFix(FixedDataFixerBuilder builder, private static void createMaterialRenameFix(FixedDataFixerBuilder builder, Schema schema, String oldName, String newName) { final UnaryOperator renamer = MaterialRenameHelper.createRenamer(oldName, newName); - final String dataFixName = "Fix " + newName + " name"; + final String dataFixName = "Rename " + oldName; createBlockItemFluidRenameFix(builder, schema, dataFixName, renamer); builder.addFixer(MaterialRenameFix.create(schema, dataFixName + " for material", renamer)); diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java index b00cb6655a4..d52c1518f7d 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java @@ -1,5 +1,7 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; +import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; +import com.mojang.datafixers.types.Type; import net.minecraft.util.datafix.fixes.References; import net.minecraft.util.datafix.schemas.NamespacedSchema; @@ -8,7 +10,6 @@ import com.mojang.datafixers.util.Pair; import java.util.Objects; -import java.util.Optional; public class ItemStackTurbineRotorFix extends DataFix { @@ -20,58 +21,67 @@ public ItemStackTurbineRotorFix(Schema outputSchema) { } public TypeRewriteRule makeRule() { - var type = this.getInputSchema().getType(References.ITEM_STACK); + Type inputType = this.getInputSchema().getType(References.ITEM_STACK); var itemNameType = DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString()); if (!Objects.equals(this.getInputSchema().getType(References.ITEM_NAME), itemNameType)) { throw new IllegalStateException("item name type is not what was expected."); } + var materialNameType = DSL.named(GTReferences.MATERIAL_NAME.typeName(), NamespacedSchema.namespacedString()); + if (!Objects.equals(this.getInputSchema().getType(GTReferences.MATERIAL_NAME), materialNameType)) { + throw new IllegalStateException("material name type is not what was expected."); + } var itemIdFinder = DSL.fieldFinder("id", itemNameType); - var tagFinder = type.findField("tag"); - var partStatsFinder = tagFinder.type().findField("GT.PartStats"); - var materialFinder = DSL.fieldFinder("Material", NamespacedSchema.namespacedString()); - - return TypeRewriteRule.seq( - this.fixTypeEverywhereTyped("ItemStackTurbineRotorFix", type, (typed) -> { - var itemName = typed.getOptional(itemIdFinder); - if (itemName.isEmpty() || !Objects.equals(itemName.get().getSecond(), OLD_TURBINE_ROTOR_ITEM_ID)) { - return typed; - } - Typed tag = typed.getOrCreateTyped(tagFinder); - Typed partStats = tag.getOrCreateTyped(partStatsFinder); + OpticFinder tagFinder = inputType.findField("tag"); + OpticFinder partStatsFinder = tagFinder.type().findField("GT.PartStats"); + var materialFinder = DSL.fieldFinder("Material", materialNameType); - // move the Damage nbt field to the root of nbt - var damage = partStats.getOrCreate(DSL.remainderFinder()) - .get("Damage").result(); - if (damage.isPresent()) { - typed = typed.update(DSL.remainderFinder(), dynamic -> { - return dynamic.set("Damage", damage.get()); - }); - } + TypeRewriteRule first = this.fixTypeEverywhereTyped("ItemStackTurbineRotorFix", inputType, typed -> { + final var itemName = typed.getOptional(itemIdFinder); + if (itemName.isEmpty() || !Objects.equals(itemName.get().getSecond(), OLD_TURBINE_ROTOR_ITEM_ID)) { + return typed; + } + Typed tag = typed.getOrCreateTyped(tagFinder); + Typed partStats = tag.getOrCreateTyped(partStatsFinder); - Optional material = partStats.getOptional(materialFinder); - if (material.isEmpty()) { - // if it doesn't have a material (somehow??), make it an iron turbine rotor by default. - return typed.set(itemIdFinder, - Pair.of(References.ITEM_NAME.typeName(), DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID)); - } + // move the Damage nbt field to the root nbt tag + var damage = partStats.getOrCreate(DSL.remainderFinder()).get("Damage").result(); + if (damage.isPresent()) { + tag = tag.update(DSL.remainderFinder(), dynamic -> { + dynamic = dynamic.update("GT.PartStats", d -> d.remove("Damage")); + return dynamic.set("Damage", damage.get()); + }); + typed = typed.set(tagFinder, tag); + } - String materialName = material.get(); - if (materialName.indexOf(':') == -1) { - // compatibility for very old turbine rotors we might come across - // shouldn't happen but better safe than sorry - materialName = "gtceu:" + materialName; - } - // All turbine rotor items' names follow a specific pattern and are registered under the material's - // namespace so this *should* be safe - return typed.set(itemIdFinder, - Pair.of(References.ITEM_NAME.typeName(), materialName + "_turbine_rotor")); + var material = partStats.getOptional(materialFinder); + if (material.isEmpty()) { + // if it doesn't have a material (somehow??), make it an iron turbine rotor by default. + return typed.set(itemIdFinder, + Pair.of(References.ITEM_NAME.typeName(), DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID)); + } - }), - this.fixTypeEverywhere("Rename blank Turbine Rotor item", itemNameType, - ops -> itemName -> itemName.mapSecond(id -> { - return Objects.equals(id, OLD_TURBINE_ROTOR_ITEM_ID) ? - DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID : id; - }))); + // `material` is (material_name, ) + String materialName = material.get().getSecond(); + if (materialName.indexOf(':') == -1) { + // compatibility for very old turbine rotors we might come across + // shouldn't happen but better safe than sorry + materialName = "gtceu:" + materialName; + } + // All turbine rotor items' names follow a specific pattern and are registered under the material's + // namespace so this *should* be safe + typed = typed.set(itemIdFinder, + Pair.of(References.ITEM_NAME.typeName(), materialName + "_turbine_rotor")); + return typed; + }); + TypeRewriteRule second = this.writeFixAndRead("Remove GT.PartStats NBT field", + inputType, this.getOutputSchema().getType(References.ITEM_STACK), + dynamic -> dynamic.update("tag", tag -> tag.remove("GT.PartStats"))); + TypeRewriteRule third = this.fixTypeEverywhere("Rename blank Turbine Rotor item", itemNameType, + ops -> itemName -> itemName.mapSecond(id -> { + return Objects.equals(id, OLD_TURBINE_ROTOR_ITEM_ID) ? + DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID : id; + })); + return TypeRewriteRule.seq(first, second, third); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java index 67d5350dbd8..710114a7520 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java @@ -1,5 +1,6 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; +import com.mojang.serialization.OptionalDynamic; import net.minecraft.util.datafix.fixes.References; import com.mojang.datafixers.*; @@ -7,6 +8,8 @@ import com.mojang.datafixers.types.Type; import com.mojang.serialization.Dynamic; +import java.util.Optional; + public class LDLibPayloadWrapperRemovalFix extends DataFix { public LDLibPayloadWrapperRemovalFix(Schema outputSchema) { @@ -21,7 +24,7 @@ protected TypeRewriteRule makeRule() { LDLibPayloadWrapperRemovalFix::fix); } - private static Dynamic fix(Dynamic dynamic) { + private static Dynamic fix(Dynamic dynamic) { var stream = dynamic.asStreamOpt().result(); if (stream.isPresent()) { // if the entry is a list, attempt to apply the fixer to its elements @@ -38,33 +41,20 @@ private static Dynamic fix(Dynamic dynamic) { *

    * Reading the code implies only array-like objects get the `{ "t": type, "p": value }` treatment. */ - public static Dynamic stripLDLibPayloadWrapper(Dynamic dynamic) { - final Dynamic tKey = dynamic.createString("t"); - final Dynamic pKey = dynamic.createString("p"); - - return DataFixUtils.orElse(dynamic.getMapValues().result() - .map(map -> { - // only allow entries with only the specific keys we expect so we don't accidentally touch other - // stuff - // tag.contains("p") && tag.contains("t") - if (map.size() == 2 && map.containsKey(pKey) && map.containsKey(tKey)) { - // return tag.get("p") - return map.get(pKey); - } else if (map.size() == 1) { - // I don't think this one is something that can happen, but I'm not sure about that, so - // it's staying. - // - // As far as I can see, the only format that's used by LDLib is the above - // `{ "t": type, "p": value }` one. + public static Dynamic stripLDLibPayloadWrapper(Dynamic dynamic) { + // only allow entries with *only* the specific keys we expect so we don't accidentally touch other stuff + var asMap = dynamic.asMapOpt().result(); + if (asMap.isEmpty() || asMap.get().count() != 2) { + return dynamic; + } - var tValue = map.get(tKey).getMapValues().result(); - if (tValue.isPresent()) { - return tValue.get().get(pKey); - } - } - return dynamic.createMap(map); - }) - // also apply the fixer to all child objects - .map(LDLibPayloadWrapperRemovalFix::fix), dynamic); + Optional> tElement = dynamic.get("t").result(); + Optional> pElement = dynamic.get("p").result(); + // equivalent to `tag.contains("p") && tag.contains("t")` + if (tElement.isPresent() && pElement.isPresent()) { + return LDLibPayloadWrapperRemovalFix.fix(pElement.get()); + } else { + return LDLibPayloadWrapperRemovalFix.fix(dynamic); + } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java index 80dd84aaf28..03546ea28bb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/TraitHolderificationFix.java @@ -6,26 +6,22 @@ import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.Type; import com.mojang.datafixers.util.Either; -import com.mojang.datafixers.util.Unit; import java.util.function.Function; -import static com.mojang.datafixers.DSL.*; - public class TraitHolderificationFix extends DataFix { public TraitHolderificationFix(Schema outputSchema) { - super(outputSchema, true); + super(outputSchema, false); } @Override protected TypeRewriteRule makeRule() { - Type blockEntityIn = this.getInputSchema().getType(References.BLOCK_ENTITY); - Type blockEntityOut = this.getOutputSchema().getType(References.BLOCK_ENTITY); + Type blockEntityType = this.getOutputSchema().getType(References.BLOCK_ENTITY); - return this.fixTypeEverywhereTyped("TraitHolderDataFix", blockEntityIn, blockEntityOut, typed -> { + return this.fixTypeEverywhereTyped("TraitHolderificationFix", blockEntityType, typed -> { // move the auto output trait first - typed = typed.update(remainderFinder(), dynamic -> { + typed = typed.update(DSL.remainderFinder(), dynamic -> { final var field = dynamic.get("autoOutput").result(); if (field.isPresent()) { dynamic = dynamic.update("traitHolder", val -> val.set("autoOutput", field.get())); @@ -47,16 +43,19 @@ protected TypeRewriteRule makeRule() { } private static Typed moveItemHandlerField(Typed typed, String oldName, String newName) { - return moveItemHandlerFieldHelper(typed, oldName, newName, typed.getType().findFieldType(oldName)) + var field = typed.getType().findFieldTypeOpt(oldName); + if (field.isEmpty()) return typed; + + return moveItemHandlerFieldHelper(typed, oldName, newName, field.get()) .update(DSL.remainderFinder(), dynamic -> dynamic.remove(oldName)); } private static Typed moveItemHandlerFieldHelper(Typed typed, String oldName, String newName, Type fieldType) { - Type> type = DSL.optional(DSL.field(oldName, fieldType)); - Type> type1 = optional(field(newName, field("storage", fieldType))); + var oldField = DSL.optional(DSL.field(oldName, fieldType)); + var newField = DSL.optional(DSL.field(newName, DSL.field("storage", fieldType))); - return typed.update(type.finder(), type1, Function.identity()); + return typed.update(oldField.finder(), newField, Function.identity()); } private static Typed copyFieldToTraitHolder(Typed typed, String name) { @@ -64,13 +63,15 @@ private static Typed copyFieldToTraitHolder(Typed typed, String name) { } private static Typed copyFieldToTraitHolder(Typed typed, String oldName, String newName) { - return copyFieldToTraitHolderHelper(typed, oldName, newName, typed.getType().findFieldType(oldName)); + var field = typed.getType().findFieldTypeOpt(oldName); + if (field.isEmpty()) return typed; + return copyFieldToTraitHolderHelper(typed, oldName, newName, field.get()); } private static Typed copyFieldToTraitHolderHelper(Typed typed, String oldName, String newName, Type fieldType) { - Type> type = DSL.optional(DSL.field(oldName, fieldType)); - Type, Unit>> type1 = optional(field("traitHolder", optional(field(newName, fieldType)))); + var type = DSL.optional(DSL.field(oldName, fieldType)); + var type1 = DSL.optional(DSL.field("traitHolder", DSL.optional(DSL.field(newName, fieldType)))); return typed.update(type.finder(), type1, field -> Either.left(field)); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_2.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_2.java index 9992c116977..6711aa719cb 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_2.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_2.java @@ -423,10 +423,10 @@ protected static TypeTemplate traitHolder(Schema schema) { "traitHolder", optionalFields( // TODO I'm not sure if this is all of the item/fluid fields? - add missing ones if not "batterySlot", notifiableItemHandler(schema), - or( - optionalFields("circuit", notifiableItemHandler(schema)), - optionalFields("circuitSlot", notifiableItemHandler(schema)) - ) + optional(or( + fields("circuit", notifiableItemHandler(schema)), + fields("circuitSlot", notifiableItemHandler(schema)) + )) ) ); } From 6be3b51d4ebaf8749c19a6e30f308fb6a5873d8c Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Tue, 13 Oct 2026 19:55:31 +0300 Subject: [PATCH 76/83] datagen + spotless --- ...t_furnace.json => bulk_blast_chiller.json} | 72 +++++++++---------- ...reezer.json => rotary_hearth_furnace.json} | 72 +++++++++---------- .../resources/assets/gtceu/lang/en_ud.json | 25 ++++--- .../resources/assets/gtceu/lang/en_us.json | 25 ++++--- ...m_freezer.json => bulk_blast_chiller.json} | 18 ++--- ...urnace.json => rotary_hearth_furnace.json} | 18 ++--- .../gtceu/models/item/bulk_blast_chiller.json | 3 + .../gtceu/models/item/mega_blast_furnace.json | 3 - .../models/item/mega_vacuum_freezer.json | 3 - .../models/item/rotary_hearth_furnace.json | 3 + .../gtceu/models/item/turbine_rotor.json | 6 -- .../java/com/gregtechceu/gtceu/GTCEu.java | 1 - .../api/datafixer/FixedDataFixerBuilder.java | 19 +++-- .../api/datafixer/FixedDataFixerUpper.java | 3 +- .../common/data/datafixer/GTDataFixers.java | 4 +- .../fixes/ItemStackTurbineRotorFix.java | 3 +- .../fixes/LDLibPayloadWrapperRemovalFix.java | 1 - .../gtceu/common/datafixer/schemas/V1.java | 3 +- .../gtceu/common/datafixer/schemas/V2_3.java | 3 +- .../gtceu/common/datafixer/schemas/V3.java | 2 +- .../gtceu/common/datafixer/schemas/V3_1.java | 3 +- .../CachingStructureManagerMixin.java | 12 +++- .../gtceu/data/lang/LangHandler.java | 6 ++ .../gtceu/data/recipe/misc/GCYMRecipes.java | 4 +- 24 files changed, 163 insertions(+), 149 deletions(-) rename src/generated/resources/assets/gtceu/blockstates/{mega_blast_furnace.json => bulk_blast_chiller.json} (54%) rename src/generated/resources/assets/gtceu/blockstates/{mega_vacuum_freezer.json => rotary_hearth_furnace.json} (53%) rename src/generated/resources/assets/gtceu/models/block/machine/{mega_vacuum_freezer.json => bulk_blast_chiller.json} (68%) rename src/generated/resources/assets/gtceu/models/block/machine/{mega_blast_furnace.json => rotary_hearth_furnace.json} (68%) create mode 100644 src/generated/resources/assets/gtceu/models/item/bulk_blast_chiller.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/mega_blast_furnace.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/mega_vacuum_freezer.json create mode 100644 src/generated/resources/assets/gtceu/models/item/rotary_hearth_furnace.json delete mode 100644 src/generated/resources/assets/gtceu/models/item/turbine_rotor.json 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/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/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 251990ace3f..70c5f463185 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -161,6 +161,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.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ɔɹɐɥƆ", @@ -833,8 +834,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", @@ -1085,6 +1084,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ᴚ", @@ -1154,6 +1154,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Ǝ ǝɥ⟘", @@ -1757,7 +1758,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ɐƆ", @@ -4138,7 +4138,6 @@ "gui.gtceu.share_tank.desc.0": "¡ɹǝɟɟnq uıɥʇıʍ suɹǝʇʇɐd ןןɐ ɥʇıʍ ˙ɔʇǝ/sǝssɐb/spınןɟ pǝʇɹǝsuı sǝɹɐɥS", "gui.gtceu.share_tank.title": "ʎɹoʇuǝʌuI ʞuɐ⟘ pǝɹɐɥS", "gui.widget.incrementButton.default_tooltip": "ʇunoɯɐ ǝɥʇ ǝbuɐɥɔ oʇ ɥʇoq ɹo ןɹʇƆ 'ʇɟıɥS pןoH", - "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Ɐ", @@ -4394,6 +4393,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", @@ -4660,6 +4660,7 @@ "item.gtceu.naquadah_boule.tooltip": "ʇınɔɹıƆ ʍɐᴚㄥ§", "item.gtceu.naquadah_wafer": "ɹǝɟɐM pǝdop-ɥɐpɐnbɐN", "item.gtceu.naquadah_wafer.tooltip": "ʇı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", @@ -4689,7 +4690,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ıᗡ ıɹʇǝԀ", @@ -4790,6 +4790,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ıɟǝᴚ", @@ -4844,7 +4845,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Ǝ", @@ -4855,6 +4855,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", @@ -4919,7 +4920,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Ǝ", @@ -4930,6 +4930,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ı⟘", @@ -5055,8 +5056,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ıԀ ɔıɹʇɔǝןƎ ΛƎ∩", @@ -5173,7 +5175,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ǝɹ⅁", @@ -5606,7 +5607,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Ɔ ᗺƆԀ", @@ -5673,6 +5673,7 @@ "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ןɐǝᴚ", @@ -5953,10 +5954,7 @@ "metaitem.terminal.tooltip": "ʞɹoʍ poob ǝʞɐɯ sןooʇ dɹɐɥS", "metaitem.terminal.tooltip.creative": "ǝpoW ǝʌıʇɐǝɹƆq§", "metaitem.terminal.tooltip.hardware": "%d :ǝɹɐʍpɹɐHɐ§", - "metaitem.tool.tooltip.durability": "%d / %dɐ§ :ʎʇıןıqɐɹnᗡɟ§", "metaitem.tool.tooltip.primary_material": "%sǝ§ :ןɐıɹǝʇɐWɟ§", - "item.gtceu.turbine_rotor.tooltip.efficiency": "%d%%6§ :ʎɔuǝıɔıɟɟƎ ǝuıqɹn⟘", - "item.gtceu.turbine_rotor.tooltip.power": "%d%%6§ :ɹǝʍoԀ ǝuıqɹn⟘", "metaitem.tricorder_scanner.tooltip": "ɹǝpɹoɔıɹ⟘", "monitor.gui.title.argb": ":ᗺ⅁ᴚⱯ", "monitor.gui.title.back": "ʞɔɐᗺ", @@ -6094,6 +6092,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 1f1273002b8..52b02e1993c 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -161,6 +161,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.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", @@ -833,8 +834,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", @@ -1085,6 +1084,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", @@ -1154,6 +1154,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", @@ -1757,7 +1758,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", @@ -4138,7 +4138,6 @@ "gui.gtceu.share_tank.desc.0": "Shares inserted fluids/gasses/etc. with all patterns within buffer!", "gui.gtceu.share_tank.title": "Shared Tank Inventory", "gui.widget.incrementButton.default_tooltip": "Hold Shift, Ctrl or both to change the amount", - "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", @@ -4394,6 +4393,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", @@ -4660,6 +4660,7 @@ "item.gtceu.naquadah_boule.tooltip": "§7Raw Circuit", "item.gtceu.naquadah_wafer": "Naquadah-doped Wafer", "item.gtceu.naquadah_wafer.tooltip": "§7Raw Circuit", + "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", @@ -4689,7 +4690,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", @@ -4790,6 +4790,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", @@ -4844,7 +4845,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)", @@ -4855,6 +4855,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", @@ -4919,7 +4920,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)", @@ -4930,6 +4930,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", @@ -5055,8 +5056,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", @@ -5173,7 +5175,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", @@ -5606,7 +5607,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", @@ -5673,6 +5673,7 @@ "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", @@ -5953,10 +5954,7 @@ "metaitem.terminal.tooltip": "Sharp tools make good work", "metaitem.terminal.tooltip.creative": "§bCreative Mode", "metaitem.terminal.tooltip.hardware": "§aHardware: %d", - "metaitem.tool.tooltip.durability": "§fDurability: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fMaterial: §e%s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "Turbine Efficiency: §9%d%%", - "item.gtceu.turbine_rotor.tooltip.power": "Turbine Power: §9%d%%", "metaitem.tricorder_scanner.tooltip": "Tricorder", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Back", @@ -6094,6 +6092,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/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/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/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/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/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/main/java/com/gregtechceu/gtceu/GTCEu.java b/src/main/java/com/gregtechceu/gtceu/GTCEu.java index 0297a046274..da3d6cc880d 100644 --- a/src/main/java/com/gregtechceu/gtceu/GTCEu.java +++ b/src/main/java/com/gregtechceu/gtceu/GTCEu.java @@ -17,7 +17,6 @@ import net.minecraftforge.fml.loading.FMLPaths; import net.minecraftforge.server.ServerLifecycleHooks; -import com.mojang.datafixers.DataFixUtils; import dev.emi.emi.config.EmiConfig; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java index 402c49cfa8a..615a8047b72 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerBuilder.java @@ -21,6 +21,7 @@ /// 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; @@ -36,9 +37,11 @@ public Schema addSchema(final int version, final BiFunction 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 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; @@ -52,7 +55,8 @@ 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); + LOGGER.warn("Ignored fix registered for version: {} as the DataVersion of the game is: {}", version, + dataVersion); return; } @@ -70,7 +74,8 @@ public DataFixer buildOptimized(final Set requiredTypes, fina final Instant started = Instant.now(); final List> futures = Lists.newArrayList(); - final Set requiredTypeNames = requiredTypes.stream().map(DSL.TypeReference::typeName).collect(Collectors.toSet()); + final Set requiredTypeNames = requiredTypes.stream().map(DSL.TypeReference::typeName) + .collect(Collectors.toSet()); final IntBidirectionalIterator iterator = fixerUpper.fixerVersions().iterator(); while (iterator.hasNext()) { @@ -94,13 +99,15 @@ public DataFixer buildOptimized(final Set requiredTypes, fina } CompletableFuture.allOf(futures.toArray(CompletableFuture[]::new)).thenAccept(ignored -> { - LOGGER.info("{} Datafixer optimizations took {} milliseconds", futures.size(), Duration.between(started, Instant.now()).toMillis()); + 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)); + 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 index 5c6fe4f9951..57e851b75a2 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerUpper.java +++ b/src/main/java/com/gregtechceu/gtceu/api/datafixer/FixedDataFixerUpper.java @@ -23,7 +23,8 @@ public class FixedDataFixerUpper extends DataFixerUpper { private final List globalList; private final Long2ObjectMap rules = Long2ObjectMaps.synchronize(new Long2ObjectOpenHashMap<>()); - protected FixedDataFixerUpper(Int2ObjectSortedMap schemas, List globalList, IntSortedSet fixerVersions) { + protected FixedDataFixerUpper(Int2ObjectSortedMap schemas, List globalList, + IntSortedSet fixerVersions) { super(schemas, globalList, fixerVersions); this.globalList = globalList; } 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 index 532ca3cfd87..941b33819f5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -32,7 +32,8 @@ import java.util.regex.Pattern; /** - * Register new datafixers in {@link #addFixers(FixedDataFixerBuilder)}. Remember to bump {@link GTCEu#GT_DATA_VERSION} in + * 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. * *

    @@ -195,7 +196,6 @@ public static void addFixers(FixedDataFixerBuilder builder) { createRenamer("gtceu:mega_blast_furnace", "gtceu:rotary_hearth_furnace")); createBlockItemEntityRenameFix(builder, v3_1, "Rename Bulk Blast Chiller", createRenamer("gtceu:mega_vacuum_freezer", "gtceu:bulk_blast_chiller")); - } private static void createBlockItemRenameFix(FixedDataFixerBuilder builder, Schema schema, String name, diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java index d52c1518f7d..363b4a20cd5 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java @@ -1,12 +1,13 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; -import com.mojang.datafixers.types.Type; + import net.minecraft.util.datafix.fixes.References; import net.minecraft.util.datafix.schemas.NamespacedSchema; import com.mojang.datafixers.*; import com.mojang.datafixers.schemas.Schema; +import com.mojang.datafixers.types.Type; import com.mojang.datafixers.util.Pair; import java.util.Objects; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java index 710114a7520..1aaed7eab77 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/LDLibPayloadWrapperRemovalFix.java @@ -1,6 +1,5 @@ package com.gregtechceu.gtceu.common.datafixer.fixes; -import com.mojang.serialization.OptionalDynamic; import net.minecraft.util.datafix.fixes.References; import com.mojang.datafixers.*; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java index bda245a8e5a..fadc05354e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V1.java @@ -1,8 +1,9 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java index 1e2c30a2404..409e5c89675 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V2_3.java @@ -1,8 +1,9 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java index b4690a66813..13d6e71d00b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java @@ -3,11 +3,11 @@ import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; import net.minecraft.util.datafix.fixes.References; +import net.minecraft.util.datafix.schemas.NamespacedSchema; import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.Hook; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3_1.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3_1.java index 8893b667535..6f2aa64e18f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3_1.java +++ b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3_1.java @@ -1,8 +1,9 @@ package com.gregtechceu.gtceu.common.datafixer.schemas; +import net.minecraft.util.datafix.schemas.NamespacedSchema; + import com.mojang.datafixers.schemas.Schema; import com.mojang.datafixers.types.templates.TypeTemplate; -import net.minecraft.util.datafix.schemas.NamespacedSchema; import java.util.Map; import java.util.function.Supplier; diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java index cb1c251d4bf..5d2c52ec164 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java @@ -3,13 +3,15 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.datafixer.DataFixHelper; import com.gregtechceu.gtceu.common.data.datafixer.GTDataFixers; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; + import com.llamalad7.mixinextras.expression.Definition; import com.llamalad7.mixinextras.expression.Expression; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.sugar.Local; import com.mojang.datafixers.DataFixer; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; import org.embeddedt.modernfix.structure.CachingStructureManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -40,7 +42,11 @@ public class CachingStructureManagerMixin { return original && cachedUpgraded.getInt(DataFixHelper.GT_DATA_VERSION_TAG) == GTCEu.GT_DATA_VERSION; } - @Inject(method = "readStructureTag", at = @At(value = "INVOKE", target = "Lnet/minecraft/nbt/CompoundTag;putInt(Ljava/lang/String;I)V", remap = true, ordinal = 1)) + @Inject(method = "readStructureTag", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/nbt/CompoundTag;putInt(Ljava/lang/String;I)V", + remap = true, + ordinal = 1)) private static void gtceu$addGTDataVersion(ResourceLocation location, DataFixer datafixer, InputStream stream, CallbackInfoReturnable cir, @Local(name = "currentTag") CompoundTag currentTag) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index 73b038b8391..81073f2212f 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -623,6 +623,12 @@ public static void init(RegistrateLangProvider provider) { replace(provider, "item.gtceu.bucket", "%s Bucket"); + replace(provider, "block.gtceu.heavy_oil", "Heavy Oil"); + replace(provider, "block.gtceu.light_oil", "Light Oil"); + replace(provider, "block.gtceu.raw_oil", "Raw Oil"); + replace(provider, "block.gtceu.oil", "Oil"); + replace(provider, "block.gtceu.creosote", "Creosote"); + replace(provider, GTBlocks.BATTERY_EMPTY_TIER_I.get().getDescriptionId(), "Empty Tier I Capacitor"); replace(provider, GTBlocks.BATTERY_LAPOTRONIC_EV.get().getDescriptionId(), "EV Lapotronic Capacitor"); replace(provider, GTBlocks.BATTERY_LAPOTRONIC_IV.get().getDescriptionId(), "IV Lapotronic Capacitor"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java index 269c06402fc..f1b7fd634b4 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/misc/GCYMRecipes.java @@ -104,8 +104,8 @@ private static void registerMultiblockControllerRecipes(Consumer VanillaRecipeHelper.addShapedRecipe(provider, true, "blast_alloy_smelter", BLAST_ALLOY_SMELTER.asStack(), "TCT", "WXW", "TCT", 'C', CustomTags.EV_CIRCUITS, 'T', new MaterialEntry(plate, TantalumCarbide), 'W', new MaterialEntry(cableGtSingle, Aluminium), 'X', ALLOY_SMELTER[EV].asStack()); - VanillaRecipeHelper.addShapedRecipe(provider, true, "rotary_hearth_furnace", ROTARY_HEARTH_FURNACE.asStack(), "PCP", - "FSF", "DWD", 'C', ZPM_CIRCUITS, 'S', GTMultiMachines.ELECTRIC_BLAST_FURNACE.asStack(), 'F', + VanillaRecipeHelper.addShapedRecipe(provider, true, "rotary_hearth_furnace", ROTARY_HEARTH_FURNACE.asStack(), + "PCP", "FSF", "DWD", 'C', ZPM_CIRCUITS, 'S', GTMultiMachines.ELECTRIC_BLAST_FURNACE.asStack(), 'F', FIELD_GENERATOR_ZPM.asStack(), 'P', new MaterialEntry(spring, Naquadah), 'D', new MaterialEntry(plateDense, NaquadahAlloy), 'W', new MaterialEntry(wireGtQuadruple, RutheniumTriniumAmericiumNeutronate)); From 01b55bcad4f1106c9d532bffb2dfd8c22b57f618 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Thu, 15 Oct 2026 15:03:19 +0300 Subject: [PATCH 77/83] Change the config option's wording --- src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 89cc6cdf720..317dabc9971 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -188,8 +188,8 @@ public static class RecipeConfigs { public static class CompatibilityConfigs { @Configurable - @Configurable.Comment({ "Whether to run datafixers on world load.", - "Do note that mods like ModernFix will interfere with this.", + @Configurable.Comment({ "Whether to apply datafixers when necessary.", + "Do note that mods like ModernFix might interfere with this.", "Default: true" }) @Configurable.UpdateRestriction(UpdateRestrictions.MAIN_MENU) public boolean doDataFixers = true; From 7c87849c4c4302102e30ba3ca892d0bb62e680be Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Thu, 15 Oct 2026 23:40:53 +0300 Subject: [PATCH 78/83] Add developer doc on datafixers --- .../Development/General-Topics/Datafixers.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/content/Development/General-Topics/Datafixers.md 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). From 316aa8d6d8e28323f10c91a678f191a88d3d4cc4 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Thu, 15 Oct 2026 23:56:56 +0300 Subject: [PATCH 79/83] requested changes --- src/main/java/com/gregtechceu/gtceu/api/data/tag/TagPrefix.java | 2 +- .../gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 f740a9d1a00..5cdd970997c 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 @@ -714,7 +714,7 @@ public static TagPrefix get(String name) { // made of 8 Turbine Blades. public static final TagPrefix turbineRotor = new TagPrefix(GTCEu.id("turbine_rotor")) .langValue("%s Turbine Rotor") - .materialAmount(GTValues.M * 92 / 9) + .materialAmount(GTValues.M * 736 / 9) .materialIconType(MaterialIconType.turbineRotor) .unificationEnabled(true) .generateItem(true) 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 index 941b33819f5..60d85e372c7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -96,7 +96,7 @@ public static void init() {} } } catch (Exception ex) { DataFixHelper.LOGGER.warn( - "Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft build is hosed."); + "Failed to initialize! Either someone stopped DFU from initializing, or this Minecraft instance is broken."); DataFixHelper.LOGGER.warn("Using no-op implementation."); DataFixHelper.LOGGER.warn("Full error: ", ex); From 5a3674630793381c7dd635d67075f6c47be097be Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 24 Oct 2026 11:19:35 +0300 Subject: [PATCH 80/83] Add comment on the ModernFix structure cache mixin --- .../datafixer/modernfix/CachingStructureManagerMixin.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java index 5d2c52ec164..20031b1cee0 100644 --- a/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java +++ b/src/main/java/com/gregtechceu/gtceu/core/mixins/datafixer/modernfix/CachingStructureManagerMixin.java @@ -20,6 +20,13 @@ import java.io.InputStream; +/** + * Mixin to ModernFix's structure cache to make it account for GT's data version as well as the vanilla one. + * + * @author screret + * @implNote This is the approach recommended by EmbeddedT.
    + * (He couldn't figure out a better way to do this than this relatively small mixin) + */ @Mixin(value = CachingStructureManager.class, remap = false) public class CachingStructureManagerMixin { From 5573026dc5a76956c5bce590120727b7df639dd3 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 24 Oct 2026 11:35:14 +0300 Subject: [PATCH 81/83] Revert "Replace the single turbine rotor item with per-material items" This reverts commit 70c62265 --- .../resources/assets/gtceu/lang/en_ud.json | 3 + .../resources/assets/gtceu/lang/en_us.json | 3 + .../material/info/MaterialIconType.java | 1 - .../gtceu/api/data/tag/TagPrefix.java | 26 ++--- .../api/item/component/IMaterialPartItem.java | 9 +- .../gtceu/common/data/GTItems.java | 7 ++ .../gtceu/common/data/GTMaterials.java | 2 - .../common/data/datafixer/GTDataFixers.java | 6 +- .../fixes/ItemStackTurbineRotorFix.java | 88 --------------- .../gtceu/common/datafixer/schemas/V3.java | 40 ------- .../gtceu/common/item/TurbineRotorItem.java | 52 --------- .../item/behavior/TurbineRotorBehaviour.java | 98 +++++++++++++++++ .../part/RotorHolderPartMachine.java | 69 ++++++------ .../trait/customlogic/ArcFurnaceLogic.java | 100 +++++++++++++++--- .../trait/customlogic/MaceratorLogic.java | 95 ++++++++++++++--- .../gtceu/data/lang/LangHandler.java | 10 +- .../recipe/generated/PartsRecipeHandler.java | 9 +- .../recipeviewer/emi/GTEMIPlugin.java | 2 + .../recipeviewer/jei/GTJEIPlugin.java | 1 + .../resources/assets/gtceu/lang/de_de.json | 4 +- .../resources/assets/gtceu/lang/ja_jp.json | 4 +- .../resources/assets/gtceu/lang/pt_br.json | 4 +- .../resources/assets/gtceu/lang/ru_ru.json | 4 +- .../resources/assets/gtceu/lang/uk_ua.json | 4 +- .../resources/assets/gtceu/lang/zh_cn.json | 4 +- .../resources/assets/gtceu/lang/zh_tw.json | 4 +- .../material_sets/dull/turbine_rotor.json | 8 -- .../item/material_sets/dull/turbine_rotor.png | Bin 493 -> 0 bytes .../dull/turbine_rotor_overlay.png | Bin 216 -> 0 bytes .../dull/turbine_rotor_secondary.png | Bin 521 -> 0 bytes src/main/resources/gtceu.mixins.json | 4 +- .../electric/LargeSteamTurbineTest.java | 53 ++++++---- 32 files changed, 387 insertions(+), 327 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java delete mode 100644 src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java create mode 100644 src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java delete mode 100644 src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json delete mode 100644 src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor.png delete mode 100644 src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_overlay.png delete mode 100644 src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_secondary.png diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 8d5e721b531..03eff79ee71 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -5963,7 +5963,10 @@ "metaitem.terminal.tooltip": "ʞɹoʍ poob ǝʞɐɯ sןooʇ dɹɐɥS", "metaitem.terminal.tooltip.creative": "ǝpoW ǝʌıʇɐǝɹƆq§", "metaitem.terminal.tooltip.hardware": "%d :ǝɹɐʍpɹɐHɐ§", + "metaitem.tool.tooltip.durability": "%d / %dɐ§ :ʎʇıןıqɐɹnᗡɟ§", "metaitem.tool.tooltip.primary_material": "%sǝ§ :ןɐıɹǝʇɐWɟ§", + "metaitem.tool.tooltip.rotor.efficiency": "%d%%6§ :ʎɔuǝıɔıɟɟƎ ǝuıqɹn⟘", + "metaitem.tool.tooltip.rotor.power": "%d%%6§ :ɹǝʍoԀ ǝuıqɹn⟘", "metaitem.tricorder_scanner.tooltip": "ɹǝpɹoɔıɹ⟘", "module.gtceu.advanced_jetpack": "ɹǝʇsnɹɥ⟘ ɔıɹʇɔǝןƎ pǝɔuɐʌpⱯ", "module.gtceu.advanced_jetpack.description": "˙)ǝןnpoɯ ʎɹǝʇʇɐq ɐ sǝɹınbǝɹ( pǝǝds xㄣ˙ᄅ ɹoɟ ʇɥbıןℲ ǝʌıʇɐǝɹƆ buıɹnp ʇuıɹdS ˙buıʇuıɹds ǝןıɥʍ ʇ/∩Ǝ %2$s ɹo 'ʇ/∩Ǝ %1$s ɹoɟ ʇsnɹɥʇ sǝpıʌoɹԀ", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index de64b9fb370..33b30ba11e7 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -5963,7 +5963,10 @@ "metaitem.terminal.tooltip": "Sharp tools make good work", "metaitem.terminal.tooltip.creative": "§bCreative Mode", "metaitem.terminal.tooltip.hardware": "§aHardware: %d", + "metaitem.tool.tooltip.durability": "§fDurability: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fMaterial: §e%s", + "metaitem.tool.tooltip.rotor.efficiency": "Turbine Efficiency: §9%d%%", + "metaitem.tool.tooltip.rotor.power": "Turbine Power: §9%d%%", "metaitem.tricorder_scanner.tooltip": "Tricorder", "module.gtceu.advanced_jetpack": "Advanced Electric Thruster", "module.gtceu.advanced_jetpack.description": "Provides thrust for %1$s EU/t, or %2$s EU/t while sprinting. Sprint during Creative Flight for 2.4x speed (requires a battery module).", diff --git a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java index ff8aa3faac2..ac31094570c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java +++ b/src/main/java/com/gregtechceu/gtceu/api/data/chemical/material/info/MaterialIconType.java @@ -89,7 +89,6 @@ public record MaterialIconType(String name) { public static final MaterialIconType toolHeadWireCutter = new MaterialIconType("toolHeadWireCutter"); public static final MaterialIconType turbineBlade = new MaterialIconType("turbineBlade"); - public static final MaterialIconType turbineRotor = new MaterialIconType("turbineRotor"); // BLOCK TEXTURES public static final MaterialIconType liquid = new MaterialIconType("liquid"); 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 5cdd970997c..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 @@ -21,7 +21,6 @@ import com.gregtechceu.gtceu.common.data.GTBlocks; import com.gregtechceu.gtceu.common.data.GTMaterialBlocks; import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.TurbineRotorItem; import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.gregtechceu.gtceu.integration.kjs.GTRegistryInfo; @@ -575,7 +574,7 @@ public static TagPrefix get(String name) { .generateItem(true) .generationCondition(mat -> mat.hasFlag(MaterialFlags.GENERATE_FINE_WIRE)); - // consisting out of 4 Plates and 1 Ring. + // consisting out of 4 Plates, 1 Ring and 1 Screw. public static final TagPrefix rotor = new TagPrefix(GTCEu.id("rotor")) .defaultTagPath("rotors/%s") .unformattedTagPath("rotors") @@ -699,30 +698,17 @@ public static TagPrefix get(String name) { .generationCondition(hasNoCraftingToolProperty.and(mat -> mat.hasFlag(MaterialFlags.GENERATE_PLATE)) .and(mat -> mat.getProperty(PropertyKey.TOOL).hasType(GTToolType.WIRE_CUTTER_LV))); - // made of 5 Double Plates and 2 Screws. - public static final TagPrefix turbineBlade = new TagPrefix(GTCEu.id("turbine_blade")) + // made of 5 Ingots. + public static final TagPrefix turbineBlade = new TagPrefix(GTCEu.id("turbineBlade")) .langValue("%s Turbine Blade") - .materialAmount(GTValues.M * 92 / 9) + .materialAmount(GTValues.M * 10) .materialIconType(MaterialIconType.turbineBlade) .unificationEnabled(true) .enableRecycling() .generateItem(true) .generationCondition(hasRotorProperty - .and(m -> m.hasFlags(MaterialFlags.GENERATE_BOLT_SCREW, MaterialFlags.GENERATE_PLATE)) - .and(hasGemProperty.negate())); - - // made of 8 Turbine Blades. - public static final TagPrefix turbineRotor = new TagPrefix(GTCEu.id("turbine_rotor")) - .langValue("%s Turbine Rotor") - .materialAmount(GTValues.M * 736 / 9) - .materialIconType(MaterialIconType.turbineRotor) - .unificationEnabled(true) - .generateItem(true) - .itemConstructor(TurbineRotorItem::new) - .generationCondition(hasRotorProperty - .and(m -> m.hasFlags(MaterialFlags.GENERATE_BOLT_SCREW, MaterialFlags.GENERATE_PLATE)) - .and(hasGemProperty.negate())) - .tooltip((mat, tooltips) -> tooltips.add(Component.translatable("item.gtceu.turbine_rotor.tooltip"))); + .and(m -> m.hasFlags(MaterialFlags.GENERATE_BOLT_SCREW, MaterialFlags.GENERATE_PLATE) && + !m.hasProperty(PropertyKey.GEM))); // Storage Block consisting out of 9 Ingots/Gems/Dusts. public static final TagPrefix block = new TagPrefix(GTCEu.id("block")) diff --git a/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java b/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java index deaeab35c1e..4d32809168c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java +++ b/src/main/java/com/gregtechceu/gtceu/api/item/component/IMaterialPartItem.java @@ -21,13 +21,6 @@ import java.util.List; -/** - * @deprecated Create separate items for every material instead. If you want custom functionality, check - * {@link com.gregtechceu.gtceu.api.data.tag.TagPrefix#turbineRotor TagPrefix.turbineRotor}. - * - * @see com.gregtechceu.gtceu.api.data.tag.TagPrefix#turbineRotor TagPrefix.turbineRotor - */ -@Deprecated(forRemoval = true) public interface IMaterialPartItem extends IItemComponent, IDurabilityBar, IAddInformation, ICustomDescriptionId { int getPartMaxDurability(ItemStack itemStack); @@ -89,7 +82,7 @@ default void appendHoverText(ItemStack stack, @org.jetbrains.annotations.Nullabl var maxDurability = getPartMaxDurability(stack); var damage = getPartDamage(stack); tooltipComponents - .add(Component.translatable("item.durability", maxDurability - damage, maxDurability)); + .add(Component.translatable("metaitem.tool.tooltip.durability", maxDurability - damage, maxDurability)); tooltipComponents .add(Component.translatable("metaitem.tool.tooltip.primary_material", material.getLocalizedName())); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java index fc0234b0bc9..012023b6710 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTItems.java @@ -1764,6 +1764,13 @@ private static ItemEntry registerSensor(int tier) { } } + public static ItemEntry TURBINE_ROTOR = REGISTRATE.item("turbine_rotor", ComponentItem::create) + .lang("%s Turbine Rotor") + .properties(p -> p.stacksTo(1)) + .model((ctx, prov) -> createTextureModel(ctx, prov, GTCEu.id("item/tools/turbine"))) + .color(() -> IMaterialPartItem::getItemStackColor) + .onRegister(attach(new TurbineRotorBehaviour())).register(); + public static ItemEntry NEURO_PROCESSOR = REGISTRATE.item("neuro_processing_unit", Item::new) .lang("Neuro Processing Unit").register(); public static ItemEntry STEM_CELLS = REGISTRATE.item("stem_cells", Item::new) 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 9f87be29911..b5f1eb80462 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/GTMaterials.java @@ -223,8 +223,6 @@ public static void init() { cableGtOctal.addSecondaryMaterial(new MaterialStack(Rubber, plate.materialAmount() * 3)); cableGtHex.addSecondaryMaterial(new MaterialStack(Rubber, plate.materialAmount() * 5)); - turbineRotor.addSecondaryMaterial(new MaterialStack(Magnalium, rodLong.materialAmount())); - plateDouble.setIgnored(BorosilicateGlass); plateDouble.setIgnored(Wood); plateDouble.setIgnored(TreatedWood); 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 index 60d85e372c7..af1a5a99ffd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java +++ b/src/main/java/com/gregtechceu/gtceu/common/data/datafixer/GTDataFixers.java @@ -165,7 +165,7 @@ public static void addFixers(FixedDataFixerBuilder builder) { // separator - Schema v3_0 = builder.addSchema(3, 0, V3::new); + Schema v3_0 = builder.addSchema(3, 0, SAME_NAMESPACED); // createMaterialRenameFix(builder, v3_0, "Rename uranium to uranium_238", // createRenamer(Pattern.compile("gtceu:(.*)?uranium"), "gtceu:$1uranium_238")); // createMaterialRenameFix(builder, v3_0, "Rename uranium_235 to uranium", @@ -187,8 +187,6 @@ public static void addFixers(FixedDataFixerBuilder builder) { createBlockItemRenameFix(builder, v3_0, "Rename Bricked Wrought Iron Casing", createRenamer("gtceu:steel_brick_casing", "gtceu:bricked_wrought_iron_casing")); - builder.addFixer(new ItemStackTurbineRotorFix(v3_0)); - // separator Schema v3_1 = builder.addSchema(3, 1, V3_1::new); @@ -213,7 +211,7 @@ private static void createBlockItemFluidRenameFix(FixedDataFixerBuilder builder, /** * create and add all required fixes to rename a material. - * + * * @param builder the DFU builder instance * @param schema the current version's schema * @param oldName the material's old name INCLUDING the namespace diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java deleted file mode 100644 index 363b4a20cd5..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/fixes/ItemStackTurbineRotorFix.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.gregtechceu.gtceu.common.datafixer.fixes; - -import com.gregtechceu.gtceu.common.data.datafixer.GTReferences; - -import net.minecraft.util.datafix.fixes.References; -import net.minecraft.util.datafix.schemas.NamespacedSchema; - -import com.mojang.datafixers.*; -import com.mojang.datafixers.schemas.Schema; -import com.mojang.datafixers.types.Type; -import com.mojang.datafixers.util.Pair; - -import java.util.Objects; - -public class ItemStackTurbineRotorFix extends DataFix { - - private static final String OLD_TURBINE_ROTOR_ITEM_ID = "gtceu:turbine_rotor"; - private static final String DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID = "gtceu:iron_turbine_rotor"; - - public ItemStackTurbineRotorFix(Schema outputSchema) { - super(outputSchema, true); - } - - public TypeRewriteRule makeRule() { - Type inputType = this.getInputSchema().getType(References.ITEM_STACK); - var itemNameType = DSL.named(References.ITEM_NAME.typeName(), NamespacedSchema.namespacedString()); - if (!Objects.equals(this.getInputSchema().getType(References.ITEM_NAME), itemNameType)) { - throw new IllegalStateException("item name type is not what was expected."); - } - var materialNameType = DSL.named(GTReferences.MATERIAL_NAME.typeName(), NamespacedSchema.namespacedString()); - if (!Objects.equals(this.getInputSchema().getType(GTReferences.MATERIAL_NAME), materialNameType)) { - throw new IllegalStateException("material name type is not what was expected."); - } - - var itemIdFinder = DSL.fieldFinder("id", itemNameType); - OpticFinder tagFinder = inputType.findField("tag"); - OpticFinder partStatsFinder = tagFinder.type().findField("GT.PartStats"); - var materialFinder = DSL.fieldFinder("Material", materialNameType); - - TypeRewriteRule first = this.fixTypeEverywhereTyped("ItemStackTurbineRotorFix", inputType, typed -> { - final var itemName = typed.getOptional(itemIdFinder); - if (itemName.isEmpty() || !Objects.equals(itemName.get().getSecond(), OLD_TURBINE_ROTOR_ITEM_ID)) { - return typed; - } - Typed tag = typed.getOrCreateTyped(tagFinder); - Typed partStats = tag.getOrCreateTyped(partStatsFinder); - - // move the Damage nbt field to the root nbt tag - var damage = partStats.getOrCreate(DSL.remainderFinder()).get("Damage").result(); - if (damage.isPresent()) { - tag = tag.update(DSL.remainderFinder(), dynamic -> { - dynamic = dynamic.update("GT.PartStats", d -> d.remove("Damage")); - return dynamic.set("Damage", damage.get()); - }); - typed = typed.set(tagFinder, tag); - } - - var material = partStats.getOptional(materialFinder); - if (material.isEmpty()) { - // if it doesn't have a material (somehow??), make it an iron turbine rotor by default. - return typed.set(itemIdFinder, - Pair.of(References.ITEM_NAME.typeName(), DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID)); - } - - // `material` is (material_name, ) - String materialName = material.get().getSecond(); - if (materialName.indexOf(':') == -1) { - // compatibility for very old turbine rotors we might come across - // shouldn't happen but better safe than sorry - materialName = "gtceu:" + materialName; - } - // All turbine rotor items' names follow a specific pattern and are registered under the material's - // namespace so this *should* be safe - typed = typed.set(itemIdFinder, - Pair.of(References.ITEM_NAME.typeName(), materialName + "_turbine_rotor")); - return typed; - }); - TypeRewriteRule second = this.writeFixAndRead("Remove GT.PartStats NBT field", - inputType, this.getOutputSchema().getType(References.ITEM_STACK), - dynamic -> dynamic.update("tag", tag -> tag.remove("GT.PartStats"))); - TypeRewriteRule third = this.fixTypeEverywhere("Rename blank Turbine Rotor item", itemNameType, - ops -> itemName -> itemName.mapSecond(id -> { - return Objects.equals(id, OLD_TURBINE_ROTOR_ITEM_ID) ? - DEFAULT_NEW_TURBINE_ROTOR_ITEM_ID : id; - })); - return TypeRewriteRule.seq(first, second, third); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java b/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java deleted file mode 100644 index 13d6e71d00b..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/datafixer/schemas/V3.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.gregtechceu.gtceu.common.datafixer.schemas; - -import com.gregtechceu.gtceu.core.mixins.datafixer.V705Accessor; - -import net.minecraft.util.datafix.fixes.References; -import net.minecraft.util.datafix.schemas.NamespacedSchema; - -import com.mojang.datafixers.schemas.Schema; -import com.mojang.datafixers.types.templates.Hook; -import com.mojang.datafixers.types.templates.TypeTemplate; - -import java.util.Map; -import java.util.function.Supplier; - -import static com.mojang.datafixers.DSL.*; - -public class V3 extends NamespacedSchema { - - public V3(int versionKey, Schema parent) { - super(versionKey, parent); - } - - @Override - public void registerTypes(Schema schema, Map> entityTypes, - Map> blockEntityTypes) { - super.registerTypes(schema, entityTypes, blockEntityTypes); - - // remove part stats NBT field - schema.registerType(true, References.ITEM_STACK, () -> hook( - optionalFields( - "id", References.ITEM_NAME.in(schema), - "tag", optionalFields( - "EntityTag", References.ENTITY_TREE.in(schema), - "BlockEntityTag", References.BLOCK_ENTITY.in(schema), - "CanDestroy", list(References.BLOCK_NAME.in(schema)), - "CanPlaceOn", list(References.BLOCK_NAME.in(schema)), - "Items", list(References.ITEM_STACK.in(schema)))), - V705Accessor.gtceu$getAddNames(), Hook.HookFunction.IDENTITY)); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java b/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java deleted file mode 100644 index ac08a9882d3..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/common/item/TurbineRotorItem.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.gregtechceu.gtceu.common.item; - -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.RotorProperty; -import com.gregtechceu.gtceu.api.data.tag.TagPrefix; -import com.gregtechceu.gtceu.api.item.TagPrefixItem; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; -import net.minecraft.world.level.Level; - -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -public class TurbineRotorItem extends TagPrefixItem { - - public TurbineRotorItem(Properties properties, TagPrefix tagPrefix, Material material) { - super(properties.durability(getMaxRotorDurability(material)), tagPrefix, material); - } - - public int getRotorPower(ItemStack stack) { - RotorProperty property = this.material.getProperty(PropertyKey.ROTOR); - return property == null ? -1 : property.getPower(); - } - - public int getRotorEfficiency(ItemStack stack) { - RotorProperty property = this.material.getProperty(PropertyKey.ROTOR); - return property == null ? -1 : property.getEfficiency(); - } - - public float getAttackDamage(ItemStack stack) { - RotorProperty property = this.material.getProperty(PropertyKey.ROTOR); - return property == null ? 0 : property.getDamage(); - } - - public static int getMaxRotorDurability(Material material) { - RotorProperty property = material.getProperty(PropertyKey.ROTOR); - return property == null ? 0 : 800 * (int) Math.pow(property.getDurability(), 0.65); - } - - @Override - public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, - TooltipFlag isAdvanced) { - super.appendHoverText(stack, level, tooltipComponents, isAdvanced); - tooltipComponents.add(Component.translatable("item.gtceu.turbine_rotor.tooltip.efficiency", - getRotorEfficiency(stack))); - tooltipComponents.add(Component.translatable("item.gtceu.turbine_rotor.tooltip.power", getRotorPower(stack))); - } -} diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java new file mode 100644 index 00000000000..147a41e6f69 --- /dev/null +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/TurbineRotorBehaviour.java @@ -0,0 +1,98 @@ +package com.gregtechceu.gtceu.common.item.behavior; + +import com.gregtechceu.gtceu.api.data.chemical.material.Material; +import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; +import com.gregtechceu.gtceu.api.item.IComponentItem; +import com.gregtechceu.gtceu.api.item.component.IMaterialPartItem; +import com.gregtechceu.gtceu.api.item.component.ISubItemHandler; +import com.gregtechceu.gtceu.api.registry.GTRegistries; + +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.level.Level; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.turbineBlade; + +public class TurbineRotorBehaviour implements IMaterialPartItem, ISubItemHandler { + + @Override + public void fillItemCategory(Item item, CreativeModeTab category, NonNullList items) { + for (Material material : GTRegistries.MATERIALS) { + if (!material.shouldGenerateRecipesFor(turbineBlade) || !material.hasProperty(PropertyKey.INGOT)) { + continue; + } + + var rotorStack = new ItemStack(item); + var behavior = TurbineRotorBehaviour.getBehaviour(rotorStack); + if (behavior != null) { + behavior.setPartMaterial(rotorStack, material); + items.add(rotorStack); + } + } + } + + public int getRotorPower(ItemStack stack) { + var property = getPartMaterial(stack).getProperty(PropertyKey.ROTOR); + return property == null ? -1 : property.getPower(); + } + + public int getRotorEfficiency(ItemStack stack) { + var property = getPartMaterial(stack).getProperty(PropertyKey.ROTOR); + return property == null ? -1 : property.getEfficiency(); + } + + @Override + public int getPartMaxDurability(ItemStack itemStack) { + var property = getPartMaterial(itemStack).getProperty(PropertyKey.ROTOR); + return property == null ? -1 : 800 * (int) Math.pow(property.getDurability(), 0.65); + } + + public float getDamage(ItemStack itemStack) { + var property = getPartMaterial(itemStack).getProperty(PropertyKey.ROTOR); + return property == null ? -1 : property.getDamage(); + } + + public int getRotorDurabilityPercent(ItemStack itemStack) { + return 100 - 100 * getPartDamage(itemStack) / getPartMaxDurability(itemStack); + } + + public void applyRotorDamage(ItemStack itemStack, int damageApplied) { + int rotorDurability = getPartMaxDurability(itemStack); + int resultDamage = getPartDamage(itemStack) + damageApplied; + if (resultDamage >= rotorDurability) { + itemStack.shrink(1); + } else { + setPartDamage(itemStack, resultDamage); + } + } + + @Override + public void appendHoverText(ItemStack stack, @org.jetbrains.annotations.Nullable Level level, + List tooltipComponents, TooltipFlag isAdvanced) { + IMaterialPartItem.super.appendHoverText(stack, level, tooltipComponents, isAdvanced); + tooltipComponents + .add(Component.translatable("metaitem.tool.tooltip.rotor.efficiency", getRotorEfficiency(stack))); + tooltipComponents.add(Component.translatable("metaitem.tool.tooltip.rotor.power", getRotorPower(stack))); + } + + @Nullable + public static TurbineRotorBehaviour getBehaviour(@NotNull ItemStack itemStack) { + if (itemStack.getItem() instanceof IComponentItem componentItem) { + for (var component : componentItem.getComponents()) { + if (component instanceof TurbineRotorBehaviour behaviour) { + return behaviour; + } + } + } + return null; + } +} diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java index 7753becc910..695fdd7e6c9 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java @@ -16,7 +16,7 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient; import com.gregtechceu.gtceu.common.data.GTDamageTypes; -import com.gregtechceu.gtceu.common.item.TurbineRotorItem; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.ExtendedUseOnContext; import com.gregtechceu.gtceu.utils.ISubscription; @@ -119,12 +119,13 @@ static int getBaseEfficiency() { ////////////////////////////////////// private void onRotorInventoryChanged() { - ItemStack stack = getRotorStack(); - if (stack.getItem() instanceof TurbineRotorItem rotor) { - this.rotorMaterial = rotor.material; + var stack = getRotorStack(); + var rotorBehaviour = TurbineRotorBehaviour.getBehaviour(stack); + if (rotorBehaviour != null) { + this.rotorMaterial = rotorBehaviour.getPartMaterial(stack); boolean emissive = this.rotorMaterial.hasProperty(PropertyKey.ORE) && - this.rotorMaterial.getPropertyOrThrow(PropertyKey.ORE).isEmissive(); + this.rotorMaterial.getProperty(PropertyKey.ORE).isEmissive(); setRenderState(getRenderState() .setValue(HAS_ROTOR, true) .setValue(IS_EMISSIVE_ROTOR, emissive)); @@ -208,13 +209,12 @@ public void setRotorStack(ItemStack rotorStack) { @Override public InteractionResult onUse(ExtendedUseOnContext context) { - InteractionResult superResult = super.onUse(context); + var superResult = super.onUse(context); if (superResult != InteractionResult.PASS) return superResult; - if (!isRemote() && getRotorSpeed() > 0 && !context.getPlayer().isCreative()) { - ItemStack stack = getRotorStack(); - if (stack.getItem() instanceof TurbineRotorItem rotor) { - context.getPlayer().hurt(GTDamageTypes.TURBINE.source(level), rotor.getAttackDamage(stack)); + TurbineRotorBehaviour behaviour = TurbineRotorBehaviour.getBehaviour(getRotorStack()); + if (behaviour != null) { + context.getPlayer().hurt(GTDamageTypes.TURBINE.source(level), behaviour.getDamage(getRotorStack())); } return InteractionResult.FAIL; } @@ -271,10 +271,12 @@ public boolean isRotorSpinning() { */ public int getTotalEfficiency() { int rotorEfficiency = getRotorEfficiency(); - if (rotorEfficiency == -1) return -1; + if (rotorEfficiency == -1) + return -1; int holderEfficiency = getHolderEfficiency(); - if (holderEfficiency == -1) return -1; + if (holderEfficiency == -1) + return -1; return Math.max(getBaseEfficiency(), rotorEfficiency * holderEfficiency / 100); } @@ -284,7 +286,8 @@ public int getTotalEfficiency() { */ public int getHolderEfficiency() { int tierDifference = getTierDifference(); - if (tierDifference == -1) return -1; + if (tierDifference == -1) + return -1; return 100 + 10 * tierDifference; } @@ -303,30 +306,36 @@ public int getHolderPowerMultiplier() { * @return the rotor's efficiency in % */ public int getRotorEfficiency() { - ItemStack stack = getRotorStack(); - if (!(stack.getItem() instanceof TurbineRotorItem rotor)) return -1; - - return rotor.getRotorEfficiency(stack); + var stack = getRotorStack(); + var behavior = TurbineRotorBehaviour.getBehaviour(stack); + if (behavior != null) { + return behavior.getRotorEfficiency(stack); + } + return -1; } /** * @return the rotor's power in % */ public int getRotorPower() { - ItemStack stack = getRotorStack(); - if (!(stack.getItem() instanceof TurbineRotorItem rotor)) return -1; - - return rotor.getRotorPower(stack); + var stack = getRotorStack(); + var behavior = TurbineRotorBehaviour.getBehaviour(stack); + if (behavior != null) { + return behavior.getRotorPower(stack); + } + return -1; } /** * @return the rotor's durability as % */ public int getRotorDurabilityPercent() { - ItemStack stack = getRotorStack(); - if (stack.getMaxDamage() == 0) return -1; - - return 100 - 100 * stack.getDamageValue() / stack.getMaxDamage(); + var stack = getRotorStack(); + var behavior = TurbineRotorBehaviour.getBehaviour(stack); + if (behavior != null) { + return behavior.getRotorDurabilityPercent(stack); + } + return -1; } /** @@ -335,12 +344,12 @@ public int getRotorDurabilityPercent() { * @param damageAmount to damage */ public void damageRotor(int damageAmount) { - ItemStack stack = getRotorStack(); - if (stack.hurt(damageAmount, this.level.random, null)) { - stack.shrink(1); - stack.setDamageValue(0); + var stack = getRotorStack(); + var behavior = TurbineRotorBehaviour.getBehaviour(stack); + if (behavior != null) { + behavior.applyRotorDamage(stack, damageAmount); + setRotorStack(stack); } - setRotorStack(stack); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java index 3ae8e51b5f1..05b6059f338 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/ArcFurnaceLogic.java @@ -1,39 +1,81 @@ package com.gregtechceu.gtceu.common.machine.trait.customlogic; +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.IngotProperty; import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; -import com.gregtechceu.gtceu.api.machine.trait.customlogic.ToolDecompLogic; +import com.gregtechceu.gtceu.api.item.IGTTool; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; +import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.common.data.GTMaterialItems; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; +import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.ingot; +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.nugget; +import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.turbineBlade; import static com.gregtechceu.gtceu.common.data.GTRecipeCategories.ARC_FURNACE_RECYCLING; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.ARC_FURNACE_RECIPES; -public final class ArcFurnaceLogic extends ToolDecompLogic { +public enum ArcFurnaceLogic implements GTRecipeType.ICustomRecipeLogic { - public static final ArcFurnaceLogic INSTANCE = new ArcFurnaceLogic(); - - private ArcFurnaceLogic() {} + INSTANCE; @Override - public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, - long fullAmount, float durability, long voltage, + public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { + var recipeHandlers = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP); + for (var handler : recipeHandlers) { + for (var content : handler.getContents()) { + if (!(content instanceof ItemStack stack)) continue; + if (stack.isEmpty()) continue; + var recipe = search(stack); + if (recipe != null) return recipe; + } + } + return null; + } + + private @Nullable GTRecipe search(ItemStack stack) { + var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); + if (turbineBehaviour != null) { + float durability = 1f - (float) turbineBehaviour.getPartDamage(stack) / + (float) turbineBehaviour.getPartMaxDurability(stack); + return applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), + (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + } + + if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { + float durability = (float) (tool.getTotalMaxDurability(stack) - stack.getDamageValue() + 1) / + (tool.getTotalMaxDurability(stack) + 1); + return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), + (float) (tool.getToolType().materialAmount / GTValues.M), durability, + GTValues.VH[GTValues.LV], 2); + } + + return null; + } + + public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, @NotNull Material mat, + float fullAmount, float durability, long voltage, int durationFactor) { if (!mat.hasProperty(PropertyKey.INGOT)) return null; - IngotProperty material = mat.getPropertyOrThrow(PropertyKey.INGOT); - Material materialArc = material.getArcSmeltingInto(); + var material = mat.getProperty(PropertyKey.INGOT); + var materialArc = material.getArcSmeltingInto(); - float outputAmount = durability * fullAmount; + float outputAmount = (durability * fullAmount); int dustAmount = (int) outputAmount; - int leftover = (int) ((outputAmount - dustAmount) * 9.f); + int leftover = (int) ((outputAmount - (float) dustAmount) * 9.f); if (dustAmount == 0 && leftover == 0) return null; @@ -54,7 +96,33 @@ private ArcFurnaceLogic() {} } @Override - public GTRecipeCategory getDisplayRecipeCategory() { - return ARC_FURNACE_RECYCLING; + public void buildRepresentativeRecipes() { + ItemStack stack = GTItems.TURBINE_ROTOR.asStack(); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); + GTRecipe rotorRecipe; + GTRecipe pickaxeRecipe; + float durability = 0.69f; + var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); + assert turbineBehaviour != null : "Default Turbine Stack doesn't have Turbine Behaviour"; + turbineBehaviour.setPartMaterial(stack, GTMaterials.Iron); + turbineBehaviour.setPartDamage(stack, 8928); + + rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), + (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; + rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); + + // noinspection DataFlowIssue + stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); + stack.setDamageValue(79); + pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, + (float) (GTToolType.PICKAXE.materialAmount / GTValues.M), durability, + GTValues.VH[GTValues.LV], 2); + + assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; + pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); + ARC_FURNACE_RECYCLING.addRecipe(pickaxeRecipe); + ARC_FURNACE_RECYCLING.addRecipe(rotorRecipe); } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java index 81e27c6b10a..a2f219c094f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/trait/customlogic/MaceratorLogic.java @@ -1,35 +1,74 @@ package com.gregtechceu.gtceu.common.machine.trait.customlogic; +import com.gregtechceu.gtceu.api.GTValues; +import com.gregtechceu.gtceu.api.capability.recipe.IO; +import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; +import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey; import com.gregtechceu.gtceu.api.data.tag.TagPrefix; -import com.gregtechceu.gtceu.api.machine.trait.customlogic.ToolDecompLogic; +import com.gregtechceu.gtceu.api.item.IGTTool; +import com.gregtechceu.gtceu.api.item.tool.GTToolType; import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; +import com.gregtechceu.gtceu.api.recipe.GTRecipeType; +import com.gregtechceu.gtceu.common.data.GTItems; +import com.gregtechceu.gtceu.common.data.GTMaterialItems; +import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; +import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; import static com.gregtechceu.gtceu.common.data.GTRecipeCategories.MACERATOR_RECYCLING; import static com.gregtechceu.gtceu.common.data.GTRecipeTypes.MACERATOR_RECIPES; -public final class MaceratorLogic extends ToolDecompLogic { +public enum MaceratorLogic implements GTRecipeType.ICustomRecipeLogic { - public static final MaceratorLogic INSTANCE = new MaceratorLogic(); - - private MaceratorLogic() {} + INSTANCE; @Override - public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, - long fullAmount, float durability, long voltage, - int durationFactor) { - if (!mat.hasProperty(PropertyKey.DUST)) return null; + public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { + var recipeHandlers = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP); + for (var handler : recipeHandlers) { + for (var content : handler.getContents()) { + if (!(content instanceof ItemStack stack)) continue; + if (stack.isEmpty()) continue; + var recipe = search(stack); + if (recipe != null) return recipe; + } + } + return null; + } + + public @Nullable GTRecipe search(ItemStack stack) { + var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); + if (turbineBehaviour != null) { + float durability = 1.f - (float) turbineBehaviour.getPartDamage(stack) / + (float) turbineBehaviour.getPartMaxDurability(stack); + return applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), + (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + } + + if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { + float durability = (float) (tool.getTotalMaxDurability(stack) - stack.getDamageValue() + 1) / + (tool.getTotalMaxDurability(stack) + 1); + return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), + (float) (tool.getToolType().materialAmount / GTValues.M), durability, + GTValues.VH[GTValues.LV], 2); + } + + return null; + } - float outputAmount = durability * fullAmount; + public @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, @NotNull Material mat, + float fullAmount, float durability, long voltage, + int durationFactor) { + float outputAmount = (durability * fullAmount); int dustAmount = (int) outputAmount; - int leftover = (int) ((outputAmount - (float) dustAmount) * 36f); + int leftover = (int) ((outputAmount - (float) dustAmount) * 36.f); TagPrefix tag = leftover % 4 >= leftover % 9 ? dustSmall : dustTiny; int leftAmount = leftover % 4 >= leftover % 9 ? leftover / 9 : leftover / 4; @@ -51,7 +90,33 @@ private MaceratorLogic() {} } @Override - public GTRecipeCategory getDisplayRecipeCategory() { - return MACERATOR_RECYCLING; + public void buildRepresentativeRecipes() { + ItemStack stack = GTItems.TURBINE_ROTOR.asStack(); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); + GTRecipe rotorRecipe; + GTRecipe pickaxeRecipe; + float durability = 0.75f; + var turbineBehaviour = TurbineRotorBehaviour.getBehaviour(stack); + assert turbineBehaviour != null : "Default Turbine Stack doesn't have Turbine Behaviour"; + turbineBehaviour.setPartMaterial(stack, GTMaterials.Iron); + turbineBehaviour.setPartDamage(stack, 8928); + + rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, turbineBehaviour.getPartMaterial(stack), + (float) (turbineBlade.materialAmount() * 8) / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); + assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; + rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); + + // noinspection DataFlowIssue + stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); + stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); + stack.setDamageValue(79); + pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, + (float) (GTToolType.PICKAXE.materialAmount / GTValues.M), durability, + GTValues.VH[GTValues.LV], 2); + + assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; + pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); + MACERATOR_RECYCLING.addRecipe(pickaxeRecipe); + MACERATOR_RECYCLING.addRecipe(rotorRecipe); } } diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index 1f4b44573c3..e1bcd59a166 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -327,23 +327,21 @@ public static void init(RegistrateLangProvider provider) { provider.add("item.gtceu.tool.aoe.columns", "Columns"); provider.add("item.gtceu.tool.aoe.layers", "Layers"); - /// @deprecated remove when IMaterialPartItem is removed - provider.add("metaitem.tool.tooltip.primary_material", "§fMaterial: §e%s"); - provider.add("item.gtceu.armor.helmet", "%s Helmet"); provider.add("item.gtceu.armor.chestplate", "%s Chestplate"); provider.add("item.gtceu.armor.leggings", "%s Leggings"); provider.add("item.gtceu.armor.boots", "%s Boots"); provider.add("item.gtceu.turbine_rotor.tooltip", "Turbine Rotors for your power station"); - provider.add("item.gtceu.turbine_rotor.tooltip.efficiency", "Turbine Efficiency: §9%s%%"); - provider.add("item.gtceu.turbine_rotor.tooltip.power", "Turbine Power: §9%s%%"); - provider.add("metaitem.clipboard.tooltip", "Can be written on (without any writing Instrument). Right-click on Wall to place, and Shift-Right-Click to remove"); provider.add("metaitem.behavior.mode_switch.tooltip", "Use while sneaking to switch mode"); provider.add("metaitem.behavior.mode_switch.mode_switched", "§eMode Set to: %s"); provider.add("metaitem.behavior.mode_switch.current_mode", "Mode: %s"); + provider.add("metaitem.tool.tooltip.primary_material", "§fMaterial: §e%s"); + provider.add("metaitem.tool.tooltip.durability", "§fDurability: §a%d / %d"); + provider.add("metaitem.tool.tooltip.rotor.efficiency", "Turbine Efficiency: §9%d%%"); + provider.add("metaitem.tool.tooltip.rotor.power", "Turbine Power: §9%d%%"); provider.add("item.gtceu.ulv_voltage_coil.tooltip", "Primitive Coil"); provider.add("item.gtceu.lv_voltage_coil.tooltip", "Basic Coil"); provider.add("item.gtceu.mv_voltage_coil.tooltip", "Good Coil"); diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java index 90c06625b2d..4e0daade9b1 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/generated/PartsRecipeHandler.java @@ -8,6 +8,7 @@ import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterials; import com.gregtechceu.gtceu.common.data.GTRecipeCategories; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import com.gregtechceu.gtceu.common.machine.trait.LatheRecipeLogic; import com.gregtechceu.gtceu.data.recipe.VanillaRecipeHelper; import com.gregtechceu.gtceu.data.recipe.builder.GTRecipeBuilder; @@ -546,10 +547,14 @@ private static void processTurbine(@NotNull Consumer provider, @ return; } + ItemStack rotorStack = GTItems.TURBINE_ROTOR.asStack(); + // noinspection ConstantConditions + TurbineRotorBehaviour.getBehaviour(rotorStack).setPartMaterial(rotorStack, material); + ASSEMBLER_RECIPES.recipeBuilder("assemble_" + material.getName() + "_turbine_blade") .inputItems(turbineBlade, material, 8) .inputItems(rodLong, GTMaterials.Magnalium) - .outputItems(ChemicalHelper.get(turbineRotor, material)) + .outputItems(rotorStack) .duration(200) .EUt(400) .save(provider); @@ -562,7 +567,7 @@ private static void processTurbine(@NotNull Consumer provider, @ .EUt(256) .save(provider); - VanillaRecipeHelper.addShapedRecipe(provider, material.getName() + "_turbine_blade", + VanillaRecipeHelper.addShapedRecipe(provider, String.format("turbine_blade_%s", material.getName()), ChemicalHelper.get(turbineBlade, material), "PPP", "SPS", "fPd", 'P', new MaterialEntry(plateDouble, material), diff --git a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java index ec6ba847482..0a2b323a96f 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/emi/GTEMIPlugin.java @@ -74,6 +74,8 @@ public void register(EmiRegistry registry) { EmiIngredient.of(Ingredient.of(GTMachines.EQUIPMENT_FOUNDRY))); // Comparators + registry.setDefaultComparison(GTItems.TURBINE_ROTOR, Comparison.compareNbt()); + registry.setDefaultComparison(GTItems.PROGRAMMED_CIRCUIT, Comparison.compareNbt()); registry.removeEmiStacks(EmiStack.of(GTItems.PROGRAMMED_CIRCUIT)); registry.addEmiStack(EmiStack.of(IntCircuitBehaviour.stack(0))); diff --git a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java index 17ba2dbc0b3..1b3a5ecb0bd 100644 --- a/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java +++ b/src/main/java/com/gregtechceu/gtceu/integration/recipeviewer/jei/GTJEIPlugin.java @@ -113,6 +113,7 @@ public void registerRecipes(IRecipeRegistration registration) { public void registerItemSubtypes(ISubtypeRegistration registration) { if (GTCEu.Mods.isEMILoaded()) return; registration.useNbtForSubtypes(GTItems.PROGRAMMED_CIRCUIT.asItem()); + registration.useNbtForSubtypes(GTItems.TURBINE_ROTOR.asItem()); } @Override diff --git a/src/main/resources/assets/gtceu/lang/de_de.json b/src/main/resources/assets/gtceu/lang/de_de.json index 7066f3cfa03..84ecc717699 100644 --- a/src/main/resources/assets/gtceu/lang/de_de.json +++ b/src/main/resources/assets/gtceu/lang/de_de.json @@ -5805,8 +5805,8 @@ "metaitem.terminal.tooltip.hardware": "§aHardware: %d", "metaitem.tool.tooltip.durability": "§fHaltbarkeit: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fPrimärmaterial: §e%s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "Turbineneffizienz: §9%d%%", - "item.gtceu.turbine_rotor.tooltip.power": "Turbinenleistung: §9%d%%", + "metaitem.tool.tooltip.rotor.efficiency": "Turbineneffizienz: §9%d%%", + "metaitem.tool.tooltip.rotor.power": "Turbinenleistung: §9%d%%", "metaitem.tricorder_scanner.tooltip": "Tricorder", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Zurück", diff --git a/src/main/resources/assets/gtceu/lang/ja_jp.json b/src/main/resources/assets/gtceu/lang/ja_jp.json index d31524527d9..0ad30ee9fcf 100644 --- a/src/main/resources/assets/gtceu/lang/ja_jp.json +++ b/src/main/resources/assets/gtceu/lang/ja_jp.json @@ -5699,8 +5699,8 @@ "metaitem.terminal.tooltip.hardware": "ハードウェア: %d", "metaitem.tool.tooltip.durability": "耐久値: %d/%d", "metaitem.tool.tooltip.primary_material": "素材: %s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "タービン効率: %d%%", - "item.gtceu.turbine_rotor.tooltip.power": "タービンパワー: %d%%", + "metaitem.tool.tooltip.rotor.efficiency": "タービン効率: %d%%", + "metaitem.tool.tooltip.rotor.power": "タービンパワー: %d%%", "metaitem.tricorder_scanner.tooltip": "トライコーダー", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "戻る", diff --git a/src/main/resources/assets/gtceu/lang/pt_br.json b/src/main/resources/assets/gtceu/lang/pt_br.json index 0239a0faedb..53a277ea555 100644 --- a/src/main/resources/assets/gtceu/lang/pt_br.json +++ b/src/main/resources/assets/gtceu/lang/pt_br.json @@ -5801,8 +5801,8 @@ "metaitem.terminal.tooltip.hardware": "§aHardware: %d", "metaitem.tool.tooltip.durability": "§fDurabilidade: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fMaterial: §e%s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "Eficiência da Turbina: §9%d%%", - "item.gtceu.turbine_rotor.tooltip.power": "Potência da Turbina: §9%d%%", + "metaitem.tool.tooltip.rotor.efficiency": "Eficiência da Turbina: §9%d%%", + "metaitem.tool.tooltip.rotor.power": "Potência da Turbina: §9%d%%", "metaitem.tricorder_scanner.tooltip": "Tricorder", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Voltar", diff --git a/src/main/resources/assets/gtceu/lang/ru_ru.json b/src/main/resources/assets/gtceu/lang/ru_ru.json index cacfb110833..c952c2a6052 100644 --- a/src/main/resources/assets/gtceu/lang/ru_ru.json +++ b/src/main/resources/assets/gtceu/lang/ru_ru.json @@ -2835,8 +2835,8 @@ "metaitem.terminal.tooltip.hardware": "§aДополнений: %d", "metaitem.tool.tooltip.durability": "§fПрочность: §a%d / %d", "metaitem.tool.tooltip.primary_material": "§fМатериал: §e%s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "Эффективность ротора: §9%d%%", - "item.gtceu.turbine_rotor.tooltip.power": "Мощность турбины: §9%d%%", + "metaitem.tool.tooltip.rotor.efficiency": "Эффективность ротора: §9%d%%", + "metaitem.tool.tooltip.rotor.power": "Мощность турбины: §9%d%%", "metaitem.tricorder_scanner.tooltip": "То что нужно", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Назад", diff --git a/src/main/resources/assets/gtceu/lang/uk_ua.json b/src/main/resources/assets/gtceu/lang/uk_ua.json index ddce973cf00..126e385c951 100644 --- a/src/main/resources/assets/gtceu/lang/uk_ua.json +++ b/src/main/resources/assets/gtceu/lang/uk_ua.json @@ -5887,8 +5887,8 @@ "metaitem.terminal.tooltip.hardware": "§aОбладнання: %d", "metaitem.tool.tooltip.durability": "§fМіцність:§a %d / %d", "metaitem.tool.tooltip.primary_material": "§fМатеріал:§e %s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "Ефективність турбіни:§9 %d%%", - "item.gtceu.turbine_rotor.tooltip.power": "Потужність турбіни:§9 %d%%", + "metaitem.tool.tooltip.rotor.efficiency": "Ефективність турбіни:§9 %d%%", + "metaitem.tool.tooltip.rotor.power": "Потужність турбіни:§9 %d%%", "metaitem.tricorder_scanner.tooltip": "Трикодер", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "Назад", diff --git a/src/main/resources/assets/gtceu/lang/zh_cn.json b/src/main/resources/assets/gtceu/lang/zh_cn.json index 71c9831c284..f9287389a4b 100644 --- a/src/main/resources/assets/gtceu/lang/zh_cn.json +++ b/src/main/resources/assets/gtceu/lang/zh_cn.json @@ -5951,8 +5951,8 @@ "metaitem.terminal.tooltip.hardware": "§a硬件:%d", "metaitem.tool.tooltip.durability": "§f耐久度:§a%d / %d", "metaitem.tool.tooltip.primary_material": "§f材料:§e%s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "涡轮效率:§9%d%%", - "item.gtceu.turbine_rotor.tooltip.power": "涡轮产能:§9%d%%", + "metaitem.tool.tooltip.rotor.efficiency": "涡轮效率:§9%d%%", + "metaitem.tool.tooltip.rotor.power": "涡轮产能:§9%d%%", "metaitem.tricorder_scanner.tooltip": "三录仪", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "返回", diff --git a/src/main/resources/assets/gtceu/lang/zh_tw.json b/src/main/resources/assets/gtceu/lang/zh_tw.json index 38b135a73f3..b27fe57a602 100644 --- a/src/main/resources/assets/gtceu/lang/zh_tw.json +++ b/src/main/resources/assets/gtceu/lang/zh_tw.json @@ -5770,8 +5770,8 @@ "metaitem.terminal.tooltip.hardware": "§a硬體:%d", "metaitem.tool.tooltip.durability": "§f耐久度:§a%d / %d", "metaitem.tool.tooltip.primary_material": "§f材料:§e%s", - "item.gtceu.turbine_rotor.tooltip.efficiency": "渦輪效率:§9%d%%", - "item.gtceu.turbine_rotor.tooltip.power": "渦輪產能:§9%d%%", + "metaitem.tool.tooltip.rotor.efficiency": "渦輪效率:§9%d%%", + "metaitem.tool.tooltip.rotor.power": "渦輪產能:§9%d%%", "metaitem.tricorder_scanner.tooltip": "三錄儀", "monitor.gui.title.argb": "ARGB:", "monitor.gui.title.back": "返回", diff --git a/src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json b/src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json deleted file mode 100644 index 2fb8332dda3..00000000000 --- a/src/main/resources/assets/gtceu/models/item/material_sets/dull/turbine_rotor.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "gtceu:item/material_sets/dull/turbine_rotor", - "layer1": "gtceu:item/material_sets/dull/turbine_rotor_secondary", - "layer2": "gtceu:item/material_sets/dull/turbine_rotor_overlay" - } -} diff --git a/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor.png b/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor.png deleted file mode 100644 index 3cb26de31ee57b58ace53321ff544a8125d7ba7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmVz@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf6951U69E94oEQKA0ai&wK~y-6t&%Z{!!Qs)KpGt&y&)=9*kJG-yv<6hIN4^|Uuovg{P{CT z@JHPG833^)s;ZjPSSj^Zlj4QU^L##^&j4&T8?3c>?@>yL--NSIQ&WuNNL5vHQ4|0S z!@&K1k9?Mr*4jvhT>2h{f#>tdIF3I8fdJU=_p$JLy#gSmjN$;^d!&@)c|J!0;KkN* zau8cOtLvKV`xtXdgr+dH>pGgI`FJA{Zs44w@B3)8>$+G}mL+Z5zBOyDMF!xUi%IW2 zMNwd_<#xN#G!2)_g|aLG;t+son&vD`hGyp+-h0;TH2{ahAv!pnPA@{4Qc4_;$9cQm zvRoy_Znpz?TV(}cj1gg#Pt8lAX`0Yl3uBB}1wtt$+P3BKc*J5UC3RiL|M3Y~8fdLW jI8MkJV?-LKj{gN;@g&5k(O9Kl00000NkvXXu0mjfn5fAZ diff --git a/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_overlay.png b/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_overlay.png deleted file mode 100644 index 084f0dfcc05088596b646108e4fe78b99f03911f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jPK-BC>eK@{Ea{HEjtmSN z`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8X6a z5n0T@z%2~Ij105pNB{*LJzX3_EP9g@B=$Xcd3ibCk&eI=g|`Qnq`Lp}k1Bg&Z)d7w zz;>qd(xpr62}!@r)*QRg@J2Lc>tWUa+jlFI4m@CI*qWud?%}hEAAyE3c)I$ztaD0e F0sy3sLb?C| diff --git a/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_secondary.png b/src/main/resources/assets/gtceu/textures/item/material_sets/dull/turbine_rotor_secondary.png deleted file mode 100644 index 1470bfd909406e0e12e6542156e78e65b29873d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmV+k0`~ohP)z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf6951U69E94oEQKA0dh%1K~y-6tx-Ko13?gdC-)B| z>@Tnjh)qb7PKc6&1o8_u)umUM*2;z0Z+VUF!U=PoT~ehJwzFEUIwRDTFXK#w>m^PES>h(KO9F5tWj# z-EJ?ds(KJTjYVrMMdGpbIN5uD+ceGl(LjW*Z4&U(EtFd zs(K(Id4H))L}du!3nx2EJEH7wn}|wlEp>)-X8v|D07zs9%sj2@`U(I-2xIU4Tt4M_ ze&d|G?k5*Tai0PJGf#z-vvmu7>?$AfJih^ex~@OuZ`-zqv?H(LWM-c3cDwOlFn9uh z*=#m(&dmW}xm>=+MyWAok!9IoI2^w8M~N{Sja~pij09)h2#JhxD!Fgew(VU}6!*-W zoQYtJSvcpe_xt_1a7w8Qt@UQTUhjS~Jb9Wd%MS8p<|K~ej{gOp==a^&Pg!P(00000 LNkvXXu0mjfr8v`@ diff --git a/src/main/resources/gtceu.mixins.json b/src/main/resources/gtceu.mixins.json index d129382829e..9cee2e3d376 100644 --- a/src/main/resources/gtceu.mixins.json +++ b/src/main/resources/gtceu.mixins.json @@ -48,8 +48,8 @@ "ftbchunks.FTBChunksClientMixin", "ftbchunks.LargeMapScreenMixin", "ftbchunks.RegionMapPanelMixin", - "jei.FluidTankRendererMixin", "jei.RecipesGuiAccessor", + "jei.FluidTankRendererMixin", "xaerominimap.HighlighterRegistryMixin", "xaerominimap.MinimapFBORendererMixin", "xaeroworldmap.GuiMapMixin", @@ -117,7 +117,7 @@ "mui.ModularUIEmiRecipeAccessor", "mui.ModularUIJeiRecipeAccessor", "registrate.AbstractRegistrateAccessor", - "registrate.RegistrateDataProviderAccessor" + "registrate.RegistrateDataProviderAccessor", ], "injectors": { "defaultRequire": 1, diff --git a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java index c3f78885e52..5c3c8ac079a 100644 --- a/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java +++ b/src/test/java/com/gregtechceu/gtceu/common/machine/multiblock/electric/LargeSteamTurbineTest.java @@ -3,10 +3,10 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.GTValues; import com.gregtechceu.gtceu.api.blockentity.PipeBlockEntity; -import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; -import com.gregtechceu.gtceu.api.data.tag.TagPrefix; import com.gregtechceu.gtceu.api.recipe.GTRecipe; +import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.GTMaterials; +import com.gregtechceu.gtceu.common.item.behavior.TurbineRotorBehaviour; import com.gregtechceu.gtceu.common.machine.multiblock.generator.LargeTurbineMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.EnergyHatchPartMachine; import com.gregtechceu.gtceu.common.machine.multiblock.part.FluidHatchPartMachine; @@ -16,7 +16,6 @@ import net.minecraft.core.Direction; import net.minecraft.gametest.framework.GameTest; import net.minecraft.gametest.framework.GameTestHelper; -import net.minecraft.world.item.ItemStack; import net.minecraftforge.gametest.GameTestHolder; import net.minecraftforge.gametest.PrefixGameTestTemplate; @@ -30,12 +29,14 @@ public class LargeSteamTurbineTest { @GameTest(template = "lst_with_steam", timeoutTicks = 20 + 40 + 1) public static void LstActivatesTest(GameTestHelper helper) { { - final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); + final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); block.setConnection(Direction.SOUTH, true, false); } final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -53,20 +54,22 @@ public static void LstActivatesTest(GameTestHelper helper) { @GameTest(template = "lst_with_steam", timeoutTicks = 20 + 40 + 1) public static void LstStopsOnBrokenRotorTest(GameTestHelper helper) { - { - final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); - block.setConnection(Direction.SOUTH, true, false); - } + final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); + block.setConnection(Direction.SOUTH, true, false); final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); + final var dynamo = (EnergyHatchPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 1)); helper.runAfterDelay(20, () -> { { - final ItemStack rotor = rotorPart.inventory.storage.getStackInSlot(0); - rotor.setDamageValue(rotor.getMaxDamage() - 1); + final var rotor = rotorPart.inventory.storage.getStackInSlot(0); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartDamage(rotor, behavior.getMaxDurability(rotor) - 1); } helper.assertTrue(machine.getRecipeLogic().isWorking(), "Expected turbine to be running"); rotorPart.setRotorSpeed(0); @@ -82,7 +85,9 @@ public static void LstStopsOnBrokenRotorTest(GameTestHelper helper) { public static void LstGeneratesCorrectPowerTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -106,7 +111,9 @@ public static void LstGeneratesCorrectPowerTest(GameTestHelper helper) { public static void LstRotorSpeedIncreasesAndDecreasesAsExpectedTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -155,7 +162,9 @@ public static void LstRotorSpeedIncreasesAndDecreasesAsExpectedTest(GameTestHelp public static void LstOutputsCorrectAmountOfDistilledWaterTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -177,12 +186,14 @@ public static void LstOutputsCorrectAmountOfDistilledWaterTest(GameTestHelper he @GameTest(template = "lst_with_steam", timeoutTicks = 20 + 40 + 1) public static void LstRunsWithFullDynamoTest(GameTestHelper helper) { { - final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); + final var block = (PipeBlockEntity) helper.getBlockEntity(new BlockPos(4, 3, 3)); block.setConnection(Direction.SOUTH, true, false); } final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -204,7 +215,9 @@ public static void LstRunsWithFullDynamoTest(GameTestHelper helper) { public static void LstRefusesToRunWithoutMaintenanceTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); @@ -224,7 +237,9 @@ public static void LstRefusesToRunWithoutMaintenanceTest(GameTestHelper helper) public static void LstRefusesToRunOnWrongFluidTest(GameTestHelper helper) { final var rotorPart = (RotorHolderPartMachine) helper.getBlockEntity(new BlockPos(2, 3, 4)); { - final ItemStack rotor = ChemicalHelper.get(TagPrefix.turbineRotor, GTMaterials.RoseGold); + final var rotor = GTItems.TURBINE_ROTOR.asStack(); + final var behavior = TurbineRotorBehaviour.getBehaviour(rotor); + behavior.setPartMaterial(rotor, GTMaterials.RoseGold); rotorPart.inventory.storage.setStackInSlot(0, rotor); } final var machine = (LargeTurbineMachine) helper.getBlockEntity(new BlockPos(1, 3, 2)); From d9f23f73ebae937b2e31e0d6ebf8d2f9c4071e95 Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 24 Oct 2026 14:04:54 +0300 Subject: [PATCH 82/83] Fix language keys --- .../resources/assets/gtceu/lang/de_de.json | 45 ++++++----- .../resources/assets/gtceu/lang/ja_jp.json | 44 ++++++----- .../resources/assets/gtceu/lang/pt_br.json | 43 +++++------ .../resources/assets/gtceu/lang/ru_ru.json | 60 ++++++--------- .../resources/assets/gtceu/lang/uk_ua.json | 44 ++++++----- .../resources/assets/gtceu/lang/zh_cn.json | 74 ++++++++----------- .../resources/assets/gtceu/lang/zh_tw.json | 44 ++++++----- 7 files changed, 156 insertions(+), 198 deletions(-) diff --git a/src/main/resources/assets/gtceu/lang/de_de.json b/src/main/resources/assets/gtceu/lang/de_de.json index 84ecc717699..4c195619de9 100644 --- a/src/main/resources/assets/gtceu/lang/de_de.json +++ b/src/main/resources/assets/gtceu/lang/de_de.json @@ -14,7 +14,6 @@ "behavior.portable_scanner.debug_lag_count": "%s Lag-Spikes erkannt (> %sms)", "behavior.portable_scanner.debug_machine": "Meta-ID: %s", "behavior.portable_scanner.debug_machine_invalid": "Ungültig!", - "behavior.portable_scanner.debug_machine_invalid_null=invalid! MetaTileEntity =": "Null!", "behavior.portable_scanner.debug_machine_valid": "Gültig", "behavior.portable_scanner.divider": "=========================", "behavior.portable_scanner.energy_container_in": "Max IN: %s EU (%s) @ %s A", @@ -120,7 +119,7 @@ "block.gtceu.aluminium_drum": "Aluminiumfass", "block.gtceu.antimatter_hazard_sign_block": "Antimaterie-Gefahrenschild", "block.gtceu.assembly_line": "Fertigungsstraße", - "block.gtceu.assembly_line_casing": "Fertigungsstraßengehäuse", + "block.gtceu.assembly_control_casing": "Fertigungsstraßengehäuse", "block.gtceu.assembly_line_grating": "Fertigungsstraßengitter", "block.gtceu.assembly_line_unit": "Fertigungsstraßen-Steuereinheit", "block.gtceu.atomic_casing": "Atomgehäuse", @@ -139,7 +138,7 @@ "block.gtceu.blue_studs": "Blauer Nietenblock", "block.gtceu.boss_hazard_sign_block": "Boss-Gefahrenschild", "block.gtceu.brittle_charcoal": "Spröde Holzkohle", - "block.gtceu.bronze_brick_casing": "Bronze-Ziegelgehäuse", + "block.gtceu.bricked_bronze_casing": "Bronze-Ziegelgehäuse", "block.gtceu.bronze_crate": "Bronzekiste", "block.gtceu.bronze_drum": "Bronzefass", "block.gtceu.bronze_firebox_casing": "Bronze-Feuerkammergehäuse", @@ -154,8 +153,6 @@ "block.gtceu.brown_large_metal_sheet": "Großes braunes Metallblech", "block.gtceu.brown_metal_sheet": "Braunes Metallblech", "block.gtceu.brown_studs": "Brauner Nietenblock", - "block.gtceu.casing_coke_bricks": "Koksofen-Ziegel", - "block.gtceu.casing_grate": "Gittergehäuse", "block.gtceu.causality_hazard_sign_block": "Kausalitäts-Gefahrenschild", "block.gtceu.central_monitor": "Zentralmonitor", "block.gtceu.charcoal_pile_igniter": "Holzkohlemeiler-Zünder", @@ -814,8 +811,8 @@ "block.gtceu.me_pattern_buffer_proxy": "ME Pattern Buffer Proxy", "block.gtceu.me_stocking_input_bus": "ME-Strumpf-Eingangsbus", "block.gtceu.me_stocking_input_hatch": "ME-Strumpf-Eingabeklappe", - "block.gtceu.mega_blast_furnace": "Drehherdofen", - "block.gtceu.mega_vacuum_freezer": "Massenschockkühler", + "block.gtceu.rotary_hearth_furnace": "Drehherdofen", + "block.gtceu.bulk_blast_chiller": "Massenschockkühler", "block.gtceu.miner_pipe": "Bergmannsrohr", "block.gtceu.mob_infestation_hazard_sign_block": "Mob-Befall-Gefahrenschild-Block", "block.gtceu.mob_spawner_hazard_sign_block": "Mob Spawner Gefahrenschild-Block", @@ -919,9 +916,9 @@ "block.gtceu.normal_optical_pipe.tooltip": "§7Übertragung von §fBerechnungen§7 oder §fForschungsdaten§7", "block.gtceu.object_holder": "Objekthalter", "block.gtceu.oil": "Öl", - "block.gtceu.oil_heavy": "Schweröl", - "block.gtceu.oil_light": "Leichtes Öl", - "block.gtceu.oil_medium": "Rohöl", + "block.gtceu.heavy_oil": "Schweröl", + "block.gtceu.light_oil": "Leichtes Öl", + "block.gtceu.raw_oil": "Rohöl", "block.gtceu.opv_1024a_laser_source_hatch": "§9§lOpV§r 1.024§eA§r Laserquellenklappe", "block.gtceu.opv_1024a_laser_target_hatch": "§9§lOpV§r 1.024§eA§r Laserzielklappe", "block.gtceu.opv_16a_energy_converter": "§9§lOpV§r 16§eA§r Energieumwandler", @@ -1010,7 +1007,7 @@ "block.gtceu.orange_metal_sheet": "Orangefarbenes Metallblech", "block.gtceu.orange_studs": "Oranger Nietenblock", "block.gtceu.overworld_marker": "Oberwelt", - "block.gtceu.palladium_substation": "Palladium-Umspannwerksgehäuse", + "block.gtceu.palladium_substation_casing": "Palladium-Umspannwerksgehäuse", "block.gtceu.pattern_buffer.desc.0": "§fErmöglicht die direkte §6AE2-Musterspeicherung §ffür GregTech Multiblocks.", "block.gtceu.pattern_buffer.desc.1": "§fAE2-Muster können alles verwenden, was im §6gemeinsamen Inventar §fWidget gespeichert ist.", "block.gtceu.pattern_buffer.desc.2": "§fVerknüpfe §6Pattern Buffer Proxys §fmit einem §bDatenstick §f, um Maschinen miteinander zu verknüpfen!", @@ -1114,7 +1111,7 @@ "block.gtceu.steam_output_bus": "Dampfausgangsbus", "block.gtceu.steam_oven": "Dampfofen", "block.gtceu.steam_solid_boiler.bronze": "Kleiner Dampfkessel", - "block.gtceu.steel_brick_casing": "Gemauertes Schmiedeeisengehäuse", + "block.gtceu.bricked_wrought_iron_casing": "Gemauertes Schmiedeeisengehäuse", "block.gtceu.steel_crate": "Stahlkiste", "block.gtceu.steel_drum": "Stahltrommel", "block.gtceu.steel_firebox_casing": "Feuerraumgehäuse aus Stahl", @@ -1124,7 +1121,7 @@ "block.gtceu.steel_multiblock_tank": "Stahl-Multiblock-Tank", "block.gtceu.steel_pipe_casing": "Stahlrohrgehäuse", "block.gtceu.steel_tank_valve": "Tankventil aus Stahl", - "block.gtceu.steel_turbine_casing": "Magnalium-Turbinengehäuse", + "block.gtceu.magnalium_turbine_casing": "Magnalium-Turbinengehäuse", "block.gtceu.sterilizing_filter_casing": "Sterilisierendes Filtergehäuse", "block.gtceu.stress_proof_casing": "Spannungsfestes Gehäuse", "block.gtceu.stripped_rubber_log": "Abgestreifter Gummistamm", @@ -1723,7 +1720,7 @@ "block.gtceu.zpm_wiremill": "§bZPM Drahtwerk", "block.gtceu.zpm_world_accelerator": "§cElite World Accelerator III§r", "block.sterilizing_filter_casing.tooltip": "Erstellt eine §asterilisierte§7 Umgebung", - "block.surface_rock": "%s Oberflächengestein", + "block.gtceu.surface_rock": "%s Oberflächengestein", "button.gtceu.mark_as_depleted.name": "Als erschöpft markieren", "button.gtceu.toggle_waypoint.name": "Wegpunkt umschalten", "command.gtceu.cape.failure.does_not_exist": "Kap %s existiert nicht", @@ -3998,7 +3995,6 @@ "gui.gtceu.share_tank.title": "Gemeinsames Tankinventar", "gui.widget.incrementButton.default_tooltip": "Halte Shift-, Strg- oder beide Tasten gedrückt, um die Menge zu ändern", "gui.widget.recipeProgressWidget.default_tooltip": "Rezepte anzeigen", - "item.glass_lens": "Glaslinse (weiß)", "item.gtceu.activity_detector_cover": "Aktivitätsdetektor", "item.gtceu.activity_detector_cover.tooltip": "§7Gibt §fAktivitätsstatus§7 als Redstone als §fAbdeckung§7 aus.", "item.gtceu.advanced_activity_detector_cover": "Erweiterter Aktivitätsdetektor", @@ -4249,6 +4245,7 @@ "item.gtceu.gelled_toluene": "Geliertes Toluol", "item.gtceu.gelled_toluene.tooltip": "§7Roher Sprengstoff", "item.gtceu.glass_gem": "Glaskristall", + "item.gtceu.glass_lens": "Glaslinse (weiß)", "item.gtceu.glass_plate": "Glasscheibe", "item.gtceu.glass_tube": "Glasrohr", "item.gtceu.glass_vial": "%s Glasfläschchen", @@ -4512,6 +4509,7 @@ "item.gtceu.naquadah_boule.tooltip": "§7Rohschaltung", "item.gtceu.naquadah_wafer": "Naquadah-dotierter Wafer", "item.gtceu.naquadah_wafer.tooltip": "§7Rohschaltung", + "item.gtceu.netherrack_nether_quartz": "Netherquarz-Erz", "item.gtceu.neuro_processing_unit": "Neuroverarbeitungseinheit", "item.gtceu.neuro_processing_unit.tooltip": "§7Neuro-CPU", "item.gtceu.neutron_reflector": "Iridium-Neutronenreflektor", @@ -4541,7 +4539,7 @@ "item.gtceu.opv_voltage_coil.tooltip": "Legendäre Spule", "item.gtceu.orange_dye_spray_can": "Sprühdose (Orange)", "item.gtceu.orange_glass_lens": "Glaslinse (Orange)", - "item.gtceu.palladium_raw_dust": "Rohes Palladiumpulver", + "item.gtceu.raw_palladium_dust": "Rohes Palladiumpulver", "item.gtceu.paper_dust": "Tschad", "item.gtceu.paracetamol_pill": "Paracetamol-Pille", "item.gtceu.petri_dish": "Petrischale", @@ -4699,7 +4697,7 @@ "item.gtceu.small_inert_metal_mixture_dust": "Kleiner Haufen inerter Metallmischung", "item.gtceu.small_iridium_metal_residue_dust": "Kleiner Haufen Iridiummetallrückstände", "item.gtceu.small_meat_dust": "Kleiner Haufen Hackfleisch", - "item.gtceu.small_palladium_raw_dust": "Kleiner Haufen rohes Palladiumpulver", + "item.gtceu.small_raw_palladium_dust": "Kleiner Haufen rohes Palladiumpulver", "item.gtceu.small_paper_dust": "Kleiner Haufen Tschad", "item.gtceu.small_pipe_casting_mold": "Gussform (kleines Rohr)", "item.gtceu.small_pipe_extruder_mold": "Extruderform (kleines Rohr)", @@ -4769,7 +4767,7 @@ "item.gtceu.tiny_inert_metal_mixture_dust": "Winziger Haufen inerter Metallmischung", "item.gtceu.tiny_iridium_metal_residue_dust": "Winziger Haufen Iridiummetallrückstände", "item.gtceu.tiny_meat_dust": "Winziger Haufen Hackfleisch", - "item.gtceu.tiny_palladium_raw_dust": "Winziger Haufen rohes Palladiumpulver", + "item.gtceu.tiny_raw_palladium_dust": "Winziger Haufen rohes Palladiumpulver", "item.gtceu.tiny_paper_dust": "Winziger Haufen Tschad", "item.gtceu.tiny_pipe_casting_mold": "Gussform (winziges Rohr)", "item.gtceu.tiny_pipe_extruder_mold": "Extruderform (winziges Rohr)", @@ -5022,7 +5020,6 @@ "item.gtceu.zpm_voltage_coil": "Spannungsspule des Nullpunktmoduls", "item.gtceu.zpm_voltage_coil.tooltip": "Superspule", "item.invalid.name": "Ungültiger Item", - "item.netherrack_nether_quartz": "Netherquarz-Erz", "itemGroup.gtceu.decoration": "GregTechCEu-Dekorationsblöcke", "itemGroup.gtceu.item": "GregTechCEu-Item", "itemGroup.gtceu.machine": "GregTech CEu-Maschinen", @@ -5273,7 +5270,7 @@ "material.gtceu.goethite": "Goethit", "material.gtceu.gold": "Gold", "material.gtceu.granite": "Granit", - "material.gtceu.granite_red": "Granit rot", + "material.gtceu.red_granite": "Granit rot", "material.gtceu.granitic_mineral_sand": "Granitischer Mineralsand", "material.gtceu.graphene": "Graphen", "material.gtceu.graphite": "Graphit", @@ -5443,9 +5440,9 @@ "material.gtceu.octane": "Oktan", "material.gtceu.oganesson": "Oganesson", "material.gtceu.oil": "Öl", - "material.gtceu.oil_heavy": "Schweröl", - "material.gtceu.oil_light": "Leichtes Öl", - "material.gtceu.oil_medium": "Rohöl", + "material.gtceu.heavy_oil": "Schweröl", + "material.gtceu.light_oil": "Leichtes Öl", + "material.gtceu.raw_oil": "Rohöl", "material.gtceu.oilsands": "Ölsande", "material.gtceu.olivine": "Olivin", "material.gtceu.opal": "Opal", @@ -5455,7 +5452,7 @@ "material.gtceu.osmium_tetroxide": "Osmiumtetroxid", "material.gtceu.oxygen": "Sauerstoff", "material.gtceu.palladium": "Palladium", - "material.gtceu.palladium_raw": "Palladium roh", + "material.gtceu.raw_palladium": "Palladium roh", "material.gtceu.paper": "Papier", "material.gtceu.paracetamol": "Paracetamol", "material.gtceu.pcb_coolant": "PCB-Kühlmittel", diff --git a/src/main/resources/assets/gtceu/lang/ja_jp.json b/src/main/resources/assets/gtceu/lang/ja_jp.json index 0ad30ee9fcf..d22b03eb32c 100644 --- a/src/main/resources/assets/gtceu/lang/ja_jp.json +++ b/src/main/resources/assets/gtceu/lang/ja_jp.json @@ -119,7 +119,7 @@ "block.gtceu.aluminium_drum": "アルミニウム製ドラム", "block.gtceu.antimatter_hazard_sign_block": "反物質危害警告ブロック", "block.gtceu.assembly_line": "アセンブリライン", - "block.gtceu.assembly_line_casing": "組立マシン外装", + "block.gtceu.assembly_control_casing": "組立マシン外装", "block.gtceu.assembly_line_grating": "アセンブリライン用格子", "block.gtceu.assembly_line_unit": "組立制御外装", "block.gtceu.atomic_casing": "原子マシン外装", @@ -138,7 +138,7 @@ "block.gtceu.blue_studs": "青鋲", "block.gtceu.boss_hazard_sign_block": "ボス危害警告ブロック", "block.gtceu.brittle_charcoal": "脆い木炭", - "block.gtceu.bronze_brick_casing": "ブロンズレンガ外装", + "block.gtceu.bricked_bronze_casing": "ブロンズレンガ外装", "block.gtceu.bronze_crate": "ブロンズ製クレート", "block.gtceu.bronze_drum": "ブロンズ製ドラム", "block.gtceu.bronze_firebox_casing": "ブロンズ製火室外装", @@ -153,8 +153,6 @@ "block.gtceu.brown_large_metal_sheet": "茶色の大きな板金ブロック", "block.gtceu.brown_metal_sheet": "茶色の板金ブロック", "block.gtceu.brown_studs": "茶鋲", - "block.gtceu.casing_coke_bricks": "コークス炉用レンガブロック", - "block.gtceu.casing_grate": "格子マシン外装", "block.gtceu.causality_hazard_sign_block": "因果関係的危険警告ブロック", "block.gtceu.central_monitor": "セントラルモニター", "block.gtceu.charcoal_pile_igniter": "炭窯", @@ -813,8 +811,8 @@ "block.gtceu.me_pattern_buffer_proxy": "MEパターンバッファプロキシ", "block.gtceu.me_stocking_input_bus": "ME在庫搬入バス", "block.gtceu.me_stocking_input_hatch": "ME在庫搬入ハッチ", - "block.gtceu.mega_blast_furnace": "回転式炉床炉", - "block.gtceu.mega_vacuum_freezer": "一括真空冷却機", + "block.gtceu.rotary_hearth_furnace": "回転式炉床炉", + "block.gtceu.bulk_blast_chiller": "一括真空冷却機", "block.gtceu.miner_pipe": "鉱夫パイプ", "block.gtceu.mob_infestation_hazard_sign_block": "モブ侵入危害警告ブロック", "block.gtceu.mob_spawner_hazard_sign_block": "スポナー危害警告ブロック", @@ -918,9 +916,9 @@ "block.gtceu.normal_optical_pipe.tooltip": "§f計算§7 または§f研究データ§7 の送信に", "block.gtceu.object_holder": "オブジェクトホルダー", "block.gtceu.oil": "原油", - "block.gtceu.oil_heavy": "重油", - "block.gtceu.oil_light": "軽油", - "block.gtceu.oil_medium": "原料油", + "block.gtceu.heavy_oil": "重油", + "block.gtceu.light_oil": "軽油", + "block.gtceu.raw_oil": "原料油", "block.gtceu.opv_1024a_laser_source_hatch": "§9§lOpV§r 1024§eA§r対応レーザー照射ハッチ", "block.gtceu.opv_1024a_laser_target_hatch": "§9§lOpV§r 1024§eA§r対応レーザー照準ハッチ", "block.gtceu.opv_16a_energy_converter": "§9§lOpV§r 16§eA§rエネルギー変換機", @@ -1009,7 +1007,7 @@ "block.gtceu.orange_metal_sheet": "橙色の板金ブロック", "block.gtceu.orange_studs": "橙鋲", "block.gtceu.overworld_marker": "オーバーワールド", - "block.gtceu.palladium_substation": "パラジウム製大型蓄電器用外装", + "block.gtceu.palladium_substation_casing": "パラジウム製大型蓄電器用外装", "block.gtceu.pattern_buffer.desc.0": "§fマルチブロックのために §6AE2 パターンを直接保存できる。", "block.gtceu.pattern_buffer.desc.1": "§fAE2 パターンは、§6 共有インベントリ§fウィジェットに格納されているものなら何でも利用できる。", "block.gtceu.pattern_buffer.desc.2": "§fリンク§6パターンバッファ マシンをリンクするための§bデータスティック§fを持つプロキシ!", @@ -1113,7 +1111,7 @@ "block.gtceu.steam_output_bus": "蒸気搬出バス", "block.gtceu.steam_oven": "蒸気式オーブン", "block.gtceu.steam_solid_boiler.bronze": "固形燃料用小型ボイラー", - "block.gtceu.steel_brick_casing": "錬鉄製レンガ筐体", + "block.gtceu.bricked_wrought_iron_casing": "錬鉄製レンガ筐体", "block.gtceu.steel_crate": "スチール製クレート", "block.gtceu.steel_drum": "スチール製ドラム", "block.gtceu.steel_firebox_casing": "スチール製火室外装", @@ -1123,7 +1121,7 @@ "block.gtceu.steel_multiblock_tank": "スチール製マルチブロックタンク", "block.gtceu.steel_pipe_casing": "スチール製パイプ外装", "block.gtceu.steel_tank_valve": "スチール製タンクバルブ", - "block.gtceu.steel_turbine_casing": "マグナリウム製タービン外装", + "block.gtceu.magnalium_turbine_casing": "マグナリウム製タービン外装", "block.gtceu.sterilizing_filter_casing": "滅菌フィルター外装", "block.gtceu.stress_proof_casing": "耐応力マシン外装", "block.gtceu.stripped_rubber_log": "ゴムの原木", @@ -1722,7 +1720,7 @@ "block.gtceu.zpm_wiremill": "§c精鋭型ワイヤー作製機 III§r", "block.gtceu.zpm_world_accelerator": "§c精鋭型世界加速機 III§r", "block.sterilizing_filter_casing.tooltip": "§a滅菌§7環境を構築する", - "block.surface_rock": "%sの小石", + "block.gtceu.surface_rock": "%sの小石", "button.gtceu.mark_as_depleted.name": "枯渇済みとしてマーク", "button.gtceu.toggle_waypoint.name": "ウェイポイントを切り替え", "command.gtceu.cape.failure.does_not_exist": "マント %s は存在しない", @@ -3923,7 +3921,6 @@ "gui.gtceu.share_tank.title": "共有タンク在庫", "gui.widget.incrementButton.default_tooltip": "Shift、Ctrlまたはその両方で量を変更", "gui.widget.recipeProgressWidget.default_tooltip": "レシピを表示", - "item.glass_lens": "白いガラスレンズ", "item.gtceu.activity_detector_cover": "動作検出器", "item.gtceu.activity_detector_cover.tooltip": "§7レッドストーン信号として§f動作状態§7を検出する§fカバー§7", "item.gtceu.advanced_activity_detector_cover": "発展型動作検出器", @@ -4174,6 +4171,7 @@ "item.gtceu.gelled_toluene": "ゲル状トルエン", "item.gtceu.gelled_toluene.tooltip": "§7爆発物の原料", "item.gtceu.glass_gem": "ガラスクリスタル", + "item.gtceu.glass_lens": "白いガラスレンズ", "item.gtceu.glass_plate": "ガラス板", "item.gtceu.glass_tube": "ガラス管", "item.gtceu.glass_vial": "%sのガラス製バイアル", @@ -4437,6 +4435,7 @@ "item.gtceu.naquadah_boule.tooltip": "§7回路の原料", "item.gtceu.naquadah_wafer": "ナクアダ添加シリコンウェハー", "item.gtceu.naquadah_wafer.tooltip": "§7回路の原料", + "item.gtceu.netherrack_nether_quartz": "ネザークォーツ鉱石", "item.gtceu.neuro_processing_unit": "神経処理装置", "item.gtceu.neuro_processing_unit.tooltip": "§7神経のCPU", "item.gtceu.neutron_reflector": "イリジウム製中性子反射板", @@ -4466,7 +4465,7 @@ "item.gtceu.opv_voltage_coil.tooltip": "伝説型コイル", "item.gtceu.orange_dye_spray_can": "橙色のスプレー缶", "item.gtceu.orange_glass_lens": "橙色のガラスレンズ", - "item.gtceu.palladium_raw_dust": "粗パラジウムパウダー", + "item.gtceu.raw_palladium_dust": "粗パラジウムパウダー", "item.gtceu.paper_dust": "紙くず", "item.gtceu.paracetamol_pill": "アセトアミノフェン錠", "item.gtceu.petri_dish": "ペトリ皿", @@ -4624,7 +4623,7 @@ "item.gtceu.small_inert_metal_mixture_dust": "小さな不活性金属混合物の粉", "item.gtceu.small_iridium_metal_residue_dust": "小さなイリジウム金属残留物の粉", "item.gtceu.small_meat_dust": "小さなひき肉", - "item.gtceu.small_palladium_raw_dust": "小さな粗パラジウムパウダー", + "item.gtceu.small_raw_palladium_dust": "小さな粗パラジウムパウダー", "item.gtceu.small_paper_dust": "小さな紙くず", "item.gtceu.small_pipe_casting_mold": "金型 (細いパイプ)", "item.gtceu.small_pipe_extruder_mold": "押出形成用金型 (細いパイプ)", @@ -4694,7 +4693,7 @@ "item.gtceu.tiny_inert_metal_mixture_dust": "極小の不活性金属混合物の粉", "item.gtceu.tiny_iridium_metal_residue_dust": "極小のイリジウム金属残留物の粉", "item.gtceu.tiny_meat_dust": "極小のひき肉", - "item.gtceu.tiny_palladium_raw_dust": "極小の粗パラジウムパウダー", + "item.gtceu.tiny_raw_palladium_dust": "極小の粗パラジウムパウダー", "item.gtceu.tiny_paper_dust": "極小の紙くず", "item.gtceu.tiny_pipe_casting_mold": "金型 (極細パイプ)", "item.gtceu.tiny_pipe_extruder_mold": "押出形成用金型 (極細パイプ)", @@ -4942,7 +4941,6 @@ "item.gtceu.zpm_voltage_coil": "Zero Point Module Voltage コイル", "item.gtceu.zpm_voltage_coil.tooltip": "素晴らしいコイル", "item.invalid.name": "無効なアイテム", - "item.netherrack_nether_quartz": "ネザークォーツ鉱石", "itemGroup.gtceu.decoration": "GregTechCEu装飾ブロック", "itemGroup.gtceu.item": "GregTechCEuアイテム", "itemGroup.gtceu.machine": "GregTechCEu機械", @@ -5193,7 +5191,7 @@ "material.gtceu.goethite": "針鉄鉱", "material.gtceu.gold": "金", "material.gtceu.granite": "花崗岩", - "material.gtceu.granite_red": "赤色花崗岩", + "material.gtceu.red_granite": "赤色花崗岩", "material.gtceu.granitic_mineral_sand": "花崗岩質含鉱砂", "material.gtceu.graphene": "グラフェン", "material.gtceu.graphite": "グラファイト", @@ -5363,9 +5361,9 @@ "material.gtceu.octane": "オクタン", "material.gtceu.oganesson": "オガネソン", "material.gtceu.oil": "原油", - "material.gtceu.oil_heavy": "重油", - "material.gtceu.oil_light": "軽油", - "material.gtceu.oil_medium": "原料油", + "material.gtceu.heavy_oil": "重油", + "material.gtceu.light_oil": "軽油", + "material.gtceu.raw_oil": "原料油", "material.gtceu.oilsands": "オイルサンド", "material.gtceu.olivine": "オリビン", "material.gtceu.opal": "オパール", @@ -5375,7 +5373,7 @@ "material.gtceu.osmium_tetroxide": "四酸化オスミウム", "material.gtceu.oxygen": "酸素", "material.gtceu.palladium": "パラジウム", - "material.gtceu.palladium_raw": "生のパラジウム", + "material.gtceu.raw_palladium": "生のパラジウム", "material.gtceu.paper": "紙", "material.gtceu.paracetamol": "アセトアミノフェン", "material.gtceu.pcb_coolant": "PCBクーラント", diff --git a/src/main/resources/assets/gtceu/lang/pt_br.json b/src/main/resources/assets/gtceu/lang/pt_br.json index 53a277ea555..c5d932e2709 100644 --- a/src/main/resources/assets/gtceu/lang/pt_br.json +++ b/src/main/resources/assets/gtceu/lang/pt_br.json @@ -119,7 +119,7 @@ "block.gtceu.aluminium_drum": "Tambor de Alumínio", "block.gtceu.antimatter_hazard_sign_block": "Bloco de Sinal de Risco de Antimatéria", "block.gtceu.assembly_line": "Linha de Montagem", - "block.gtceu.assembly_line_casing": "Revestimento de Linha de Montagem", + "block.gtceu.assembly_control_casing": "Revestimento de Linha de Montagem", "block.gtceu.assembly_line_grating": "Grade de Linha de Montagem", "block.gtceu.assembly_line_unit": "Revestimento de Controle de Montagem", "block.gtceu.atomic_casing": "Revestimento Atômico", @@ -138,7 +138,7 @@ "block.gtceu.blue_studs": "Pinos Azuis", "block.gtceu.boss_hazard_sign_block": "Bloco de Sinal de Risco de Chefe", "block.gtceu.brittle_charcoal": "Carvão Vegetal Quebradiço", - "block.gtceu.bronze_brick_casing": "Revestimento de Tijolos de Bronze", + "block.gtceu.bricked_bronze_casing": "Revestimento de Tijolos de Bronze", "block.gtceu.bronze_crate": "Caixote de Bronze", "block.gtceu.bronze_drum": "Tambor de Bronze", "block.gtceu.bronze_firebox_casing": "Revestimento de Fornalha de Bronze", @@ -153,8 +153,6 @@ "block.gtceu.brown_large_metal_sheet": "Chapa de Metal Grande Marrom", "block.gtceu.brown_metal_sheet": "Chapa de Metal Marrom", "block.gtceu.brown_studs": "Pinos Marrons", - "block.gtceu.casing_coke_bricks": "Tijolos de Forno de Coque", - "block.gtceu.casing_grate": "Revestimento de Máquina com Grade", "block.gtceu.causality_hazard_sign_block": "Bloco de Sinal de Risco de Causalidade", "block.gtceu.central_monitor": "Monitor Central", "block.gtceu.charcoal_pile_igniter": "Ignitor de Pilha de Carvão Vegetal", @@ -813,8 +811,8 @@ "block.gtceu.me_pattern_buffer_proxy": "Proxy de Buffer de Padrões ME", "block.gtceu.me_stocking_input_bus": "Barramento de Entrada de Estoque ME", "block.gtceu.me_stocking_input_hatch": "Escotilha de Entrada de Estoque ME", - "block.gtceu.mega_blast_furnace": "Forno de Lareira Rotativa", - "block.gtceu.mega_vacuum_freezer": "Resfriador de Explosão em Massa", + "block.gtceu.rotary_hearth_furnace": "Forno de Lareira Rotativa", + "block.gtceu.bulk_blast_chiller": "Resfriador de Explosão em Massa", "block.gtceu.miner_pipe": "Tubo de Minerador", "block.gtceu.mob_infestation_hazard_sign_block": "Bloco de Sinal de Risco de Infestação de Criaturas", "block.gtceu.mob_spawner_hazard_sign_block": "Bloco de Sinal de Risco de Gerador de Criaturas", @@ -918,9 +916,9 @@ "block.gtceu.normal_optical_pipe.tooltip": "§7Transmitindo §fComputação§7 ou §fDados de Pesquisa§7", "block.gtceu.object_holder": "Suporte de Objeto", "block.gtceu.oil": "Óleo", - "block.gtceu.oil_heavy": "Óleo Pesado", - "block.gtceu.oil_light": "Óleo Leve", - "block.gtceu.oil_medium": "Óleo Bruto", + "block.gtceu.heavy_oil": "Óleo Pesado", + "block.gtceu.light_oil": "Óleo Leve", + "block.gtceu.raw_oil": "Óleo Bruto", "block.gtceu.opv_1024a_laser_source_hatch": "Escotilha de Fonte de Laser 1.024§eA§r §9§lOpV§r", "block.gtceu.opv_1024a_laser_target_hatch": "Escotilha de Alvo de Laser 1.024§eA§r §9§lOpV§r", "block.gtceu.opv_16a_energy_converter": "Conversor de Energia §9§lOpV§r 16§eA§r", @@ -1009,7 +1007,7 @@ "block.gtceu.orange_metal_sheet": "Chapa de Metal Laranja", "block.gtceu.orange_studs": "Pinos Laranjas", "block.gtceu.overworld_marker": "Mundo Superior", - "block.gtceu.palladium_substation": "Revestimento de Subestação de Paládio", + "block.gtceu.palladium_substation_casing": "Revestimento de Subestação de Paládio", "block.gtceu.pattern_buffer.desc.0": "§fPermite armazenamento direto de padrões §6AE2 §fpara Multiblocos GregTech.", "block.gtceu.pattern_buffer.desc.1": "§fPadrões AE2 podem utilizar qualquer coisa armazenada no widget de §6inventário compartilhado§f.", "block.gtceu.pattern_buffer.desc.2": "§fVincule §6Proxies de Buffer de Padrões §fcom um §bdatastick §fpara interligar máquinas!", @@ -1113,7 +1111,7 @@ "block.gtceu.steam_output_bus": "Barramento de Saída de Vapor", "block.gtceu.steam_oven": "Forno a Vapor", "block.gtceu.steam_solid_boiler.bronze": "Caldeira Sólida a Vapor Pequena", - "block.gtceu.steel_brick_casing": "Revestimento de Ferro Forjado com Tijolos", + "block.gtceu.bricked_wrought_iron_casing": "Revestimento de Ferro Forjado com Tijolos", "block.gtceu.steel_crate": "Caixote de Aço", "block.gtceu.steel_drum": "Tambor de Aço", "block.gtceu.steel_firebox_casing": "Revestimento de Fornalha de Aço", @@ -1123,7 +1121,7 @@ "block.gtceu.steel_multiblock_tank": "Tanque Multibloco de Aço", "block.gtceu.steel_pipe_casing": "Revestimento de Tubo de Aço", "block.gtceu.steel_tank_valve": "Válvula de Tanque de Aço", - "block.gtceu.steel_turbine_casing": "Revestimento de Turbina de Magnálio", + "block.gtceu.magnalium_turbine_casing": "Revestimento de Turbina de Magnálio", "block.gtceu.sterilizing_filter_casing": "Revestimento de Filtro Esterilizador", "block.gtceu.stress_proof_casing": "Revestimento à Prova de Estresse", "block.gtceu.stripped_rubber_log": "Tora de Borracha Descascada", @@ -1722,7 +1720,7 @@ "block.gtceu.zpm_wiremill": "§cTrefiladora de Elite III§r", "block.gtceu.zpm_world_accelerator": "§cAcelerador de Mundo de Elite III§r", "block.sterilizing_filter_casing.tooltip": "Cria um ambiente §aEsterilizado§7", - "block.surface_rock": "Rocha de Superfície de %s", + "block.gtceu.surface_rock": "Rocha de Superfície de %s", "button.gtceu.mark_as_depleted.name": "Marcar como Esgotado", "button.gtceu.toggle_waypoint.name": "Alternar Waypoint", "command.gtceu.cape.failure.does_not_exist": "A capa %s não existe", @@ -3994,7 +3992,6 @@ "gui.gtceu.share_tank.title": "Inventário de Tanque Compartilhado", "gui.widget.incrementButton.default_tooltip": "Segure Shift, Ctrl ou ambos para alterar a quantidade", "gui.widget.recipeProgressWidget.default_tooltip": "Mostrar Receitas", - "item.glass_lens": "Lente de Vidro (Branca)", "item.gtceu.activity_detector_cover": "Detector de Atividade", "item.gtceu.activity_detector_cover.tooltip": "§7Emite §fStatus de Atividade§7 como Redstone como §fCobertura§7.", "item.gtceu.advanced_activity_detector_cover": "Detector de Atividade Avançado", @@ -4245,6 +4242,7 @@ "item.gtceu.gelled_toluene": "Tolueno Geleificado", "item.gtceu.gelled_toluene.tooltip": "§7Explosivo Bruto", "item.gtceu.glass_gem": "Cristal de Vidro", + "item.gtceu.glass_lens": "Lente de Vidro (Branca)", "item.gtceu.glass_plate": "Painel de Vidro", "item.gtceu.glass_tube": "Tubo de Vidro", "item.gtceu.glass_vial": "Frasco de Vidro de %s", @@ -4537,7 +4535,7 @@ "item.gtceu.opv_voltage_coil.tooltip": "Bobina Lendária", "item.gtceu.orange_dye_spray_can": "Lata de Spray (Laranja)", "item.gtceu.orange_glass_lens": "Lente de Vidro (Laranja)", - "item.gtceu.palladium_raw_dust": "Pó de Paládio Bruto", + "item.gtceu.raw_palladium_dust": "Pó de Paládio Bruto", "item.gtceu.paper_dust": "Confete", "item.gtceu.paracetamol_pill": "Pílula de Paracetamol", "item.gtceu.petri_dish": "Placa de Petri", @@ -4695,7 +4693,7 @@ "item.gtceu.small_inert_metal_mixture_dust": "Pilha Pequena de Mistura de Metais Inertes", "item.gtceu.small_iridium_metal_residue_dust": "Pilha Pequena de Resíduo Metálico de Irídio", "item.gtceu.small_meat_dust": "Pilha Pequena de Carne Moída", - "item.gtceu.small_palladium_raw_dust": "Pilha Pequena de Pó de Paládio Bruto", + "item.gtceu.small_raw_palladium_dust": "Pilha Pequena de Pó de Paládio Bruto", "item.gtceu.small_paper_dust": "Pilha Pequena de Confete", "item.gtceu.small_pipe_casting_mold": "Molde de Fundição (Tubo Pequeno)", "item.gtceu.small_pipe_extruder_mold": "Molde de Extrusora (Tubo Pequeno)", @@ -4765,7 +4763,7 @@ "item.gtceu.tiny_inert_metal_mixture_dust": "Pilha Minúscula de Mistura de Metais Inertes", "item.gtceu.tiny_iridium_metal_residue_dust": "Pilha Minúscula de Resíduo Metálico de Irídio", "item.gtceu.tiny_meat_dust": "Pilha Minúscula de Carne Moída", - "item.gtceu.tiny_palladium_raw_dust": "Pilha Minúscula de Pó de Paládio Bruto", + "item.gtceu.tiny_raw_palladium_dust": "Pilha Minúscula de Pó de Paládio Bruto", "item.gtceu.tiny_paper_dust": "Pilha Minúscula de Confete", "item.gtceu.tiny_pipe_casting_mold": "Molde de Fundição (Tubo Minúsculo)", "item.gtceu.tiny_pipe_extruder_mold": "Molde de Extrusora (Tubo Minúsculo)", @@ -5018,7 +5016,6 @@ "item.gtceu.zpm_voltage_coil": "Bobina de Tensão de Módulo de Ponto Zero", "item.gtceu.zpm_voltage_coil.tooltip": "Bobina Super", "item.invalid.name": "Item inválido", - "item.netherrack_nether_quartz": "Minério de Quartzo do Nether", "itemGroup.gtceu.decoration": "Blocos de Decoração GregTechCEu", "itemGroup.gtceu.item": "Itens GregTechCEu", "itemGroup.gtceu.machine": "Máquinas GregTechCEu", @@ -5269,7 +5266,7 @@ "material.gtceu.goethite": "Goethita", "material.gtceu.gold": "Ouro", "material.gtceu.granite": "Granito", - "material.gtceu.granite_red": "Granito Vermelho", + "material.gtceu.red_granite": "Granito Vermelho", "material.gtceu.granitic_mineral_sand": "Areia Mineral Granítica", "material.gtceu.graphene": "Grafeno", "material.gtceu.graphite": "Grafite", @@ -5439,9 +5436,9 @@ "material.gtceu.octane": "Octano", "material.gtceu.oganesson": "Oganessônio", "material.gtceu.oil": "Petróleo", - "material.gtceu.oil_heavy": "Petróleo Pesado", - "material.gtceu.oil_light": "Petróleo Leve", - "material.gtceu.oil_medium": "Petróleo Bruto", + "material.gtceu.heavy_oil": "Petróleo Pesado", + "material.gtceu.light_oil": "Petróleo Leve", + "material.gtceu.raw_oil": "Petróleo Bruto", "material.gtceu.oilsands": "Areias Betuminosas", "material.gtceu.olivine": "Olivina", "material.gtceu.opal": "Opala", @@ -5451,7 +5448,7 @@ "material.gtceu.osmium_tetroxide": "Tetróxido de Ósmio", "material.gtceu.oxygen": "Oxigênio", "material.gtceu.palladium": "Paládio", - "material.gtceu.palladium_raw": "Paládio Bruto", + "material.gtceu.raw_palladium": "Paládio Bruto", "material.gtceu.paper": "Papel", "material.gtceu.paracetamol": "Paracetamol", "material.gtceu.pcb_coolant": "Líquido de Arrefecimento PCB", diff --git a/src/main/resources/assets/gtceu/lang/ru_ru.json b/src/main/resources/assets/gtceu/lang/ru_ru.json index c952c2a6052..114b9518507 100644 --- a/src/main/resources/assets/gtceu/lang/ru_ru.json +++ b/src/main/resources/assets/gtceu/lang/ru_ru.json @@ -67,12 +67,12 @@ "block.gtceu.aluminium_crate": "Алюминиевый ящик", "block.gtceu.aluminium_drum": "Алюминиевая бочка", "block.gtceu.assembly_line": "Сборочный конвейер", - "block.gtceu.assembly_line_casing": "Корпус сборочной линии", + "block.gtceu.assembly_control_casing": "Корпус сборочной линии", "block.gtceu.assembly_line_grating": "Вентиляционный корпус", "block.gtceu.assembly_line_unit": "Корпус сборочной линии", "block.gtceu.atomic_casing": "Атомный корпус", "block.gtceu.auto_maintenance_hatch": "Автоматический люк обслуживания", - "block.gtceu.bronze_brick_casing": "Кирпичный корпус из бронзы", + "block.gtceu.bricked_bronze_casing": "Кирпичный корпус из бронзы", "block.gtceu.bronze_crate": "Бронзовый ящик", "block.gtceu.bronze_drum": "Бронзовая бочка", "block.gtceu.bronze_firebox_casing": "Бронзовый корпус топки", @@ -80,8 +80,6 @@ "block.gtceu.bronze_large_boiler": "Большой бронзовый котел", "block.gtceu.bronze_machine_casing": "Бронзовый корпус машины", "block.gtceu.bronze_pipe_casing": "Корпус бронзовой трубы", - "block.gtceu.casing_coke_bricks": "Кирпичи коксовой печи", - "block.gtceu.casing_grate": "Вентиляционный корпус", "block.gtceu.clean_machine_casing": "Очищенный корпус из нержавеющей стали", "block.gtceu.cleaning_maintenance_hatch": "Люк обслуживания автоматической фильтрации", "block.gtceu.cleanroom": "Чистая комната", @@ -561,8 +559,8 @@ "block.gtceu.me_input_hatch": "ME жидкостный люк", "block.gtceu.me_output_bus": "ME Выходной предметный люк", "block.gtceu.me_output_hatch": "ME Выходной жидкостный люк", - "block.gtceu.mega_blast_furnace": "Карусельная печь", - "block.gtceu.mega_vacuum_freezer": "Аппарат шоковой заморозки", + "block.gtceu.rotary_hearth_furnace": "Карусельная печь", + "block.gtceu.bulk_blast_chiller": "Аппарат шоковой заморозки", "block.gtceu.miner_pipe": "Труба шахтера", "block.gtceu.molybdenum_disilicide_coil_block": "Катушка из дисилицида молибдена", "block.gtceu.multi_smelter": "Мультиплавильня", @@ -642,9 +640,9 @@ "block.gtceu.nichrome_coil_block": "Нихромовая катушка", "block.gtceu.nonconducting_casing": "Изолированный корпус", "block.gtceu.normal_laser_pipe": "Передающий лазерный кабель", - "block.gtceu.oil_heavy": "Тяжелая нефть", - "block.gtceu.oil_light": "Легкая нефть", - "block.gtceu.oil_medium": "Средняя нефть", + "block.gtceu.heavy_oil": "Тяжелая нефть", + "block.gtceu.light_oil": "Легкая нефть", + "block.gtceu.raw_oil": "Средняя нефть", "block.gtceu.opv_1024a_laser_source_hatch": "Люк для лазерного источника (1024§eA§r §9§lOpV§r)", "block.gtceu.opv_1024a_laser_target_hatch": "Люк для лазерного приемника (1024§eA§r §9§lOpV§r)", "block.gtceu.opv_16a_energy_converter": "Преобразователь энергии (16§eA§r §9§lOpV§r)", @@ -709,7 +707,7 @@ "block.gtceu.opv_sifter": "§9§lСовершенный просеиватель §r", "block.gtceu.opv_thermal_centrifuge": "§9Совершенная термальная центрифуга §r", "block.gtceu.opv_wiremill": "§9§lСовершенный волочильный станок §r", - "block.gtceu.palladium_substation": "Палладиевый корпус подстанции", + "block.gtceu.palladium_substation_casing": "Палладиевый корпус подстанции", "block.gtceu.plascrete": "Пластбетон", "block.gtceu.plasma_large_turbine": "Большая плазменная турбина", "block.gtceu.power_substation": "Силовая подстанция", @@ -751,7 +749,7 @@ "block.gtceu.steam_output_bus": "Паровой выходной предметный люк", "block.gtceu.steam_oven": "Паровая плавильня", "block.gtceu.steam_solid_boiler.bronze": "Маленький угольный паровой котел", - "block.gtceu.steel_brick_casing": "Кирпичный корпус из кованого железа", + "block.gtceu.bricked_wrought_iron_casing": "Кирпичный корпус из кованого железа", "block.gtceu.steel_crate": "Стальной ящик", "block.gtceu.steel_drum": "Стальная бочка", "block.gtceu.steel_firebox_casing": "Стальной корпус топки", @@ -759,7 +757,7 @@ "block.gtceu.steel_large_boiler": "Большой стальной котел", "block.gtceu.steel_machine_casing": "Стальной корпус", "block.gtceu.steel_pipe_casing": "Корпус стальной трубы", - "block.gtceu.steel_turbine_casing": "Стальной корпус турбины", + "block.gtceu.magnalium_turbine_casing": "Стальной корпус турбины", "block.gtceu.sterilizing_filter_casing": "Корпус стерилизующего фильтра", "block.gtceu.stress_proof_casing": "Корпус устойчивый к напряжению", "block.gtceu.sturdy_machine_casing": "Корпус из прочной HSS-E стали", @@ -1238,7 +1236,7 @@ "block.gtceu.zpm_transformer_2a": "Высокотоковый трансформатор (2А §cZPM§r)", "block.gtceu.zpm_transformer_4a": "Высокотоковый трансформатор (4А §cZPM§r)", "block.gtceu.zpm_wiremill": "§cПревосходный волочильный станок III§r", - "block.surface_rock": "Поверхностная порода (%s)", + "block.gtceu.surface_rock": "Поверхностная порода (%s)", "config.gtceu.option.allUniqueStoneTypes": "allUniqueStoneTypes", "config.gtceu.option.bedrockOreDropTagPrefix": "bedrockOreDropTagPrefix", "config.gtceu.option.cleanMultiblocks": "cleanMultiblocks", @@ -2508,6 +2506,7 @@ "item.gtceu.nano_saber.tooltip": "§7Ryujin no ken wo kurae!", "item.gtceu.naquadah_boule": "Монокристаллический кремний легированный наквадой", "item.gtceu.naquadah_wafer": "Пластина легированная наквадой", + "item.gtceu.netherrack_nether_quartz": "Незер-кварцевая руда", "item.gtceu.neuro_processing_unit": "Нейронный блок обработки", "item.gtceu.neutron_reflector": "Иридиевый нейтронный отражатель", "item.gtceu.neutron_reflector.tooltip": "§7Неразрушимый", @@ -3387,7 +3386,6 @@ "gtceu.tool.class.saw": "Пила", "gtceu.tool.class.screwdriver": "Отвертка", "gtceu.tool.class.shovel": "Лопата", - "item.glass_lens": "Стеклянная линза (Белый)", "item.gtceu.activity_detector_cover.tooltip": "§7Выдает §fПрогресс Работы§7 Сигналом Красного камня как §fУлучшение механизма§7.", "item.gtceu.advanced_activity_detector_cover.tooltip": "§7Выдает §fСтатус прогресса§7 Сигналом Красного камня как §fУлучшение механизма§7.", "item.gtceu.advanced_energy_detector_cover.tooltip": "§7Даёт §fRS-триггеру контроль§7 за §fУровнем энергии§7 Сигналом Красного камня как §fУлучшение механизма§7.", @@ -3640,6 +3638,7 @@ "item.gtceu.exquisite_glass_gem": "Изысканный хрусталь", "item.gtceu.flawless_glass_gem": "Безупречный хрусталь", "item.gtceu.glass_gem": "Стеклянный кристалл", + "item.gtceu.glass_lens": "Стеклянная линза (Белый)", "item.gtceu.ice_dust": "Колотый лёд", "item.gtceu.impure_cassiterite_sand_dust": "Грязная кучка касситеритного песка", "item.gtceu.iridium_metal_residue_dust": "Металлический остаток иридия", @@ -3700,7 +3699,7 @@ "material.gtceu.gallium_arsenide": "Арсенид галлия", "material.gtceu.gelatin_mixture": "Желатиновая смесь", "material.gtceu.glauconite_sand": "Глауконитовый песок", - "material.gtceu.granite_red": "Красный гранит", + "material.gtceu.red_granite": "Красный гранит", "material.gtceu.green_sapphire_slurry": "Шлам зелёного сапфира", "material.gtceu.hematite": "Гематит", "material.gtceu.hydro_cracked_butadiene": "Бутадиен прошедший крекинг водородом", @@ -3780,9 +3779,9 @@ "material.gtceu.octane": "Октан", "material.gtceu.oganesson": "Оганесон", "material.gtceu.oil": "Нефть", - "material.gtceu.oil_heavy": "Тяжелая нефть", - "material.gtceu.oil_light": "Легкая нефть", - "material.gtceu.oil_medium": "Средняя нефть", + "material.gtceu.heavy_oil": "Тяжелая нефть", + "material.gtceu.light_oil": "Легкая нефть", + "material.gtceu.raw_oil": "Средняя нефть", "material.gtceu.oilsands": "Нефтеносный песок", "material.gtceu.olivine": "Оливин", "material.gtceu.opal": "Опал", @@ -4026,7 +4025,7 @@ "item.gtceu.long_treated_wood_rod": "Длинная обработанная деревянная палка", "item.gtceu.long_wood_rod": "Длинная деревянная палка", "item.gtceu.meat_dust": "Мясной фарш", - "item.gtceu.palladium_raw_dust": "Необработанный порошок палладия", + "item.gtceu.raw_palladium_dust": "Необработанный порошок палладия", "item.gtceu.paper_dust": "Целлюлоза", "item.gtceu.pitchblende_dust": "Уранит", "item.gtceu.platinum_raw_dust": "Необработанный платиновый порошок", @@ -4057,7 +4056,7 @@ "item.gtceu.small_ice_dust": "Маленькая кучка колотого льда", "item.gtceu.small_inert_metal_mixture_dust": "Маленькая кучка инертной смеси металлов", "item.gtceu.small_meat_dust": "Маленькая кучка мясного фарша", - "item.gtceu.small_palladium_raw_dust": "Маленькая кучка необработанного порошка палладия", + "item.gtceu.small_raw_palladium_dust": "Маленькая кучка необработанного порошка палладия", "item.gtceu.small_paper_dust": "Маленькая кучка целлюлозы", "item.gtceu.small_platinum_group_sludge_dust": "Маленький комок шлама платиновой группы", "item.gtceu.small_platinum_raw_dust": "Маленькая кучка необработанного платинового порошка", @@ -4082,7 +4081,7 @@ "item.gtceu.tiny_ice_dust": "Крошечная кучка колотого льда", "item.gtceu.tiny_inert_metal_mixture_dust": "Крошечная кучка инертной смеси металлов", "item.gtceu.tiny_meat_dust": "Крошечная кучка мясного фарша", - "item.gtceu.tiny_palladium_raw_dust": "Крошечная кучка необработанного порошка палладия", + "item.gtceu.tiny_raw_palladium_dust": "Крошечная кучка необработанного порошка палладия", "item.gtceu.tiny_paper_dust": "Крошечная куча целлюлозы", "item.gtceu.tiny_pitchblende_dust": "Крошечная кучка уранита", "item.gtceu.tiny_platinum_raw_dust": "Крошечная кучка необработанного платинового порошка", @@ -4368,7 +4367,7 @@ "material.gtceu.osmium_tetroxide": "Тетроксид осмия", "material.gtceu.oxygen": "Кислород", "material.gtceu.palladium": "Палладий", - "material.gtceu.palladium_raw": "Необработанный палладий", + "material.gtceu.raw_palladium": "Необработанный палладий", "material.gtceu.paper": "Бумага", "material.gtceu.pcb_coolant": "Диэлектрический хладоген (ПХД)", "material.gtceu.pentlandite": "Пентландит", @@ -4941,7 +4940,6 @@ "block.gtceu.gray_borderless_lamp": "Серая лампа (Без границ)", "command.gtceu.medical_condition.get": "У игрока %s следующие заболевания:", "block.gtceu.the_nether_marker": "Нижний мир", - "block.gtceu.evaporation_plant": "Градирня", "material.gtceu.potassium_sulfate": "Сульфат калия", "behavior.portable_scanner.local_hazard": "Опасность в области: %s§r - %s ppm", "behavior.portable_scanner.local_hazard.nothing": "Опасность в области: §6Ничего§r", @@ -4957,11 +4955,8 @@ "material.gtceu.dichloroethane": "Дихлорэтан", "material.gtceu.diethylenetriamine": "Диэтилентриамин", "material.gtceu.diethylenetriaminepentaacetic_acid": "Диэтилентриаминпентауксусная кислота", - "material.gtceu.debrominated_brine": "Дебромированный соляной раствор", "material.gtceu.formamide": "Формамид", "material.gtceu.glycolonitrile": "Гликолонитрил", - "material.gtceu.hot_alkaline_debrominated_brine": "Горячий щелочной дебромированный соляной раствор", - "material.gtceu.hot_brine": "Горячий соляной раствор", "material.gtceu.paracetamol": "Парацетамол", "material.gtceu.potassium_cyanide": "Цианистый калий", "material.gtceu.potassium_ferrocyanide": "Ферроцианид калия", @@ -4971,7 +4966,6 @@ "death.attack.gtceu.medical_condition/poison": "%s забыл что яды ядовиты", "material.gtceu.acetic_anhydride": "Уксусный ангидрид", "material.gtceu.calcium_carbonate": "Карбонат кальция", - "material.gtceu.concentrated_bromine_solution": "Концентрированный раствор брома", "material.gtceu.formaldehyde": "Формальдегид", "material.gtceu.formic_acid": "Муравьиная кислота", "material.gtceu.aminophenol": "Аминофенол", @@ -5112,7 +5106,6 @@ "death.attack.gtceu.medical_condition/weak_poison": "%s поел свинца (или ртути!)", "gtceu.air_scrubber": "Очиститель воздуха", "gtceu.duct_pipe.transfer_rate": "§bСкорость передачи воздуха: %s", - "gtceu.evaporation": "Выпаривание", "tooltip.gtceu.hazard_trigger.any": "При любом контакте", "tooltip.gtceu.hazard_trigger": "Проявляется при:", "tooltip.gtceu.hazard_trigger.inhalation": "Вдыхание вредных веществ", @@ -5136,7 +5129,6 @@ "config.gtceu.option.voltageTierQuarkTech": "voltageTierQuarkTech", "config.gtceu.option.zombieSpawnWithSabers": "zombieSpawnWithSabers", "config.gtceu.option.hideOreProcessingDiagrams": "hideOreProcessingDiagrams", - "block.gtceu.stainless_evaporation_casing": "Нержавеющий корпус градирни", "item.gtceu.battery.charge_detailed": "%s/%s EU§7 - Уровень %s §7(%s/%s %s осталось§7)", "item.gtceu.invar_lighter": "Инваровая зажигалка", "item.gtceu.matchbox": "Пачка спичек", @@ -5145,20 +5137,11 @@ "item.gtceu.nano_saber": "Нано-сабля", "item.gtceu.paracetamol_pill": "Таблетка парацетамола", "item.gtceu.pill_casting_mold": "Отливная форма (Таблетка)", - "material.gtceu.acidic_bromine_exhaust": "Кислотно-бромный выхлоп", - "material.gtceu.acidic_bromine_solution": "Кислотный раствор брома", "material.gtceu.ammonium_formate": "Формиат аммония", "tagprefix.blackstone": "%s (Чернитная руда)", - "tile.gtceu.brittle_charcoal.tooltip.1": "Добудь это что бы получить Древесный уголь.", - "tile.gtceu.brittle_charcoal.name": "Хрупкий древесный уголь", - "tile.gtceu.brittle_charcoal.tooltip.0": "Сделан с помощью воспламенителя угольной ямы.", - "material.gtceu.brominated_chlorine_vapor": "Бромированные пары хлора", - "material.gtceu.raw_brine": "Необработанный cоляной раствор", "item.gtceu.face_mask": "Медицинская маска", "item.gtceu.rad_away_pill": "Таблетка Антирадина", "item.gtceu.rubber_gloves": "Резиновые перчатки", - "material.gtceu.hot_chlorinated_brominated_brine": "Горячий хлорированный бромированный соляной раствор", - "material.gtceu.hot_debrominated_brine": "Горячий дебромированный соляной раствор", "block.gtceu.brown_large_metal_sheet": "Крупный коричневый лист металла", "block.gtceu.uev_transformer_16a": "Силовой трансформатор (§aUEV§r)", "block.gtceu.normal_optical_pipe.tooltip": "§7Передает данные §fИсследования§7 или §fВычислений§7", @@ -5354,7 +5337,6 @@ "item.gtceu.treated_wood_chest_boat": "Обработанная деревянная лодка с сундуком", "material.gtceu.echo_shard": "Осколок эха", "material.gtceu.sculk": "Скалк", - "material.gtceu.hydrogen_iodide": "Йодид водорода", "metaarmor.nms.boosted_jump.enabled": "NanoMuscle™ Suite: Прыгучесть включена", "recipe.condition.adjacent_block.tooltip": "Блоки вокруг", "metaarmor.nms.boosted_jump.disabled": "NanoMuscle™ Suite: Прыгучесть выключена", diff --git a/src/main/resources/assets/gtceu/lang/uk_ua.json b/src/main/resources/assets/gtceu/lang/uk_ua.json index 126e385c951..eb38f936bde 100644 --- a/src/main/resources/assets/gtceu/lang/uk_ua.json +++ b/src/main/resources/assets/gtceu/lang/uk_ua.json @@ -127,7 +127,7 @@ "block.gtceu.aluminium_drum": "Алюмінієва бочка", "block.gtceu.antimatter_hazard_sign_block": "Блок зі знаком антиматеріальної небезпеки", "block.gtceu.assembly_line": "Конвеєрна лінія", - "block.gtceu.assembly_line_casing": "Корпус конвеєрної лінії", + "block.gtceu.assembly_control_casing": "Корпус конвеєрної лінії", "block.gtceu.assembly_line_grating": "Решітка конвеєрної лінії", "block.gtceu.assembly_line_unit": "Конвеєрний контролювальний корпус", "block.gtceu.atomic_casing": "Атомний корпус", @@ -146,7 +146,7 @@ "block.gtceu.blue_studs": "Сині кубики", "block.gtceu.boss_hazard_sign_block": "Блок зі знаком босової небезпеки", "block.gtceu.brittle_charcoal": "Крихке деревне вугілля", - "block.gtceu.bronze_brick_casing": "Мурований бронзовий корпус", + "block.gtceu.bricked_bronze_casing": "Мурований бронзовий корпус", "block.gtceu.bronze_crate": "Бронзовий ящик", "block.gtceu.bronze_drum": "Бронзова бочка", "block.gtceu.bronze_firebox_casing": "Бронзова топка", @@ -161,8 +161,6 @@ "block.gtceu.brown_large_metal_sheet": "Коричневе велике металеве покриття", "block.gtceu.brown_metal_sheet": "Коричневе металеве покриття", "block.gtceu.brown_studs": "Коричневі кубики", - "block.gtceu.casing_coke_bricks": "Цегла коксової печі", - "block.gtceu.casing_grate": "Заґратований корпус машини", "block.gtceu.causality_hazard_sign_block": "Блок зі знаком причинно-наслідкової небезпеки", "block.gtceu.central_monitor": "Центральний монітор", "block.gtceu.charcoal_pile_igniter": "Запалювач вугільної купи", @@ -822,8 +820,8 @@ "block.gtceu.me_pattern_buffer_proxy": "Проксі ME шаблонного буфера", "block.gtceu.me_stocking_input_bus": "МЕ Складальна вхідна шина", "block.gtceu.me_stocking_input_hatch": "МЕ Складальний ввідний люк", - "block.gtceu.mega_blast_furnace": "Ротаційна мартенівська піч", - "block.gtceu.mega_vacuum_freezer": "Масовий шоковий охолоджувач", + "block.gtceu.rotary_hearth_furnace": "Ротаційна мартенівська піч", + "block.gtceu.bulk_blast_chiller": "Масовий шоковий охолоджувач", "block.gtceu.miner_pipe": "Бурова труба", "block.gtceu.mob_infestation_hazard_sign_block": "Блок зі знаком небезпеки зараження мобів", "block.gtceu.mob_spawner_hazard_sign_block": "Блок зі знаком породжувальної небезпеки", @@ -927,9 +925,9 @@ "block.gtceu.normal_optical_pipe.tooltip": "§7Транспортує§f обчислення§7 або§f дослідницькі дані§7", "block.gtceu.object_holder": "Тримач об’єктів", "block.gtceu.oil": "Нафта", - "block.gtceu.oil_heavy": "Важка нафта", - "block.gtceu.oil_light": "Легка нафта", - "block.gtceu.oil_medium": "Сира нафта", + "block.gtceu.heavy_oil": "Важка нафта", + "block.gtceu.light_oil": "Легка нафта", + "block.gtceu.raw_oil": "Сира нафта", "block.gtceu.opv_1024a_laser_source_hatch": "§9§lOpV§r 1,024§eA§r люк джерела лазера", "block.gtceu.opv_1024a_laser_target_hatch": "§9§lOpV§r 1,024§eA§r люк цілі лазера", "block.gtceu.opv_16a_energy_converter": "§9§lOpV§r 16§eA§r енергетичний конвертер", @@ -1018,7 +1016,7 @@ "block.gtceu.orange_metal_sheet": "Помаранчеве металеве покриття", "block.gtceu.orange_studs": "Помаранчеві кубики", "block.gtceu.overworld_marker": "Верхній світ", - "block.gtceu.palladium_substation": "Паладієвий корпус підстанції", + "block.gtceu.palladium_substation_casing": "Паладієвий корпус підстанції", "block.gtceu.pattern_buffer.desc.0": "§fДозволяє безпосередньо§6 зберігати шаблони AE2§f для конструкцій GregTech.", "block.gtceu.pattern_buffer.desc.1": "§fШаблони AE2 можуть використовувати все, що зберігається у віджеті§6 спільного містила§f.", "block.gtceu.pattern_buffer.desc.2": "§fЗ’єднайте§6 проксі шаблонних буферів§f з§b карткою даних§f, щоб зв’язати машини між собою!", @@ -1122,7 +1120,7 @@ "block.gtceu.steam_output_bus": "Парова вихідна шина", "block.gtceu.steam_oven": "Парова піч", "block.gtceu.steam_solid_boiler.bronze": "Малий паровий твердопаливний котел", - "block.gtceu.steel_brick_casing": "Мурований кованозалізний корпус", + "block.gtceu.bricked_wrought_iron_casing": "Мурований кованозалізний корпус", "block.gtceu.steel_crate": "Сталевий ящик", "block.gtceu.steel_drum": "Сталева бочка", "block.gtceu.steel_firebox_casing": "Сталева топка", @@ -1132,7 +1130,7 @@ "block.gtceu.steel_multiblock_tank": "Сталевий багатоблоковий резервуар", "block.gtceu.steel_pipe_casing": "Сталевий трубний корпус", "block.gtceu.steel_tank_valve": "Сталевий вентиль резервуара", - "block.gtceu.steel_turbine_casing": "Сталевий турбінний корпус", + "block.gtceu.magnalium_turbine_casing": "Сталевий турбінний корпус", "block.gtceu.sterilizing_filter_casing": "Стерилізуючий фільтрувальний корпус", "block.gtceu.stress_proof_casing": "Стресостійкий корпус", "block.gtceu.stripped_rubber_log": "Обтесана каучукова колода", @@ -1732,7 +1730,7 @@ "block.gtceu.zpm_wiremill": "§cЕлітний волок III§r", "block.gtceu.zpm_world_accelerator": "§cЕлітний світовий прискорювач III§r", "block.sterilizing_filter_casing.tooltip": "Створює§a стерильне§7 середовище", - "block.surface_rock": "%s (поверхневий поклад)", + "block.gtceu.surface_rock": "%s (поверхневий поклад)", "button.gtceu.mark_as_depleted.name": "Позначити як виснажений", "button.gtceu.toggle_waypoint.name": "Перемикнути маршрутну точку", "command.gtceu.cape.failure.does_not_exist": "Плаща «%s» не існує", @@ -4083,7 +4081,6 @@ "gui.gtceu.share_tank.desc.0": "Ділиться вставленими рідинами/газами/тощо з усіма шаблонами в буфері!", "gui.gtceu.share_tank.title": "Інвентар спільного резервуара", "gui.widget.incrementButton.default_tooltip": "Утримуйте Shift, Ctrl чи обидва, щоб змінити кількість", - "item.glass_lens": "Скляна лінза (Біла)", "item.gtceu.activity_detector_cover": "Детектор активності", "item.gtceu.activity_detector_cover.tooltip": "§7Видає§f статус активності§7 як редстоун та§f кришка§7.", "item.gtceu.advanced_activity_detector_cover": "Вдосконалений детектор активності", @@ -4334,6 +4331,7 @@ "item.gtceu.gelled_toluene": "Гелевий толуол", "item.gtceu.gelled_toluene.tooltip": "§7Сира вибухівка", "item.gtceu.glass_gem": "Скляний кристал", + "item.gtceu.glass_lens": "Скляна лінза (Біла)", "item.gtceu.glass_plate": "Шибка", "item.gtceu.glass_tube": "Скляна трубка", "item.gtceu.glass_vial": "Скляна пробірка (%s)", @@ -4627,7 +4625,7 @@ "item.gtceu.opv_voltage_coil.tooltip": "Легендарна котушка", "item.gtceu.orange_dye_spray_can": "Аерозольний балончик (помаранчевий)", "item.gtceu.orange_glass_lens": "Скляна лінза (помаранчева)", - "item.gtceu.palladium_raw_dust": "Необроблений паладієвий пил", + "item.gtceu.raw_palladium_dust": "Необроблений паладієвий пил", "item.gtceu.paper_dust": "Паперова стружка", "item.gtceu.paracetamol_pill": "Пігулка парацетамолу", "item.gtceu.petri_dish": "Чашка петри", @@ -4785,7 +4783,7 @@ "item.gtceu.small_inert_metal_mixture_dust": "Дрібний пил суміші інертних металів", "item.gtceu.small_iridium_metal_residue_dust": "Дрібний пил металевого залишку іридію", "item.gtceu.small_meat_dust": "Дрібний фарш", - "item.gtceu.small_palladium_raw_dust": "Дрібний необроблений паладієвий пил", + "item.gtceu.small_raw_palladium_dust": "Дрібний необроблений паладієвий пил", "item.gtceu.small_paper_dust": "Дрібна паперова стружка", "item.gtceu.small_pipe_casting_mold": "Відливна форма (мала труба)", "item.gtceu.small_pipe_extruder_mold": "Відтискна форма (мала труба)", @@ -4855,7 +4853,7 @@ "item.gtceu.tiny_inert_metal_mixture_dust": "Крихта суміші інертних металів", "item.gtceu.tiny_iridium_metal_residue_dust": "Крихта металевого залишку іридію", "item.gtceu.tiny_meat_dust": "Крихта фаршу", - "item.gtceu.tiny_palladium_raw_dust": "Крихта необробленого паладію", + "item.gtceu.tiny_raw_palladium_dust": "Крихта необробленого паладію", "item.gtceu.tiny_paper_dust": "Крихітна паперова стружка", "item.gtceu.tiny_pipe_casting_mold": "Відливна форма (крихітна труба)", "item.gtceu.tiny_pipe_extruder_mold": "Відтискна форма (крихітна труба)", @@ -5109,7 +5107,7 @@ "item.gtceu.zpm_voltage_coil": "Котушки напруги модуля нульової точки", "item.gtceu.zpm_voltage_coil.tooltip": "Суперкотушка", "item.invalid.name": "Неприпустимий предмет", - "item.netherrack_nether_quartz": "Незерська кварцова руда", + "item.gtceu.netherrack_nether_quartz": "Незерська кварцова руда", "itemGroup.gtceu.decoration": "GregTechCEu: Декоративні блоки", "itemGroup.gtceu.item": "GregTechCEu: Предмети", "itemGroup.gtceu.machine": "GregTechCEU: Машини", @@ -5360,7 +5358,7 @@ "material.gtceu.goethite": "Ґетит", "material.gtceu.gold": "Золото", "material.gtceu.granite": "Граніт", - "material.gtceu.granite_red": "Червоний граніт", + "material.gtceu.red_granite": "Червоний граніт", "material.gtceu.granitic_mineral_sand": "Гранітний мінеральний пісок", "material.gtceu.graphene": "Графен", "material.gtceu.graphite": "Графіт", @@ -5530,9 +5528,9 @@ "material.gtceu.octane": "Октан", "material.gtceu.oganesson": "Оґанесон", "material.gtceu.oil": "Нафта", - "material.gtceu.oil_heavy": "Важка нафта", - "material.gtceu.oil_light": "Легка нафта", - "material.gtceu.oil_medium": "Сира нафта", + "material.gtceu.heavy_oil": "Важка нафта", + "material.gtceu.light_oil": "Легка нафта", + "material.gtceu.raw_oil": "Сира нафта", "material.gtceu.oilsands": "Нафтоносні піски", "material.gtceu.olivine": "Олівін", "material.gtceu.opal": "Опал", @@ -5542,7 +5540,7 @@ "material.gtceu.osmium_tetroxide": "Оксид осмію", "material.gtceu.oxygen": "Кисень", "material.gtceu.palladium": "Паладій", - "material.gtceu.palladium_raw": "Необроблений паладій", + "material.gtceu.raw_palladium": "Необроблений паладій", "material.gtceu.paper": "Папір", "material.gtceu.paracetamol": "Парацетамол", "material.gtceu.pcb_coolant": "ДП-охолоджуюча рідина", diff --git a/src/main/resources/assets/gtceu/lang/zh_cn.json b/src/main/resources/assets/gtceu/lang/zh_cn.json index f9287389a4b..6d3edb0de89 100644 --- a/src/main/resources/assets/gtceu/lang/zh_cn.json +++ b/src/main/resources/assets/gtceu/lang/zh_cn.json @@ -126,7 +126,7 @@ "block.gtceu.aluminium_drum": "铝桶", "block.gtceu.antimatter_hazard_sign_block": "反物质危害警示方块", "block.gtceu.assembly_line": "装配线", - "block.gtceu.assembly_line_casing": "装配线外壳", + "block.gtceu.assembly_control_casing": "装配线外壳", "block.gtceu.assembly_line_grating": "装配线格栅", "block.gtceu.assembly_line_unit": "装配线控制外壳", "block.gtceu.atomic_casing": "原子机械方块", @@ -145,7 +145,7 @@ "block.gtceu.blue_studs": "蓝色橡胶混凝土", "block.gtceu.boss_hazard_sign_block": "Boss危害警示方块", "block.gtceu.brittle_charcoal": "脆木炭块", - "block.gtceu.bronze_brick_casing": "砖砌青铜外壳", + "block.gtceu.bricked_bronze_casing": "砖砌青铜外壳", "block.gtceu.bronze_crate": "青铜板条箱", "block.gtceu.bronze_drum": "青铜桶", "block.gtceu.bronze_firebox_casing": "青铜燃烧室", @@ -160,8 +160,6 @@ "block.gtceu.brown_large_metal_sheet": "棕色粗纹金属板方块", "block.gtceu.brown_metal_sheet": "棕色金属板方块", "block.gtceu.brown_studs": "棕色橡胶混凝土", - "block.gtceu.casing_coke_bricks": "焦炉砖块", - "block.gtceu.casing_grate": "栅格机械方块", "block.gtceu.causality_hazard_sign_block": "因果律危害警示方块", "block.gtceu.central_monitor": "中央监控器", "block.gtceu.charcoal_pile_igniter": "木炭堆点火器", @@ -833,8 +831,8 @@ "block.gtceu.me_pattern_buffer_proxy": "ME样板总成镜像", "block.gtceu.me_stocking_input_bus": "ME库存输入总线", "block.gtceu.me_stocking_input_hatch": "ME库存输入仓", - "block.gtceu.mega_blast_furnace": "转底炉", - "block.gtceu.mega_vacuum_freezer": "巨型真空冷冻机", + "block.gtceu.rotary_hearth_furnace": "转底炉", + "block.gtceu.bulk_blast_chiller": "巨型真空冷冻机", "block.gtceu.miner_pipe": "采矿管道", "block.gtceu.mob_infestation_hazard_sign_block": "怪物侵袭危害警示方块", "block.gtceu.mob_spawner_hazard_sign_block": "刷怪笼危害警示方块", @@ -940,9 +938,9 @@ "block.gtceu.normal_optical_pipe.tooltip": "§7传递§f算力§7或§f研究数据§7", "block.gtceu.object_holder": "物品支架", "block.gtceu.oil": "石油", - "block.gtceu.oil_heavy": "重油", - "block.gtceu.oil_light": "轻油", - "block.gtceu.oil_medium": "原油", + "block.gtceu.heavy_oil": "重油", + "block.gtceu.light_oil": "轻油", + "block.gtceu.raw_oil": "原油", "block.gtceu.opv_1024a_laser_source_hatch": "1024§e安§r§9§lOpV§r激光源仓", "block.gtceu.opv_1024a_laser_target_hatch": "1024§e安§r§9§lOpV§r激光靶仓", "block.gtceu.opv_16a_energy_converter": "16§e安§r§9§lOpV§r能量转换器", @@ -1033,7 +1031,7 @@ "block.gtceu.orange_metal_sheet": "橙色金属板方块", "block.gtceu.orange_studs": "橙色橡胶混凝土", "block.gtceu.overworld_marker": "主世界", - "block.gtceu.palladium_substation": "镀钯变电站机械方块", + "block.gtceu.palladium_substation_casing": "镀钯变电站机械方块", "block.gtceu.pattern_buffer.desc.0": "§f对于GT多方块结构的集成式§6AE2样板供应器§f。", "block.gtceu.pattern_buffer.desc.1": "§fAE2样板可以利用§6共享库存§f中的一切。", "block.gtceu.pattern_buffer.desc.2": "§f使用§b闪存§f绑定§6ME样板总成镜像§f,以使机器相互连接!", @@ -1137,7 +1135,7 @@ "block.gtceu.steam_output_bus": "蒸汽输出总线", "block.gtceu.steam_oven": "蒸汽熔炼炉", "block.gtceu.steam_solid_boiler.bronze": "小型蒸汽固体燃料锅炉", - "block.gtceu.steel_brick_casing": "砖砌锻铁外壳", + "block.gtceu.bricked_wrought_iron_casing": "砖砌锻铁外壳", "block.gtceu.steel_crate": "钢板条箱", "block.gtceu.steel_drum": "钢桶", "block.gtceu.steel_firebox_casing": "钢制燃烧室", @@ -1147,7 +1145,7 @@ "block.gtceu.steel_multiblock_tank": "钢制多方块储罐", "block.gtceu.steel_pipe_casing": "钢管道方块", "block.gtceu.steel_tank_valve": "钢制储罐阀门", - "block.gtceu.steel_turbine_casing": "镁铝合金涡轮机械方块", + "block.gtceu.magnalium_turbine_casing": "镁铝合金涡轮机械方块", "block.gtceu.sterilizing_filter_casing": "除菌过滤器机械方块", "block.gtceu.stress_proof_casing": "耐压机械方块", "block.gtceu.stripped_rubber_log": "去皮橡胶原木", @@ -1759,7 +1757,7 @@ "block.gtceu.zpm_wiremill": "§c精英线材轧机 III§r", "block.gtceu.zpm_world_accelerator": "§c精英世界加速器 III§r", "block.sterilizing_filter_casing.tooltip": "创造一个§a无菌§r环境", - "block.surface_rock": "地表岩石(%s)", + "block.gtceu.surface_rock": "地表岩石(%s)", "button.gtceu.mark_as_depleted.name": "标记为枯竭", "button.gtceu.toggle_waypoint.name": "切换路径点", "command.gtceu.cape.failure.does_not_exist": "披风%s不存在", @@ -4135,12 +4133,10 @@ "gui.gtceu.share_tank.desc.0": "与总成内的所有样板共享流体!", "gui.gtceu.share_tank.title": "共享流体库存", "gui.widget.incrementButton.default_tooltip": "按住Shift,Ctrl键或同时按住这两个键来改变数量", - "item.glass_lens": "玻璃透镜(白色)", "item.gtceu.activity_detector_cover": "活跃探测覆盖板", "item.gtceu.activity_detector_cover.tooltip": "§7作§f覆盖板§7时依照§f机器活跃状态§7发出红石信号。", "item.gtceu.advanced_activity_detector_cover": "进阶活跃状态探测覆盖板", "item.gtceu.advanced_activity_detector_cover.tooltip": "§7作§f覆盖板§7时依照§f机器处理进度§7发出红石信号。", - "item.gtceu.advanced_electric_jetpack": "进阶电力喷气背包", "item.gtceu.advanced_energy_detector_cover": "进阶能量探测覆盖板", "item.gtceu.advanced_energy_detector_cover.tooltip": "§7作§f覆盖板§7时依照由§fRS锁存器§7控制的§f能量状态§7发出红石信号。", "item.gtceu.advanced_fluid_detector_cover": "进阶流体探测覆盖板", @@ -4389,6 +4385,7 @@ "item.gtceu.gelled_toluene": "胶凝甲苯", "item.gtceu.gelled_toluene.tooltip": "§7炸药原料", "item.gtceu.glass_gem": "玻璃晶体", + "item.gtceu.glass_lens": "玻璃透镜(白色)", "item.gtceu.glass_plate": "玻璃板", "item.gtceu.glass_tube": "玻璃管", "item.gtceu.glass_vial": "%s玻璃试管", @@ -4684,7 +4681,7 @@ "item.gtceu.opv_voltage_coil.tooltip": "传奇线圈", "item.gtceu.orange_dye_spray_can": "喷漆罐(橙色)", "item.gtceu.orange_glass_lens": "玻璃透镜(橙色)", - "item.gtceu.palladium_raw_dust": "粗钯粉", + "item.gtceu.raw_palladium_dust": "粗钯粉", "item.gtceu.paper_dust": "纸屑", "item.gtceu.paracetamol_pill": "对乙酰氨基酚药片", "item.gtceu.petri_dish": "培养皿", @@ -4697,20 +4694,19 @@ "item.gtceu.phosphorus_boule.tooltip": "§7电路原料", "item.gtceu.phosphorus_wafer": "磷掺杂的晶圆", "item.gtceu.phosphorus_wafer.tooltip": "§7电路原料", - "item.gtceu.pickaxe_extruder_mold.tooltip": "§7用来制作镐的模头", "item.gtceu.pill_casting_mold": "模具(药片)", "item.gtceu.pink_dye_spray_can": "喷漆罐(粉红色)", "item.gtceu.pink_glass_lens": "玻璃透镜(粉红色)", - "item.gtceu.pipe.huge_casting_mold.tooltip": "§7用来制作巨型管道的模具", - "item.gtceu.pipe.huge_extruder_mold.tooltip": "§7用来制作巨型管道的模头", - "item.gtceu.pipe.large_casting_mold.tooltip": "§7用来制作大型管道的模具", - "item.gtceu.pipe.large_extruder_mold.tooltip": "§7用来制作大型管道的模头", - "item.gtceu.pipe.normal_casting_mold.tooltip": "§7用来制作管道的模具", - "item.gtceu.pipe.normal_extruder_mold.tooltip": "§7用来制作管道的模头", - "item.gtceu.pipe.small_casting_mold.tooltip": "§7用来制作小型管道的模具", - "item.gtceu.pipe.small_extruder_mold.tooltip": "§7用来制作小型管道的模头", - "item.gtceu.pipe.tiny_casting_mold.tooltip": "§7用来制作微型管道的模具", - "item.gtceu.pipe.tiny_extruder_mold.tooltip": "§7用来制作微型管道的模头", + "item.gtceu.huge_pipe_casting_mold.tooltip": "§7用来制作巨型管道的模具", + "item.gtceu.huge_pipe_extruder_mold.tooltip": "§7用来制作巨型管道的模头", + "item.gtceu.large_pipe_casting_mold.tooltip": "§7用来制作大型管道的模具", + "item.gtceu.large_pipe_extruder_mold.tooltip": "§7用来制作大型管道的模头", + "item.gtceu.normal_pipe_casting_mold.tooltip": "§7用来制作管道的模具", + "item.gtceu.normal_pipe_extruder_mold.tooltip": "§7用来制作管道的模头", + "item.gtceu.small_pipe_casting_mold.tooltip": "§7用来制作小型管道的模具", + "item.gtceu.small_pipe_extruder_mold.tooltip": "§7用来制作小型管道的模头", + "item.gtceu.tiny_pipe_casting_mold.tooltip": "§7用来制作微型管道的模具", + "item.gtceu.tiny_pipe_extruder_mold.tooltip": "§7用来制作微型管道的模头", "item.gtceu.pitchblende_dust": "沥青铀矿", "item.gtceu.plant_ball": "植物球", "item.gtceu.plastic_circuit_board": "塑料电路基板", @@ -4801,17 +4797,12 @@ "item.gtceu.ring_extruder_mold.tooltip": "§7用来制作环的模头", "item.gtceu.robot.arm.tooltip": "作§f覆盖板§7时限制§f物品§7到特定数量。", "item.gtceu.rock_salt_dust": "岩盐", - "item.gtceu.rod_extruder_mold.tooltip": "§7用来制作杆的模头", - "item.gtceu.rod_long_extruder_mold.tooltip": "§7用来制作长杆的模头", "item.gtceu.rotor_casting_mold": "模具(转子)", "item.gtceu.rotor_casting_mold.tooltip": "§7用来制作转子的模具", - "item.gtceu.rotor_extruder_mold.tooltip": "§7用来制作转子的模头", "item.gtceu.rubber_boat": "橡胶木船", "item.gtceu.rubber_chest_boat": "橡胶木运输船", "item.gtceu.rubber_gloves": "橡胶手套", "item.gtceu.salt_dust": "盐", - "item.gtceu.saw_extruder_mold.tooltip": "§7用来制作锯的模头", - "item.gtceu.shovel_extruder_mold.tooltip": "§7用来制作锹的模头", "item.gtceu.shutter_module_cover": "扇板", "item.gtceu.shutter_module_cover.tooltip": "§7作§f覆盖板§7时§f阻止§7机器侧面的任何§f传输§7行为。", "item.gtceu.silicon_boule": "单晶硅", @@ -4839,7 +4830,7 @@ "item.gtceu.small_inert_metal_mixture_dust": "小堆惰性金属混合物", "item.gtceu.small_iridium_metal_residue_dust": "小堆铱金属渣", "item.gtceu.small_meat_dust": "小堆肉末", - "item.gtceu.small_palladium_raw_dust": "小堆粗钯粉", + "item.gtceu.small_raw_palladium_dust": "小堆粗钯粉", "item.gtceu.small_paper_dust": "小堆纸屑", "item.gtceu.small_pipe_casting_mold": "模具(小型管道)", "item.gtceu.small_pipe_extruder_mold": "模头(小型管道)", @@ -4890,7 +4881,6 @@ "item.gtceu.sugar_gem": "方糖", "item.gtceu.sus_record": "音乐唱片", "item.gtceu.sus_record.desc": "可疑!", - "item.gtceu.sword_extruder_mold.tooltip": "§7用来制作剑刃的模头", "item.gtceu.tag_filter.tooltip.0": "作§f覆盖板§7时以§f标签§7过滤§f物品§7的输入/输出。", "item.gtceu.tag_filter.tooltip.1": "亦可为§f传送带§7和§f机械臂§7提供此功能。", "item.gtceu.talc_dust": "滑石", @@ -4914,7 +4904,7 @@ "item.gtceu.tiny_inert_metal_mixture_dust": "小撮惰性金属混合物", "item.gtceu.tiny_iridium_metal_residue_dust": "小撮铱金属渣", "item.gtceu.tiny_meat_dust": "小撮肉末", - "item.gtceu.tiny_palladium_raw_dust": "小撮粗钯粉", + "item.gtceu.tiny_raw_palladium_dust": "小撮粗钯粉", "item.gtceu.tiny_paper_dust": "小撮纸屑", "item.gtceu.tiny_pipe_casting_mold": "模具(微型管道)", "item.gtceu.tiny_pipe_extruder_mold": "模头(微型管道)", @@ -5168,7 +5158,7 @@ "item.gtceu.zpm_voltage_coil": "零点压线圈", "item.gtceu.zpm_voltage_coil.tooltip": "超级线圈", "item.invalid.name": "无效物品", - "item.netherrack_nether_quartz": "下界石英矿石", + "item.gtceu.netherrack_nether_quartz": "下界石英矿石", "itemGroup.gtceu.decoration": "格雷科技 | 装饰方块", "itemGroup.gtceu.item": "格雷科技 | 物品", "itemGroup.gtceu.machine": "格雷科技 | 机器", @@ -5419,7 +5409,7 @@ "material.gtceu.goethite": "针铁矿", "material.gtceu.gold": "金", "material.gtceu.granite": "花岗岩", - "material.gtceu.granite_red": "红花岗岩", + "material.gtceu.red_granite": "红花岗岩", "material.gtceu.granitic_mineral_sand": "花岗岩矿砂", "material.gtceu.graphene": "石墨烯", "material.gtceu.graphite": "石墨", @@ -5587,14 +5577,13 @@ "material.gtceu.nitrosyl_chloride": "亚硝酰氯", "material.gtceu.nitrous_oxide": "一氧化二氮", "material.gtceu.nobelium": "锘", - "material.gtceu.null": "无", "material.gtceu.obsidian": "黑曜石", "material.gtceu.octane": "辛烷", "material.gtceu.oganesson": "鿫", "material.gtceu.oil": "石油", - "material.gtceu.oil_heavy": "重油", - "material.gtceu.oil_light": "轻油", - "material.gtceu.oil_medium": "原油", + "material.gtceu.heavy_oil": "重油", + "material.gtceu.light_oil": "轻油", + "material.gtceu.raw_oil": "原油", "material.gtceu.oilsands": "油砂", "material.gtceu.olivine": "橄榄石", "material.gtceu.opal": "猫眼石", @@ -5604,7 +5593,7 @@ "material.gtceu.osmium_tetroxide": "四氧化锇", "material.gtceu.oxygen": "氧", "material.gtceu.palladium": "钯", - "material.gtceu.palladium_raw": "粗钯", + "material.gtceu.raw_palladium": "粗钯", "material.gtceu.paper": "纸", "material.gtceu.paracetamol": "对乙酰氨基酚", "material.gtceu.pcb_coolant": "多氯联苯冷却液 ", @@ -6038,7 +6027,6 @@ "tagprefix.marble": "大理岩%s矿石", "tagprefix.netherrack": "下界岩%s矿石", "tagprefix.nugget": "%s粒", - "tagprefix.null": "%s Null", "tagprefix.pipe_huge_fluid": "巨型%s流体管道", "tagprefix.pipe_huge_item": "巨型%s物品管道", "tagprefix.pipe_huge_restrictive": "巨型低优先%s物品管道", diff --git a/src/main/resources/assets/gtceu/lang/zh_tw.json b/src/main/resources/assets/gtceu/lang/zh_tw.json index b27fe57a602..9fffb15ed95 100644 --- a/src/main/resources/assets/gtceu/lang/zh_tw.json +++ b/src/main/resources/assets/gtceu/lang/zh_tw.json @@ -119,7 +119,7 @@ "block.gtceu.aluminium_drum": "鋁桶", "block.gtceu.antimatter_hazard_sign_block": "反物質危害警示方塊", "block.gtceu.assembly_line": "裝配線", - "block.gtceu.assembly_line_casing": "裝配線外殼", + "block.gtceu.assembly_control_casing": "裝配線外殼", "block.gtceu.assembly_line_grating": "裝配線格柵", "block.gtceu.assembly_line_unit": "裝配線控制外殼", "block.gtceu.atomic_casing": "原子機械方塊", @@ -138,7 +138,7 @@ "block.gtceu.blue_studs": "藍色橡膠混凝土", "block.gtceu.boss_hazard_sign_block": "Boss危害警示方塊", "block.gtceu.brittle_charcoal": "脆木炭塊", - "block.gtceu.bronze_brick_casing": "磚砌青銅外殼", + "block.gtceu.bricked_bronze_casing": "磚砌青銅外殼", "block.gtceu.bronze_crate": "青銅板條箱", "block.gtceu.bronze_drum": "青銅桶", "block.gtceu.bronze_firebox_casing": "青銅燃燒室", @@ -153,8 +153,6 @@ "block.gtceu.brown_large_metal_sheet": "棕色粗紋金屬板方塊", "block.gtceu.brown_metal_sheet": "棕色金屬板方塊", "block.gtceu.brown_studs": "棕色橡膠混凝土", - "block.gtceu.casing_coke_bricks": "焦爐磚塊", - "block.gtceu.casing_grate": "柵格機械方塊", "block.gtceu.causality_hazard_sign_block": "因果律危害警示方塊", "block.gtceu.central_monitor": "中央監控器", "block.gtceu.charcoal_pile_igniter": "木炭堆點火器", @@ -813,8 +811,8 @@ "block.gtceu.me_pattern_buffer_proxy": "ME遠端樣板供應倉", "block.gtceu.me_stocking_input_bus": "ME庫存輸入匯流排", "block.gtceu.me_stocking_input_hatch": "ME庫存輸入倉", - "block.gtceu.mega_blast_furnace": "轉底爐", - "block.gtceu.mega_vacuum_freezer": "巨型真空冷凍機", + "block.gtceu.rotary_hearth_furnace": "轉底爐", + "block.gtceu.bulk_blast_chiller": "巨型真空冷凍機", "block.gtceu.miner_pipe": "採礦管道", "block.gtceu.mob_infestation_hazard_sign_block": "怪物侵襲危害警示方塊", "block.gtceu.mob_spawner_hazard_sign_block": "生怪磚危害警示方塊", @@ -918,9 +916,9 @@ "block.gtceu.normal_optical_pipe.tooltip": "§7傳遞§f算力§7或§f研究資料§7", "block.gtceu.object_holder": "物品支架", "block.gtceu.oil": "石油", - "block.gtceu.oil_heavy": "重油", - "block.gtceu.oil_light": "輕油", - "block.gtceu.oil_medium": "原油", + "block.gtceu.heavy_oil": "重油", + "block.gtceu.light_oil": "輕油", + "block.gtceu.raw_oil": "原油", "block.gtceu.opv_1024a_laser_source_hatch": "1024§e安§r§9§lOpV§r雷射源倉", "block.gtceu.opv_1024a_laser_target_hatch": "1024§e安§r§9§lOpV§r雷射靶倉", "block.gtceu.opv_16a_energy_converter": "16§e安§r§9§lOpV§r能量轉換器", @@ -1009,7 +1007,7 @@ "block.gtceu.orange_metal_sheet": "橙色金屬板方塊", "block.gtceu.orange_studs": "橙色橡膠混凝土", "block.gtceu.overworld_marker": "主世界", - "block.gtceu.palladium_substation": "鍍鈀變電站機械方塊", + "block.gtceu.palladium_substation_casing": "鍍鈀變電站機械方塊", "block.gtceu.pattern_buffer.desc.0": "§f多方塊結構的整合式§6AE2樣板供應器§f。", "block.gtceu.pattern_buffer.desc.1": "§fAE2樣板可以利用§6共享庫存§f中的一切。", "block.gtceu.pattern_buffer.desc.2": "§f使用§b快閃記憶體§f綁定§6ME遠端樣板供應倉§f,以使機器相互連線!", @@ -1113,7 +1111,7 @@ "block.gtceu.steam_output_bus": "輸出匯流排(蒸汽)", "block.gtceu.steam_oven": "蒸汽熔煉爐", "block.gtceu.steam_solid_boiler.bronze": "小型蒸汽固體燃料鍋爐", - "block.gtceu.steel_brick_casing": "磚砌鍛鐵外殼", + "block.gtceu.bricked_wrought_iron_casing": "磚砌鍛鐵外殼", "block.gtceu.steel_crate": "鋼板條箱", "block.gtceu.steel_drum": "鋼桶", "block.gtceu.steel_firebox_casing": "鋼製燃燒室", @@ -1123,7 +1121,7 @@ "block.gtceu.steel_multiblock_tank": "鋼製多方塊儲罐", "block.gtceu.steel_pipe_casing": "鋼管道方塊", "block.gtceu.steel_tank_valve": "鋼製儲罐閥門", - "block.gtceu.steel_turbine_casing": "鋼渦輪機械方塊", + "block.gtceu.magnalium_turbine_casing": "鋼渦輪機械方塊", "block.gtceu.sterilizing_filter_casing": "除菌過濾器機械方塊", "block.gtceu.stress_proof_casing": "耐壓機械方塊", "block.gtceu.stripped_rubber_log": "剝皮橡膠木原木", @@ -1722,7 +1720,7 @@ "block.gtceu.zpm_wiremill": "§c精英線材軋機 III§r", "block.gtceu.zpm_world_accelerator": "§c精英世界加速器 III§r", "block.sterilizing_filter_casing.tooltip": "創造一個§a無菌§r環境", - "block.surface_rock": "地表岩石(%s)", + "block.gtceu.surface_rock": "地表岩石(%s)", "button.gtceu.mark_as_depleted.name": "標記為枯竭", "button.gtceu.toggle_waypoint.name": "切換路徑點", "command.gtceu.cape.failure.does_not_exist": "披風%s不存在", @@ -3982,7 +3980,6 @@ "gui.gtceu.share_tank.title": "共享流體庫存", "gui.widget.incrementButton.default_tooltip": "按住Shift,Ctrl鍵或同時按住這兩個鍵來改變數量", "gui.widget.recipeProgressWidget.default_tooltip": "檢視配方", - "item.glass_lens": "玻璃透鏡(白色)", "item.gtceu.activity_detector_cover": "活躍探測覆蓋板", "item.gtceu.activity_detector_cover.tooltip": "§7作§f覆蓋板§7時依照§f機器活躍狀態§7發出紅石訊號。", "item.gtceu.advanced_activity_detector_cover": "進階活躍狀態探測器", @@ -4233,6 +4230,7 @@ "item.gtceu.gelled_toluene": "膠凝甲苯", "item.gtceu.gelled_toluene.tooltip": "§7炸藥原料", "item.gtceu.glass_gem": "玻璃晶體", + "item.gtceu.glass_lens": "玻璃透鏡(白色)", "item.gtceu.glass_plate": "玻璃板", "item.gtceu.glass_tube": "玻璃管", "item.gtceu.glass_vial": "玻璃試管", @@ -4525,7 +4523,7 @@ "item.gtceu.opv_voltage_coil.tooltip": "傳奇線圈", "item.gtceu.orange_dye_spray_can": "噴漆罐(橙色)", "item.gtceu.orange_glass_lens": "玻璃透鏡(橙色)", - "item.gtceu.palladium_raw_dust": "粗鈀粉", + "item.gtceu.raw_palladium_dust": "粗鈀粉", "item.gtceu.paper_dust": "紙屑", "item.gtceu.paracetamol_pill": "對乙醯氨基酚藥片", "item.gtceu.petri_dish": "培養皿", @@ -4683,7 +4681,7 @@ "item.gtceu.small_inert_metal_mixture_dust": "小堆惰性金屬混合物", "item.gtceu.small_iridium_metal_residue_dust": "小堆銥金屬渣", "item.gtceu.small_meat_dust": "小堆肉末", - "item.gtceu.small_palladium_raw_dust": "小堆粗鈀粉", + "item.gtceu.small_raw_palladium_dust": "小堆粗鈀粉", "item.gtceu.small_paper_dust": "小堆紙屑", "item.gtceu.small_pipe_casting_mold": "模具(小型管道)", "item.gtceu.small_pipe_extruder_mold": "擠壓模具(小型管道)", @@ -4753,7 +4751,7 @@ "item.gtceu.tiny_inert_metal_mixture_dust": "小撮惰性金屬混合物", "item.gtceu.tiny_iridium_metal_residue_dust": "小撮銥金屬渣", "item.gtceu.tiny_meat_dust": "小撮肉末", - "item.gtceu.tiny_palladium_raw_dust": "小撮粗鈀粉", + "item.gtceu.tiny_raw_palladium_dust": "小撮粗鈀粉", "item.gtceu.tiny_paper_dust": "小撮紙屑", "item.gtceu.tiny_pipe_casting_mold": "模具(微型管道)", "item.gtceu.tiny_pipe_extruder_mold": "擠壓模具(微型管道)", @@ -5006,7 +5004,7 @@ "item.gtceu.zpm_voltage_coil": "零點壓線圈(§cZPM§r)", "item.gtceu.zpm_voltage_coil.tooltip": "超級線圈", "item.invalid.name": "無效物品", - "item.netherrack_nether_quartz": "地獄石英礦", + "item.gtceu.netherrack_nether_quartz": "地獄石英礦", "itemGroup.gtceu.decoration": "格雷科技 | 裝飾方塊", "itemGroup.gtceu.item": "格雷科技 | 物品", "itemGroup.gtceu.machine": "格雷科技 | 機器", @@ -5257,7 +5255,7 @@ "material.gtceu.goethite": "針鐵", "material.gtceu.gold": "金", "material.gtceu.granite": "花崗岩", - "material.gtceu.granite_red": "紅花崗岩", + "material.gtceu.red_granite": "紅花崗岩", "material.gtceu.granitic_mineral_sand": "花崗岩礦砂", "material.gtceu.graphene": "石墨烯", "material.gtceu.graphite": "石墨", @@ -5427,9 +5425,9 @@ "material.gtceu.octane": "辛烷", "material.gtceu.oganesson": "鿫", "material.gtceu.oil": "石油", - "material.gtceu.oil_heavy": "重油", - "material.gtceu.oil_light": "輕油", - "material.gtceu.oil_medium": "原油", + "material.gtceu.heavy_oil": "重油", + "material.gtceu.light_oil": "輕油", + "material.gtceu.raw_oil": "原油", "material.gtceu.oilsands": "油砂", "material.gtceu.olivine": "橄欖石", "material.gtceu.opal": "貓眼石", @@ -5439,7 +5437,7 @@ "material.gtceu.osmium_tetroxide": "四氧化鋨", "material.gtceu.oxygen": "氧", "material.gtceu.palladium": "鈀", - "material.gtceu.palladium_raw": "粗鈀", + "material.gtceu.raw_palladium": "粗鈀", "material.gtceu.paper": "紙", "material.gtceu.paracetamol": "對乙醯氨基酚", "material.gtceu.pcb_coolant": "多氯聯苯冷卻液 ", From 4820e7c74eb614956a705afbfa4352599bc0c4ba Mon Sep 17 00:00:00 2001 From: screret <68943070+screret@users.noreply.github.com> Date: Sat, 24 Oct 2026 14:56:11 +0300 Subject: [PATCH 83/83] oops --- .../trait/customlogic/ToolDecompLogic.java | 95 ------------------- 1 file changed, 95 deletions(-) delete mode 100644 src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java b/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java deleted file mode 100644 index e270cd04ab2..00000000000 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/trait/customlogic/ToolDecompLogic.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.gregtechceu.gtceu.api.machine.trait.customlogic; - -import com.gregtechceu.gtceu.api.GTValues; -import com.gregtechceu.gtceu.api.capability.recipe.IO; -import com.gregtechceu.gtceu.api.capability.recipe.IRecipeCapabilityHolder; -import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability; -import com.gregtechceu.gtceu.api.data.chemical.ChemicalHelper; -import com.gregtechceu.gtceu.api.data.chemical.material.Material; -import com.gregtechceu.gtceu.api.item.IGTTool; -import com.gregtechceu.gtceu.api.item.tool.GTToolType; -import com.gregtechceu.gtceu.api.recipe.GTRecipe; -import com.gregtechceu.gtceu.api.recipe.GTRecipeType; -import com.gregtechceu.gtceu.api.recipe.category.GTRecipeCategory; -import com.gregtechceu.gtceu.common.data.GTMaterialItems; -import com.gregtechceu.gtceu.common.data.GTMaterials; -import com.gregtechceu.gtceu.common.item.TurbineRotorItem; - -import net.minecraft.network.chat.Component; -import net.minecraft.world.item.ItemStack; - -import org.jetbrains.annotations.Nullable; - -import static com.gregtechceu.gtceu.api.data.tag.TagPrefix.*; - -public abstract class ToolDecompLogic implements GTRecipeType.ICustomRecipeLogic { - - public ToolDecompLogic() {} - - public abstract @Nullable GTRecipe applyDurabilityRecipe(String id, ItemStack inputStack, Material mat, - long fullAmount, float durability, long voltage, - int durationFactor); - - public abstract GTRecipeCategory getDisplayRecipeCategory(); - - @Override - public @Nullable GTRecipe createCustomRecipe(IRecipeCapabilityHolder holder) { - var recipeHandlers = holder.getCapabilitiesFlat(IO.IN, ItemRecipeCapability.CAP); - for (var handler : recipeHandlers) { - for (var content : handler.getContents()) { - if (!(content instanceof ItemStack stack)) continue; - if (stack.isEmpty()) continue; - var recipe = search(stack); - if (recipe != null) return recipe; - } - } - return null; - } - - private @Nullable GTRecipe search(ItemStack stack) { - if (stack.getItem() instanceof TurbineRotorItem rotor) { - float durability = 1f - (float) stack.getDamageValue() / stack.getMaxDamage(); - return applyDurabilityRecipe("rotor_decomp", stack, rotor.material, - turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - } - - if (stack.getItem() instanceof IGTTool tool && !tool.isElectric()) { - int maxDurability = tool.getTotalMaxDurability(stack) + 1; - float durability = (float) (maxDurability - stack.getDamageValue()) / maxDurability; - return applyDurabilityRecipe("tool_decomp", stack, tool.getMaterial(), - tool.getToolType().materialAmount / GTValues.M, durability, - GTValues.VH[GTValues.LV], 2); - } - - return null; - } - - @Override - public void buildRepresentativeRecipes() { - float durability = 0.69f; - - // noinspection DataFlowIssue - ItemStack stack = GTMaterialItems.TOOL_ITEMS.get(GTMaterials.Iron, GTToolType.PICKAXE).asStack(); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.tool")); - stack.setDamageValue(79); - - GTRecipe pickaxeRecipe = applyDurabilityRecipe("tool_decomp", stack, GTMaterials.Iron, - GTToolType.PICKAXE.materialAmount / GTValues.M, durability, - GTValues.VH[GTValues.LV], 2); - assert pickaxeRecipe != null : "Default Tool Decomp recipe couldn't be generated"; - pickaxeRecipe.setId(pickaxeRecipe.getId().withPrefix("/")); - getDisplayRecipeCategory().addRecipe(pickaxeRecipe); - - // separator // - - stack = ChemicalHelper.get(turbineRotor, GTMaterials.Iron); - stack.setHoverName(Component.translatable("gtceu.auto_decomp.rotor")); - stack.setDamageValue(8928); - - GTRecipe rotorRecipe = applyDurabilityRecipe("rotor_decomp", stack, GTMaterials.Iron, - turbineRotor.materialAmount() / GTValues.M, durability, GTValues.VH[GTValues.EV], 1); - assert rotorRecipe != null : "Default Turbine Decomp recipe couldn't be generated"; - rotorRecipe.setId(rotorRecipe.getId().withPrefix("/")); - getDisplayRecipeCategory().addRecipe(rotorRecipe); - } -}