diff --git a/src/main/java/appeng/client/render/BakedModelUnwrapper.java b/src/main/java/appeng/client/render/BakedModelUnwrapper.java index 8c146be2da7..894a23b62f6 100644 --- a/src/main/java/appeng/client/render/BakedModelUnwrapper.java +++ b/src/main/java/appeng/client/render/BakedModelUnwrapper.java @@ -18,6 +18,7 @@ package appeng.client.render; +import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel; import net.minecraft.client.resources.model.BakedModel; /** @@ -33,8 +34,17 @@ public static T unwrap(BakedModel model, Class targetClass) { return targetClass.cast(model); } - if (model instanceof DelegateBakedModel) { - model = ((DelegateBakedModel) model).getBaseModel(); + if(model instanceof ForwardingBakedModel forwardingBakedModel) { + model = forwardingBakedModel.getWrappedModel(); + if (targetClass.isInstance(model)) { + return targetClass.cast(model); + } else { + return unwrap(model, targetClass); + } + } + + if (model instanceof DelegateBakedModel delegateBakedModel) { + model = delegateBakedModel.getBaseModel(); if (targetClass.isInstance(model)) { return targetClass.cast(model); } else { diff --git a/src/main/java/appeng/client/render/DelegateBakedModel.java b/src/main/java/appeng/client/render/DelegateBakedModel.java index 4e735b05cf5..a6bf3d011e6 100644 --- a/src/main/java/appeng/client/render/DelegateBakedModel.java +++ b/src/main/java/appeng/client/render/DelegateBakedModel.java @@ -21,22 +21,22 @@ import java.util.List; import java.util.function.Supplier; -import org.jetbrains.annotations.Nullable; - -import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.core.Direction; +import org.jetbrains.annotations.NotNull; +import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; import net.minecraft.client.renderer.block.model.ItemOverrides; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.state.BlockState; import appeng.integration.abstraction.IFabricBakedModel; +import org.jetbrains.annotations.Nullable; public abstract class DelegateBakedModel implements IFabricBakedModel { private final BakedModel baseModel; @@ -46,8 +46,12 @@ protected DelegateBakedModel(BakedModel base) { } @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction direction, RandomSource rand) { - return baseModel.getQuads(state, direction, rand); + public @NotNull List getQuads( + @Nullable BlockState state, + @Nullable Direction direction, + RandomSource random + ) { + return baseModel.getQuads(state, direction, random); } @Override @@ -82,17 +86,17 @@ public boolean usesBlockLight() { } @Override - public ItemOverrides getOverrides() { + public @NotNull ItemOverrides getOverrides() { return baseModel.getOverrides(); } @Override - public TextureAtlasSprite getParticleIcon() { + public @NotNull TextureAtlasSprite getParticleIcon() { return this.baseModel.getParticleIcon(); } @Override - public ItemTransforms getTransforms() { + public @NotNull ItemTransforms getTransforms() { return this.baseModel.getTransforms(); } diff --git a/src/main/java/appeng/client/render/FacadeBakedItemModel.java b/src/main/java/appeng/client/render/FacadeBakedItemModel.java index 1778e32b02b..f39f151beac 100644 --- a/src/main/java/appeng/client/render/FacadeBakedItemModel.java +++ b/src/main/java/appeng/client/render/FacadeBakedItemModel.java @@ -37,6 +37,7 @@ import appeng.client.render.cablebus.FacadeBuilder; import appeng.items.parts.FacadeItem; +import org.jetbrains.annotations.NotNull; /** * This model used the provided FacadeBuilder to "slice" the item quads for the facade provided. @@ -106,7 +107,7 @@ public boolean isCustomRenderer() { } @Override - public ItemOverrides getOverrides() { + public @NotNull ItemOverrides getOverrides() { return ItemOverrides.EMPTY; } } diff --git a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java index f7388fd3541..765e79e3336 100644 --- a/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java +++ b/src/main/java/appeng/client/render/cablebus/CableBusBakedModel.java @@ -28,6 +28,7 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.renderer.v1.mesh.Mesh; +import net.fabricmc.fabric.api.renderer.v1.model.WrapperBakedModel; import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; import net.minecraft.client.renderer.block.model.ItemOverrides; import net.minecraft.client.renderer.block.model.ItemTransforms; @@ -99,8 +100,8 @@ public Mesh load(CableBusRenderState renderState) { private CableBusRenderState getRenderState(BlockAndTintGetter blockView, BlockPos pos) { var renderAttachment = blockView.getBlockEntityRenderData(pos); - if (renderAttachment instanceof CableBusRenderState) { - return (CableBusRenderState) renderAttachment; + if (renderAttachment instanceof CableBusRenderState cableBusRenderState) { + return cableBusRenderState; } return null; } @@ -140,7 +141,15 @@ public void emitBlockQuads(BlockAndTintGetter blockView, BlockState state, Block var spin = getPartSpin(partModelData); context.pushTransform(QuadRotator.get(facing, spin)); - bakedModel.emitBlockQuads(blockView, state, pos, randomSupplier, context); + if (bakedModel instanceof IFabricBakedModel dynamicPartBakedModel) { + dynamicPartBakedModel.emitBlockQuads(blockView, state, pos, randomSupplier, context); + } else if (WrapperBakedModel.unwrap(bakedModel) instanceof IFabricBakedModel dynamicPartBakedModel) { + // Shitty workaround to make our custom part models work even when Continuity wraps them for its + // emissive support. + dynamicPartBakedModel.emitBlockQuads(blockView, state, pos, randomSupplier, context); + } else { + bakedModel.emitBlockQuads(blockView, state, pos, randomSupplier, context); + } context.popTransform(); } } diff --git a/src/main/java/appeng/client/render/tesr/ChestBlockEntityRenderer.java b/src/main/java/appeng/client/render/tesr/ChestBlockEntityRenderer.java index 7820f41b67d..82081abc2f2 100644 --- a/src/main/java/appeng/client/render/tesr/ChestBlockEntityRenderer.java +++ b/src/main/java/appeng/client/render/tesr/ChestBlockEntityRenderer.java @@ -20,12 +20,19 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; +import appeng.client.render.DelegateBakedModel; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; +import net.fabricmc.fabric.api.renderer.v1.render.RenderContext; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -43,7 +50,6 @@ import appeng.api.orientation.BlockOrientation; import appeng.blockentity.storage.MEChestBlockEntity; import appeng.client.render.BakedModelUnwrapper; -import appeng.client.render.DelegateBakedModel; import appeng.client.render.model.DriveBakedModel; import appeng.core.definitions.AEBlocks; @@ -101,8 +107,8 @@ public void render(MEChestBlockEntity chest, float partialTicks, PoseStack poseS // drive FaceRotatingModel rotatedModel = new FaceRotatingModel(cellModel, rotation); blockRenderer.tesselateBlock(level, rotatedModel, chest.getBlockState(), chest.getBlockPos(), poseStack, buffer, - false, - RandomSource.create(), 0L, combinedOverlay); + false, + RandomSource.create(), 0L, combinedOverlay); VertexConsumer ledBuffer = buffers.getBuffer(CellLedRenderer.RENDER_LAYER); CellLedRenderer.renderLed(chest, 0, ledBuffer, poseStack, partialTicks); @@ -112,7 +118,7 @@ public void render(MEChestBlockEntity chest, float partialTicks, PoseStack poseS private DriveBakedModel getDriveModel() { BakedModel driveModel = modelManager.getBlockModelShaper() - .getBlockModel(AEBlocks.DRIVE.block().defaultBlockState()); + .getBlockModel(AEBlocks.DRIVE.block().defaultBlockState()); return BakedModelUnwrapper.unwrap(driveModel, DriveBakedModel.class); } @@ -129,7 +135,7 @@ protected FaceRotatingModel(BakedModel base, BlockOrientation r) { } @Override - public List getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) { + public @NotNull List getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) { if (side != null) { side = r.resultingRotate(side); // This fixes the incorrect lightmap position } @@ -138,7 +144,7 @@ public List getQuads(@Nullable BlockState state, @Nullable Direction for (int i = 0; i < quads.size(); i++) { BakedQuad quad = quads.get(i); quads.set(i, new BakedQuad(quad.getVertices(), quad.getTintIndex(), r.rotate(quad.getDirection()), - quad.getSprite(), quad.isShade())); + quad.getSprite(), quad.isShade())); } return quads;