mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 16:27:47 +00:00
Multiple tweaks and fixes to the recent changes in the client refactor PR: Part 3 (#8864)
Fix weighted baked models not respecting children render types Allow fluid container model to use base texture as particle Fix inverted behavior in composite model building. Fixes #8871
This commit is contained in:
1 parent
427b335cac
commit
8cd2c9c63f
8 files changed
+117
-26
No files matched your search
@@ -757,7 +757,7 @@ public class ForgeHooksClient
|
||||
var model = blockRenderer.getBlockModel(state);
|
||||
for (var renderType : model.getRenderTypes(state, RandomSource.create(state.getSeed(pos)), ModelData.EMPTY))
|
||||
{
|
||||
VertexConsumer vertexConsumer = bufferSource.getBuffer(renderType == RenderType.translucent() ? RenderType.translucentMovingBlock() : renderType);
|
||||
VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderTypeHelper.getMovingBlockRenderType(renderType));
|
||||
blockRenderer.getModelRenderer().tesselateBlock(level, model, state, pos, stack, vertexConsumer, checkSides, RandomSource.create(), state.getSeed(pos), packedOverlay, ModelData.EMPTY, renderType);
|
||||
}
|
||||
}
|
||||
@@ -958,13 +958,9 @@ public class ForgeHooksClient
|
||||
* for the input {@link RenderType}.
|
||||
*/
|
||||
@NotNull
|
||||
public static RenderType getEntityRenderType(RenderType chunkRenderType, boolean fabulous)
|
||||
public static RenderType getEntityRenderType(RenderType chunkRenderType, boolean cull)
|
||||
{
|
||||
if (chunkRenderType != RenderType.translucent())
|
||||
return Sheets.cutoutBlockSheet();
|
||||
if (!Minecraft.useShaderTransparency())
|
||||
return Sheets.translucentCullBlockSheet();
|
||||
return fabulous ? Sheets.translucentCullBlockSheet() : Sheets.translucentItemSheet();
|
||||
return RenderTypeHelper.getEntityRenderType(chunkRenderType, cull);
|
||||
}
|
||||
|
||||
@Mod.EventBusSubscriber(value = Dist.CLIENT, modid="forge", bus= Mod.EventBusSubscriber.Bus.MOD)
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* Copyright (c) Forge Development LLC and contributors
|
||||
* SPDX-License-Identifier: LGPL-2.1-only
|
||||
*/
|
||||
|
||||
package net.minecraftforge.client;
|
||||
|
||||
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.Sheets;
|
||||
import net.minecraft.client.resources.model.BakedModel;
|
||||
import net.minecraft.util.RandomSource;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.client.model.data.ModelData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Provides helper functions replacing those in {@link ItemBlockRenderTypes}.
|
||||
*/
|
||||
public final class RenderTypeHelper
|
||||
{
|
||||
/**
|
||||
* Provides a {@link RenderType} using {@link DefaultVertexFormat#NEW_ENTITY} for the given {@link DefaultVertexFormat#BLOCK} format.
|
||||
* This should be called for each {@link RenderType} returned by {@link BakedModel#getRenderTypes(BlockState, RandomSource, ModelData)}.
|
||||
* <p>
|
||||
* Mimics the behavior of vanilla's {@link ItemBlockRenderTypes#getRenderType(BlockState, boolean)}.
|
||||
*/
|
||||
@NotNull
|
||||
public static RenderType getEntityRenderType(RenderType chunkRenderType, boolean cull)
|
||||
{
|
||||
if (chunkRenderType != RenderType.translucent())
|
||||
return Sheets.cutoutBlockSheet();
|
||||
return cull || !Minecraft.useShaderTransparency() ? Sheets.translucentCullBlockSheet() : Sheets.translucentItemSheet();
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a {@link RenderType} fit for rendering moving blocks given the specified chunk render type.
|
||||
* This should be called for each {@link RenderType} returned by {@link BakedModel#getRenderTypes(BlockState, RandomSource, ModelData)}.
|
||||
* <p>
|
||||
* Mimics the behavior of vanilla's {@link ItemBlockRenderTypes#getMovingBlockRenderType(BlockState)}.
|
||||
*/
|
||||
@NotNull
|
||||
public static RenderType getMovingBlockRenderType(RenderType renderType)
|
||||
{
|
||||
if (renderType == RenderType.translucent())
|
||||
return RenderType.translucentMovingBlock();
|
||||
return renderType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides a fallback {@link RenderType} for the given {@link ItemStack} in the case that none is explicitly specified.
|
||||
* <p>
|
||||
* Mimics the behavior of vanilla's {@link ItemBlockRenderTypes#getRenderType(ItemStack, boolean)}
|
||||
* but removes the need to query the model again if the item is a {@link BlockItem}.
|
||||
*/
|
||||
@NotNull
|
||||
public static RenderType getFallbackItemRenderType(ItemStack stack, BakedModel model, boolean cull)
|
||||
{
|
||||
if (stack.getItem() instanceof BlockItem blockItem)
|
||||
{
|
||||
var renderTypes = model.getRenderTypes(blockItem.getBlock().defaultBlockState(), RandomSource.create(42), ModelData.EMPTY);
|
||||
if (renderTypes.contains(RenderType.translucent()))
|
||||
return getEntityRenderType(RenderType.translucent(), cull);
|
||||
return Sheets.cutoutBlockSheet();
|
||||
}
|
||||
return cull ? Sheets.translucentCullBlockSheet() : Sheets.translucentItemSheet();
|
||||
}
|
||||
|
||||
private RenderTypeHelper()
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.BlockAndTintGetter;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraftforge.client.ChunkRenderTypeSet;
|
||||
import net.minecraftforge.client.RenderTypeHelper;
|
||||
import net.minecraftforge.client.model.data.ModelData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -97,7 +98,7 @@ public interface IForgeBakedModel
|
||||
*/
|
||||
default List<RenderType> getRenderTypes(ItemStack itemStack, boolean fabulous)
|
||||
{
|
||||
return List.of(ItemBlockRenderTypes.getRenderType(itemStack, fabulous));
|
||||
return List.of(RenderTypeHelper.getFallbackItemRenderType(itemStack, self(), fabulous));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -272,14 +272,14 @@ public class CompositeModel implements IUnbakedGeometry<CompositeModel>
|
||||
|
||||
private void addLayer(RenderTypeGroup renderTypes, List<BakedQuad> quads)
|
||||
{
|
||||
var modelBuilder = IModelBuilder.of(true, isSideLit, false, transforms, overrides, particle, renderTypes);
|
||||
var modelBuilder = IModelBuilder.of(isAmbientOcclusion, isSideLit, isGui3d, transforms, overrides, particle, renderTypes);
|
||||
quads.forEach(modelBuilder::addUnculledFace);
|
||||
children.add(modelBuilder.build());
|
||||
}
|
||||
|
||||
private void flushQuads(RenderTypeGroup renderTypes)
|
||||
{
|
||||
if (Objects.equals(renderTypes, lastRenderTypes))
|
||||
if (!Objects.equals(renderTypes, lastRenderTypes))
|
||||
{
|
||||
if (quads.size() > 0)
|
||||
{
|
||||
|
||||
@@ -128,6 +128,7 @@ public class DynamicFluidContainerModel implements IUnbakedGeometry<DynamicFluid
|
||||
TextureAtlasSprite particleSprite = particleLocation != null ? spriteGetter.apply(particleLocation) : null;
|
||||
|
||||
if (particleSprite == null) particleSprite = fluidSprite;
|
||||
if (particleSprite == null) particleSprite = baseSprite;
|
||||
if (particleSprite == null && !coverIsMask) particleSprite = coverSprite;
|
||||
|
||||
// If the fluid is lighter than air, rotate 180deg to turn it upside down
|
||||
|
||||
Reference in new issue
Block a user