Fix support for Forge models

- Fully fix IModelData retrieval
- Fix fluid rendering not using the Forge check
- Make gradlew executable
This commit is contained in:
PepperCode1 committed 2022-04-07 18:00:00 -07:00
1 parent b6373e9d1a
commit 2d437802f3
3 files changed
+28 -28

No files matched your search

Vendored Regular → Executable
View File
File mode changed.
@@ -26,8 +26,11 @@ import net.minecraft.client.render.chunk.ChunkOcclusionDataBuilder;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.fluid.FluidState;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.util.math.ChunkSectionPos;
import net.minecraftforge.client.ForgeHooksClient;
import net.minecraftforge.client.model.ModelDataManager;
import net.minecraftforge.client.model.data.EmptyModelData;
import net.minecraftforge.client.model.data.IModelData;
import java.util.EnumMap;
@@ -74,6 +77,8 @@ public class ChunkRenderRebuildTask extends ChunkRenderBuildTask {
int maxY = minY + 16;
int maxZ = minZ + 16;
Map<BlockPos, IModelData> modelDataMap = ModelDataManager.getModelData(MinecraftClient.getInstance().world, new ChunkPos(ChunkSectionPos.getSectionCoord(minX), ChunkSectionPos.getSectionCoord(minZ)));
BlockPos.Mutable blockPos = new BlockPos.Mutable();
BlockPos.Mutable offset = new BlockPos.Mutable();
@@ -96,38 +101,42 @@ public class ChunkRenderRebuildTask extends ChunkRenderBuildTask {
boolean rendered = false;
if (blockState.getRenderType() == BlockRenderType.MODEL) {
for (RenderLayer layer : RenderLayer.getBlockLayers()) {
for (RenderLayer layer : RenderLayer.getBlockLayers()) {
if (!RenderLayers.canRenderInLayer(blockState, layer)) {
continue;
}
ForgeHooksClient.setRenderType(layer);
IModelData modelData = modelDataMap.getOrDefault(blockPos, EmptyModelData.INSTANCE);
if (SodiumClientMod.oculusLoaded && buildContext.buffers instanceof ChunkBuildBuffersExt) {
((ChunkBuildBuffersExt) buildContext.buffers).iris$setMaterialId(blockState, (short) -1);
}
ForgeHooksClient.setRenderType(layer);
IModelData modelData = ModelDataManager.getModelData(Objects.requireNonNull(MinecraftClient.getInstance().world), blockPos);
BakedModel model = cache.getBlockModels()
.getModel(blockState);
long seed = blockState.getRenderingSeed(blockPos);
if (cache.getBlockRenderer().renderModel(slice, blockState, blockPos, offset, model, buffers.get(layer), true, seed, modelData)) {
rendered = true;
}
ForgeHooksClient.setRenderType(null);
}
}
FluidState fluidState = blockState.getFluidState();
if (!fluidState.isEmpty()) {
RenderLayer layer = RenderLayers.getFluidLayer(fluidState);
for (RenderLayer layer : RenderLayer.getBlockLayers()) {
if (!RenderLayers.canRenderInLayer(fluidState, layer)) {
continue;
}
if (cache.getFluidRenderer().render(slice, fluidState, blockPos, offset, buffers.get(layer))) {
rendered = true;
ForgeHooksClient.setRenderType(layer);
if (cache.getFluidRenderer().render(slice, fluidState, blockPos, offset, buffers.get(layer))) {
rendered = true;
}
}
}
@@ -155,6 +164,8 @@ public class ChunkRenderRebuildTask extends ChunkRenderBuildTask {
}
}
ForgeHooksClient.setRenderType(null);
Map<BlockRenderPass, ChunkMeshData> meshes = new EnumMap<>(BlockRenderPass.class);
for (BlockRenderPass pass : BlockRenderPass.VALUES) {
@@ -58,21 +58,15 @@ public class BlockRenderer {
public boolean renderModel(BlockRenderView world, BlockState state, BlockPos pos, BlockPos origin, BakedModel model, ChunkModelBuilder buffers, boolean cull, long seed, IModelData modelData) {
LightPipeline lighter = this.lighters.getLighter(this.getLightingMode(state, model));
Vec3d offset = state.getModelOffset(world, pos);
if(modelData != null)
modelData = model.getModelData(world, pos, state, modelData);
modelData = model.getModelData(world, pos, state, modelData);
boolean rendered = false;
for (Direction dir : DirectionUtil.ALL_DIRECTIONS) {
this.random.setSeed(seed);
List<BakedQuad> sided;
if(modelData != null)
sided = model.getQuads(state, dir, this.random, modelData);
else
sided = model.getQuads(state, dir, this.random);
List<BakedQuad> sided = model.getQuads(state, dir, this.random, modelData);
if (sided.isEmpty()) {
continue;
@@ -87,12 +81,7 @@ public class BlockRenderer {
this.random.setSeed(seed);
List<BakedQuad> all;
if(modelData != null)
all = model.getQuads(state, null, this.random, modelData);
else
all = model.getQuads(state, null, this.random);
List<BakedQuad> all = model.getQuads(state, null, this.random, modelData);
if (!all.isEmpty()) {
this.renderQuadList(world, state, pos, origin, lighter, offset, buffers, all, ModelQuadFacing.UNASSIGNED);