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:
1 parent
b6373e9d1a
commit
2d437802f3
3 files changed
+28
-28
No files matched your search
+23
-12
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user