mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-01-30 23:04:57 +01:00
Chronically inline
- Replace ModelUtil.VANILLA_RENDERER with the actual vanilla renderer - Inline it and remove the static field - Remove the BlockRenderDispatcher parameter from all BakedModelBufferer functions - Remove FlwLibLink#createVanillaBlockRenderDispatcher
This commit is contained in:
parent
843b7e9a0b
commit
e57702f742
12 changed files with 36 additions and 55 deletions
|
@ -6,7 +6,6 @@ import dev.engine_room.flywheel.api.internal.DependencyInjection;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.BakedModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.BakedModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.BlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.BlockModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
||||||
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.client.resources.model.ModelManager;
|
import net.minecraft.client.resources.model.ModelManager;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
@ -20,8 +19,6 @@ public interface FlwLibXplat {
|
||||||
@UnknownNullability
|
@UnknownNullability
|
||||||
BakedModel getBakedModel(ModelManager modelManager, ResourceLocation location);
|
BakedModel getBakedModel(ModelManager modelManager, ResourceLocation location);
|
||||||
|
|
||||||
BlockRenderDispatcher createVanillaBlockRenderDispatcher();
|
|
||||||
|
|
||||||
BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel);
|
BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel);
|
||||||
|
|
||||||
BlockModelBuilder createBlockModelBuilder(BlockState state);
|
BlockModelBuilder createBlockModelBuilder(BlockState state);
|
||||||
|
|
|
@ -10,20 +10,13 @@ import dev.engine_room.flywheel.api.material.Material;
|
||||||
import dev.engine_room.flywheel.api.model.Mesh;
|
import dev.engine_room.flywheel.api.model.Mesh;
|
||||||
import dev.engine_room.flywheel.api.model.Model;
|
import dev.engine_room.flywheel.api.model.Model;
|
||||||
import dev.engine_room.flywheel.api.vertex.VertexList;
|
import dev.engine_room.flywheel.api.vertex.VertexList;
|
||||||
import dev.engine_room.flywheel.lib.internal.FlwLibXplat;
|
|
||||||
import dev.engine_room.flywheel.lib.material.Materials;
|
import dev.engine_room.flywheel.lib.material.Materials;
|
||||||
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
|
import dev.engine_room.flywheel.lib.memory.MemoryBlock;
|
||||||
import dev.engine_room.flywheel.lib.vertex.PosVertexView;
|
import dev.engine_room.flywheel.lib.vertex.PosVertexView;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.Sheets;
|
import net.minecraft.client.renderer.Sheets;
|
||||||
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
|
||||||
|
|
||||||
public final class ModelUtil {
|
public final class ModelUtil {
|
||||||
/**
|
|
||||||
* An alternative BlockRenderDispatcher that circumvents the Forge rendering pipeline to ensure consistency.
|
|
||||||
* Meant to be used for virtual rendering.
|
|
||||||
*/
|
|
||||||
public static final BlockRenderDispatcher VANILLA_RENDERER = FlwLibXplat.INSTANCE.createVanillaBlockRenderDispatcher();
|
|
||||||
private static final float BOUNDING_SPHERE_EPSILON = 1e-4f;
|
private static final float BOUNDING_SPHERE_EPSILON = 1e-4f;
|
||||||
|
|
||||||
private ModelUtil() {
|
private ModelUtil() {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
|
||||||
import it.unimi.dsi.fastutil.objects.Reference2ReferenceMap;
|
import it.unimi.dsi.fastutil.objects.Reference2ReferenceMap;
|
||||||
import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap;
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
||||||
|
@ -32,7 +33,7 @@ final class BakedModelBufferer {
|
||||||
private BakedModelBufferer() {
|
private BakedModelBufferer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bufferSingle(ModelBlockRenderer blockRenderer, @Nullable BlockAndTintGetter level, BakedModel model, @Nullable BlockState state, @Nullable PoseStack poseStack, ResultConsumer resultConsumer) {
|
public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel model, @Nullable BlockState state, @Nullable PoseStack poseStack, ResultConsumer resultConsumer) {
|
||||||
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||||
if (level == null) {
|
if (level == null) {
|
||||||
if (state == null) {
|
if (state == null) {
|
||||||
|
@ -60,7 +61,10 @@ final class BakedModelBufferer {
|
||||||
model = universalEmitter.wrapModel(model);
|
model = universalEmitter.wrapModel(model);
|
||||||
|
|
||||||
poseStack.pushPose();
|
poseStack.pushPose();
|
||||||
blockRenderer.tesselateBlock(level, model, state, BlockPos.ZERO, poseStack, universalEmitter, false, random, 42L, OverlayTexture.NO_OVERLAY);
|
Minecraft.getInstance()
|
||||||
|
.getBlockRenderer()
|
||||||
|
.getModelRenderer()
|
||||||
|
.tesselateBlock(level, model, state, BlockPos.ZERO, poseStack, universalEmitter, false, random, 42L, OverlayTexture.NO_OVERLAY);
|
||||||
poseStack.popPose();
|
poseStack.popPose();
|
||||||
|
|
||||||
universalEmitter.clear();
|
universalEmitter.clear();
|
||||||
|
@ -70,15 +74,18 @@ final class BakedModelBufferer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bufferBlock(BlockRenderDispatcher renderDispatcher, @Nullable BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ResultConsumer resultConsumer) {
|
public static void bufferBlock(@Nullable BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ResultConsumer resultConsumer) {
|
||||||
if (state.getRenderShape() != RenderShape.MODEL) {
|
if (state.getRenderShape() != RenderShape.MODEL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bufferSingle(renderDispatcher.getModelRenderer(), level, renderDispatcher.getBlockModel(state), state, poseStack, resultConsumer);
|
var blockModel = Minecraft.getInstance()
|
||||||
|
.getBlockRenderer()
|
||||||
|
.getBlockModel(state);
|
||||||
|
bufferSingle(level, blockModel, state, poseStack, resultConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bufferMultiBlock(BlockRenderDispatcher renderDispatcher, Iterator<BlockPos> posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, boolean renderFluids, ResultConsumer resultConsumer) {
|
public static void bufferMultiBlock(Iterator<BlockPos> posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, boolean renderFluids, ResultConsumer resultConsumer) {
|
||||||
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||||
if (poseStack == null) {
|
if (poseStack == null) {
|
||||||
poseStack = objects.identityPoseStack;
|
poseStack = objects.identityPoseStack;
|
||||||
|
@ -93,6 +100,9 @@ final class BakedModelBufferer {
|
||||||
emitter.prepare(resultConsumer);
|
emitter.prepare(resultConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BlockRenderDispatcher renderDispatcher = Minecraft.getInstance()
|
||||||
|
.getBlockRenderer();
|
||||||
|
|
||||||
ModelBlockRenderer blockRenderer = renderDispatcher.getModelRenderer();
|
ModelBlockRenderer blockRenderer = renderDispatcher.getModelRenderer();
|
||||||
ModelBlockRenderer.enableCaching();
|
ModelBlockRenderer.enableCaching();
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ public final class FabricBakedModelBuilder extends BakedModelBuilder {
|
||||||
|
|
||||||
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
||||||
|
|
||||||
BakedModelBufferer.bufferSingle(ModelUtil.VANILLA_RENDERER.getModelRenderer(), level, bakedModel, blockState, poseStack, (renderType, shaded, data) -> {
|
BakedModelBufferer.bufferSingle(level, bakedModel, blockState, poseStack, (renderType, shaded, data) -> {
|
||||||
Material material = materialFunc.apply(renderType, shaded);
|
Material material = materialFunc.apply(renderType, shaded);
|
||||||
if (material != null) {
|
if (material != null) {
|
||||||
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
|
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class FabricBlockModelBuilder extends BlockModelBuilder {
|
||||||
|
|
||||||
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
||||||
|
|
||||||
BakedModelBufferer.bufferBlock(ModelUtil.VANILLA_RENDERER, level, state, poseStack, (renderType, shaded, data) -> {
|
BakedModelBufferer.bufferBlock(level, state, poseStack, (renderType, shaded, data) -> {
|
||||||
Material material = materialFunc.apply(renderType, shaded);
|
Material material = materialFunc.apply(renderType, shaded);
|
||||||
if (material != null) {
|
if (material != null) {
|
||||||
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
|
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
|
||||||
|
|
|
@ -44,7 +44,7 @@ public final class FabricMultiBlockModelBuilder extends MultiBlockModelBuilder {
|
||||||
|
|
||||||
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
||||||
|
|
||||||
BakedModelBufferer.bufferMultiBlock(ModelUtil.VANILLA_RENDERER, positions.iterator(), level, poseStack, renderFluids, (renderType, shaded, data) -> {
|
BakedModelBufferer.bufferMultiBlock(positions.iterator(), level, poseStack, renderFluids, (renderType, shaded, data) -> {
|
||||||
Material material = materialFunc.apply(renderType, shaded);
|
Material material = materialFunc.apply(renderType, shaded);
|
||||||
if (material != null) {
|
if (material != null) {
|
||||||
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
|
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
|
||||||
|
|
|
@ -9,8 +9,6 @@ import dev.engine_room.flywheel.lib.model.baked.FabricBakedModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.FabricBlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.FabricBlockModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.FabricMultiBlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.FabricMultiBlockModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.client.resources.model.ModelManager;
|
import net.minecraft.client.resources.model.ModelManager;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
|
@ -25,11 +23,6 @@ public class FlwLibXplatImpl implements FlwLibXplat {
|
||||||
return modelManager.getModel(location);
|
return modelManager.getModel(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockRenderDispatcher createVanillaBlockRenderDispatcher() {
|
|
||||||
return Minecraft.getInstance().getBlockRenderer();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) {
|
public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) {
|
||||||
return new FabricBakedModelBuilder(bakedModel);
|
return new FabricBakedModelBuilder(bakedModel);
|
||||||
|
|
|
@ -8,6 +8,7 @@ import org.jetbrains.annotations.Nullable;
|
||||||
import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer;
|
import com.mojang.blaze3d.vertex.BufferBuilder.RenderedBuffer;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
|
||||||
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
||||||
import net.minecraft.client.renderer.RenderType;
|
import net.minecraft.client.renderer.RenderType;
|
||||||
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
||||||
|
@ -33,7 +34,7 @@ final class BakedModelBufferer {
|
||||||
private BakedModelBufferer() {
|
private BakedModelBufferer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bufferSingle(ModelBlockRenderer blockRenderer, @Nullable BlockAndTintGetter level, BakedModel model, @Nullable BlockState state, @Nullable PoseStack poseStack, ModelData modelData, ResultConsumer resultConsumer) {
|
public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel model, @Nullable BlockState state, @Nullable PoseStack poseStack, ModelData modelData, ResultConsumer resultConsumer) {
|
||||||
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||||
if (level == null) {
|
if (level == null) {
|
||||||
if (state == null) {
|
if (state == null) {
|
||||||
|
@ -55,6 +56,10 @@ final class BakedModelBufferer {
|
||||||
random.setSeed(42L);
|
random.setSeed(42L);
|
||||||
ChunkRenderTypeSet renderTypes = model.getRenderTypes(state, random, modelData);
|
ChunkRenderTypeSet renderTypes = model.getRenderTypes(state, random, modelData);
|
||||||
|
|
||||||
|
ModelBlockRenderer blockRenderer = Minecraft.getInstance()
|
||||||
|
.getBlockRenderer()
|
||||||
|
.getModelRenderer();
|
||||||
|
|
||||||
for (RenderType renderType : renderTypes) {
|
for (RenderType renderType : renderTypes) {
|
||||||
int layerIndex = renderType.getChunkLayerId();
|
int layerIndex = renderType.getChunkLayerId();
|
||||||
MeshEmitter emitter = emitters[layerIndex];
|
MeshEmitter emitter = emitters[layerIndex];
|
||||||
|
@ -69,15 +74,18 @@ final class BakedModelBufferer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bufferBlock(BlockRenderDispatcher renderDispatcher, @Nullable BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ModelData modelData, ResultConsumer resultConsumer) {
|
public static void bufferBlock(@Nullable BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ModelData modelData, ResultConsumer resultConsumer) {
|
||||||
if (state.getRenderShape() != RenderShape.MODEL) {
|
if (state.getRenderShape() != RenderShape.MODEL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bufferSingle(renderDispatcher.getModelRenderer(), level, renderDispatcher.getBlockModel(state), state, poseStack, modelData, resultConsumer);
|
var blockModel = Minecraft.getInstance()
|
||||||
|
.getBlockRenderer()
|
||||||
|
.getBlockModel(state);
|
||||||
|
bufferSingle(level, blockModel, state, poseStack, modelData, resultConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bufferMultiBlock(BlockRenderDispatcher renderDispatcher, Iterator<BlockPos> posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, Function<BlockPos, ModelData> modelDataLookup, boolean renderFluids, ResultConsumer resultConsumer) {
|
public static void bufferMultiBlock(Iterator<BlockPos> posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, Function<BlockPos, ModelData> modelDataLookup, boolean renderFluids, ResultConsumer resultConsumer) {
|
||||||
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get();
|
||||||
if (poseStack == null) {
|
if (poseStack == null) {
|
||||||
poseStack = objects.identityPoseStack;
|
poseStack = objects.identityPoseStack;
|
||||||
|
@ -90,6 +98,9 @@ final class BakedModelBufferer {
|
||||||
emitter.prepare(resultConsumer);
|
emitter.prepare(resultConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BlockRenderDispatcher renderDispatcher = Minecraft.getInstance()
|
||||||
|
.getBlockRenderer();
|
||||||
|
|
||||||
ModelBlockRenderer blockRenderer = renderDispatcher.getModelRenderer();
|
ModelBlockRenderer blockRenderer = renderDispatcher.getModelRenderer();
|
||||||
ModelBlockRenderer.enableCaching();
|
ModelBlockRenderer.enableCaching();
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ public final class ForgeBakedModelBuilder extends BakedModelBuilder {
|
||||||
|
|
||||||
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
||||||
|
|
||||||
BakedModelBufferer.bufferSingle(ModelUtil.VANILLA_RENDERER.getModelRenderer(), level, bakedModel, blockState, poseStack, modelData, (renderType, shaded, data) -> {
|
BakedModelBufferer.bufferSingle(level, bakedModel, blockState, poseStack, modelData, (renderType, shaded, data) -> {
|
||||||
Material material = materialFunc.apply(renderType, shaded);
|
Material material = materialFunc.apply(renderType, shaded);
|
||||||
if (material != null) {
|
if (material != null) {
|
||||||
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
|
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded);
|
||||||
|
|
|
@ -58,7 +58,7 @@ public final class ForgeBlockModelBuilder extends BlockModelBuilder {
|
||||||
|
|
||||||
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
||||||
|
|
||||||
BakedModelBufferer.bufferBlock(ModelUtil.VANILLA_RENDERER, level, state, poseStack, modelData, (renderType, shaded, data) -> {
|
BakedModelBufferer.bufferBlock(level, state, poseStack, modelData, (renderType, shaded, data) -> {
|
||||||
Material material = materialFunc.apply(renderType, shaded);
|
Material material = materialFunc.apply(renderType, shaded);
|
||||||
if (material != null) {
|
if (material != null) {
|
||||||
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
|
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded);
|
||||||
|
|
|
@ -59,7 +59,7 @@ public final class ForgeMultiBlockModelBuilder extends MultiBlockModelBuilder {
|
||||||
|
|
||||||
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
var builder = ChunkLayerSortedListBuilder.<Model.ConfiguredMesh>getThreadLocal();
|
||||||
|
|
||||||
BakedModelBufferer.bufferMultiBlock(ModelUtil.VANILLA_RENDERER, positions.iterator(), level, poseStack, modelDataLookup, renderFluids, (renderType, shaded, data) -> {
|
BakedModelBufferer.bufferMultiBlock(positions.iterator(), level, poseStack, modelDataLookup, renderFluids, (renderType, shaded, data) -> {
|
||||||
Material material = materialFunc.apply(renderType, shaded);
|
Material material = materialFunc.apply(renderType, shaded);
|
||||||
if (material != null) {
|
if (material != null) {
|
||||||
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
|
Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package dev.engine_room.flywheel.impl;
|
package dev.engine_room.flywheel.impl;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.UnknownNullability;
|
import org.jetbrains.annotations.UnknownNullability;
|
||||||
|
|
||||||
import dev.engine_room.flywheel.lib.internal.FlwLibXplat;
|
import dev.engine_room.flywheel.lib.internal.FlwLibXplat;
|
||||||
|
@ -11,16 +9,12 @@ import dev.engine_room.flywheel.lib.model.baked.ForgeBakedModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.ForgeBlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.ForgeBlockModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.ForgeMultiBlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.ForgeMultiBlockModelBuilder;
|
||||||
import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder;
|
||||||
import net.minecraft.client.Minecraft;
|
|
||||||
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
|
|
||||||
import net.minecraft.client.renderer.block.ModelBlockRenderer;
|
|
||||||
import net.minecraft.client.resources.model.BakedModel;
|
import net.minecraft.client.resources.model.BakedModel;
|
||||||
import net.minecraft.client.resources.model.ModelManager;
|
import net.minecraft.client.resources.model.ModelManager;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.level.BlockAndTintGetter;
|
import net.minecraft.world.level.BlockAndTintGetter;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
import net.minecraftforge.fml.util.ObfuscationReflectionHelper;
|
|
||||||
|
|
||||||
public class FlwLibXplatImpl implements FlwLibXplat {
|
public class FlwLibXplatImpl implements FlwLibXplat {
|
||||||
@Override
|
@Override
|
||||||
|
@ -29,23 +23,6 @@ public class FlwLibXplatImpl implements FlwLibXplat {
|
||||||
return modelManager.getModel(location);
|
return modelManager.getModel(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockRenderDispatcher createVanillaBlockRenderDispatcher() {
|
|
||||||
BlockRenderDispatcher defaultDispatcher = Minecraft.getInstance().getBlockRenderer();
|
|
||||||
BlockRenderDispatcher dispatcher = new BlockRenderDispatcher(null, null, null);
|
|
||||||
try {
|
|
||||||
for (Field field : BlockRenderDispatcher.class.getDeclaredFields()) {
|
|
||||||
field.setAccessible(true);
|
|
||||||
field.set(dispatcher, field.get(defaultDispatcher));
|
|
||||||
}
|
|
||||||
ObfuscationReflectionHelper.setPrivateValue(BlockRenderDispatcher.class, dispatcher, new ModelBlockRenderer(Minecraft.getInstance().getBlockColors()), "f_110900_");
|
|
||||||
} catch (Exception e) {
|
|
||||||
FlwImpl.LOGGER.error("Failed to initialize vanilla BlockRenderDispatcher!", e);
|
|
||||||
return defaultDispatcher;
|
|
||||||
}
|
|
||||||
return dispatcher;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) {
|
public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) {
|
||||||
return new ForgeBakedModelBuilder(bakedModel);
|
return new ForgeBakedModelBuilder(bakedModel);
|
||||||
|
|
Loading…
Reference in a new issue