Skip to content

Commit

Permalink
Fix continuity integration
Browse files Browse the repository at this point in the history
  • Loading branch information
nk2IsHere committed Jan 10, 2025
1 parent dddfc8a commit 9a76baf
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 21 deletions.
14 changes: 12 additions & 2 deletions src/main/java/appeng/client/render/BakedModelUnwrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

package appeng.client.render;

import net.fabricmc.fabric.api.renderer.v1.model.ForwardingBakedModel;
import net.minecraft.client.resources.model.BakedModel;

/**
Expand All @@ -33,8 +34,17 @@ public static <T> T unwrap(BakedModel model, Class<T> 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 {
Expand Down
22 changes: 13 additions & 9 deletions src/main/java/appeng/client/render/DelegateBakedModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -46,8 +46,12 @@ protected DelegateBakedModel(BakedModel base) {
}

@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction direction, RandomSource rand) {
return baseModel.getQuads(state, direction, rand);
public @NotNull List<BakedQuad> getQuads(
@Nullable BlockState state,
@Nullable Direction direction,
RandomSource random
) {
return baseModel.getQuads(state, direction, random);
}

@Override
Expand Down Expand Up @@ -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();
}

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/appeng/client/render/FacadeBakedItemModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -106,7 +107,7 @@ public boolean isCustomRenderer() {
}

@Override
public ItemOverrides getOverrides() {
public @NotNull ItemOverrides getOverrides() {
return ItemOverrides.EMPTY;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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();
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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);
Expand All @@ -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);
}

Expand All @@ -129,7 +135,7 @@ protected FaceRotatingModel(BakedModel base, BlockOrientation r) {
}

@Override
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) {
public @NotNull List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, RandomSource rand) {
if (side != null) {
side = r.resultingRotate(side); // This fixes the incorrect lightmap position
}
Expand All @@ -138,7 +144,7 @@ public List<BakedQuad> 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;
Expand Down

0 comments on commit 9a76baf

Please sign in to comment.