From 85dcad63bf8c962ec46f16a9a012cba56e911112 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:44:26 -0400 Subject: [PATCH 1/4] Update bug_report.yml [skip ci] --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 31e924c84..61bba1071 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -9,6 +9,8 @@ body: have found a defect, and you are able to point to where the problem is, you should not open an issue.

Additionally, please make sure you have done the following: + + - **Are you playing on a modern version of Minecraft?** We currently support 1.20.1 and 1.21.1. Older versions are no longer supported. - **Have you ensured that all of your mods (including Embeddium) are up-to-date?** The latest version of Embeddium can always be found [on Modrinth](https://modrinth.com/mod/embeddium). From 4895003019554cbf686826f2b2c24af88ae9ef86 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 2 Sep 2024 15:04:49 -0400 Subject: [PATCH 2/4] Directly implement getQuads extension on SimpleBakedModel --- .../features/model/SimpleBakedModelMixin.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/SimpleBakedModelMixin.java diff --git a/src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/SimpleBakedModelMixin.java b/src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/SimpleBakedModelMixin.java new file mode 100644 index 000000000..2ad124708 --- /dev/null +++ b/src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/SimpleBakedModelMixin.java @@ -0,0 +1,33 @@ +package me.jellysquid.mods.sodium.mixin.features.model; + +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.resources.model.SimpleBakedModel; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.extensions.IForgeBakedModel; +import net.minecraftforge.client.model.data.ModelData; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Intrinsic; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.List; + +@Mixin(value = SimpleBakedModel.class, priority = 700) +public abstract class SimpleBakedModelMixin implements IForgeBakedModel { + @Shadow + public abstract List getQuads(@Nullable BlockState pState, @Nullable Direction pDirection, RandomSource pRandom); + + /** + * @author embeddedt + * @reason avoid interface dispatch on getQuads() from our block renderer + */ + @Intrinsic + @Override + public @NotNull List getQuads(@Nullable BlockState state, @Nullable Direction side, @NotNull RandomSource rand, @NotNull ModelData data, @Nullable RenderType renderType) { + return this.getQuads(state, side, rand); + } +} From 0da5ede519465dab5be9d7ef4c29876b52a8012a Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 7 Sep 2024 16:43:35 -0400 Subject: [PATCH 3/4] Add note about multipart optimization quirk Related: #380 --- .../mixin/features/model/MultipartBakedModelMixin.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/MultipartBakedModelMixin.java b/src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/MultipartBakedModelMixin.java index 08fece8dc..1e84812e8 100644 --- a/src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/MultipartBakedModelMixin.java +++ b/src/mixin/java/me/jellysquid/mods/sodium/mixin/features/model/MultipartBakedModelMixin.java @@ -125,7 +125,11 @@ public List getQuads(BlockState state, Direction face, RandomSource r random.setSeed(seed); // Embeddium: Filter render types as Forge does, but only if we actually need to do so. This avoids - // the overhead of getRenderTypes() for all vanilla models. + // the overhead of getRenderTypes() for all vanilla models. This optimization breaks mods that blindly call + // MultiPartBakedModel#getQuads() on all render types rather than just the ones returned by getRenderTypes(). + // The original implementation accidentally handled these as a result of doing the filtering in getQuads. + // We consider this a worthwhile tradeoff, because the API contract for chunk meshing requires iterating over + // the return value of getRenderTypes(). To date, only Windowlogged is known to be broken by this change. if (!checkSubmodelTypes || renderLayer == null || model.getRenderTypes(state, random, modelData).contains(renderLayer)) { List submodelQuads = model.getQuads(state, face, random, MultipartModelData.resolve(modelData, model), renderLayer); if(models.length == 1) { From cbe3c9b75f511cdb0f09206775b9efca3f030273 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:51:03 -0400 Subject: [PATCH 4/4] Update upload-artifact action --- .github/workflows/build-snapshot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-snapshot.yml b/.github/workflows/build-snapshot.yml index dcf7f9344..f5a22b3b6 100644 --- a/.github/workflows/build-snapshot.yml +++ b/.github/workflows/build-snapshot.yml @@ -52,7 +52,7 @@ jobs: - name: Build artifacts run: ./gradlew reobfJarJar - name: Upload artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: Embeddium path: build/libs @@ -61,7 +61,7 @@ jobs: with: run: ./gradlew runGameTestCiClient - name: Upload test artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 if: ${{ !cancelled() }} with: name: Embeddium-TestData