From 1336fdb08150e679d55bfa3bf24629be33341bd9 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 27 Feb 2025 12:38:38 -0800 Subject: [PATCH 1/3] Model assembly line - Remove BlockModelBuilder and its subclasses - Remove BakedModelBuilder.blockState - Add BakedModelBuilder.pos - While buffering from BakedModelBuilder, use state and pos to get random seed - Make model builder method parameters nullable to allow resetting to defaults - On Forge, change default model data and lookup to try to get model data from block entity from level - Rename VirtualEmptyBlockGetter -> EmptyVirtualBlockGetter - Remove EmptyVirtualBlockGetter.INSTANCE and EmptyVirtualBlockGetter.is() - Convert OriginBlockAndTintGetter to SinglePosVirtualBlockGetter with control over which BlockPos is used - Have FabricSinglePosVirtualBlockGetter.getBlockEntityRenderData check block entity's render data if no render data was set --- .../flywheel/lib/internal/FlwLibXplat.java | 4 - .../flywheel/lib/model/Models.java | 8 +- .../lib/model/baked/BakedModelBuilder.java | 14 ++-- .../lib/model/baked/BlockModelBuilder.java | 51 ------------- ...tter.java => EmptyVirtualBlockGetter.java} | 14 +--- .../model/baked/MultiBlockModelBuilder.java | 8 +- .../model/baked/OriginBlockAndTintGetter.java | 57 --------------- .../baked/SinglePosVirtualBlockGetter.java | 73 +++++++++++++++++++ .../engine_room/vanillin/VanillaVisuals.java | 7 +- .../backend/compile/FlwProgramsReloader.java | 2 +- .../lib/model/baked/BakedModelBufferer.java | 30 ++------ .../model/baked/FabricBakedModelBuilder.java | 14 +++- .../model/baked/FabricBlockModelBuilder.java | 57 --------------- .../baked/FabricMultiBlockModelBuilder.java | 10 ++- .../baked/FabricOriginBlockAndTintGetter.java | 30 -------- .../FabricSinglePosVirtualBlockGetter.java | 59 +++++++++++++++ .../flywheel/impl/FlwLibXplatImpl.java | 8 -- .../lib/model/baked/BakedModelBufferer.java | 33 ++------- .../model/baked/ForgeBakedModelBuilder.java | 26 +++++-- .../model/baked/ForgeBlockModelBuilder.java | 71 ------------------ .../baked/ForgeMultiBlockModelBuilder.java | 16 ++-- .../flywheel/impl/FlwLibXplatImpl.java | 8 -- 22 files changed, 216 insertions(+), 384 deletions(-) delete mode 100644 common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockModelBuilder.java rename common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/{VirtualEmptyBlockGetter.java => EmptyVirtualBlockGetter.java} (61%) delete mode 100644 common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/OriginBlockAndTintGetter.java create mode 100644 common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/SinglePosVirtualBlockGetter.java delete mode 100644 fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java delete mode 100644 fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricOriginBlockAndTintGetter.java create mode 100644 fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricSinglePosVirtualBlockGetter.java delete mode 100644 forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java b/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java index 30ef93951..9391921e1 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java @@ -4,14 +4,12 @@ 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.BlockModelBuilder; import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; public interface FlwLibXplat { FlwLibXplat INSTANCE = DependencyInjection.load(FlwLibXplat.class, "dev.engine_room.flywheel.impl.FlwLibXplatImpl"); @@ -21,7 +19,5 @@ public interface FlwLibXplat { BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel); - BlockModelBuilder createBlockModelBuilder(BlockState state); - MultiBlockModelBuilder createMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions); } diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java index 18d8ffb19..cdb5ae284 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java @@ -1,15 +1,18 @@ package dev.engine_room.flywheel.lib.model; +import java.util.List; import java.util.function.BiConsumer; import com.mojang.blaze3d.vertex.PoseStack; import dev.engine_room.flywheel.api.model.Model; 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.MultiBlockModelBuilder; import dev.engine_room.flywheel.lib.model.baked.PartialModel; +import dev.engine_room.flywheel.lib.model.baked.SinglePosVirtualBlockGetter; import dev.engine_room.flywheel.lib.transform.TransformStack; import dev.engine_room.flywheel.lib.util.RendererReloadCache; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.block.state.BlockState; @@ -20,7 +23,8 @@ * method with the same parameters will return the same object. */ public final class Models { - private static final RendererReloadCache BLOCK_STATE = new RendererReloadCache<>(it -> BlockModelBuilder.create(it) + private static final RendererReloadCache BLOCK_STATE = new RendererReloadCache<>(it -> MultiBlockModelBuilder.create(SinglePosVirtualBlockGetter.createFullDark() + .blockState(it), List.of(BlockPos.ZERO)) .build()); private static final RendererReloadCache PARTIAL = new RendererReloadCache<>(it -> BakedModelBuilder.create(it.get()) .build()); diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBuilder.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBuilder.java index 62795cf06..3eed07db2 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBuilder.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBuilder.java @@ -12,8 +12,8 @@ import dev.engine_room.flywheel.lib.model.SimpleModel; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; @ApiStatus.NonExtendable public abstract class BakedModelBuilder { @@ -21,7 +21,7 @@ public abstract class BakedModelBuilder { @Nullable BlockAndTintGetter level; @Nullable - BlockState blockState; + BlockPos pos; @Nullable PoseStack poseStack; @Nullable @@ -35,22 +35,22 @@ public static BakedModelBuilder create(BakedModel bakedModel) { return FlwLibXplat.INSTANCE.createBakedModelBuilder(bakedModel); } - public BakedModelBuilder level(BlockAndTintGetter level) { + public BakedModelBuilder level(@Nullable BlockAndTintGetter level) { this.level = level; return this; } - public BakedModelBuilder blockState(BlockState blockState) { - this.blockState = blockState; + public BakedModelBuilder pos(@Nullable BlockPos pos) { + this.pos = pos; return this; } - public BakedModelBuilder poseStack(PoseStack poseStack) { + public BakedModelBuilder poseStack(@Nullable PoseStack poseStack) { this.poseStack = poseStack; return this; } - public BakedModelBuilder materialFunc(BiFunction materialFunc) { + public BakedModelBuilder materialFunc(@Nullable BiFunction materialFunc) { this.materialFunc = materialFunc; return this; } diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockModelBuilder.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockModelBuilder.java deleted file mode 100644 index 4ef29359e..000000000 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockModelBuilder.java +++ /dev/null @@ -1,51 +0,0 @@ -package dev.engine_room.flywheel.lib.model.baked; - -import java.util.function.BiFunction; - -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Nullable; - -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.engine_room.flywheel.api.material.Material; -import dev.engine_room.flywheel.lib.internal.FlwLibXplat; -import dev.engine_room.flywheel.lib.model.SimpleModel; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; - -@ApiStatus.NonExtendable -public abstract class BlockModelBuilder { - final BlockState state; - @Nullable - BlockAndTintGetter level; - @Nullable - PoseStack poseStack; - @Nullable - BiFunction materialFunc; - - BlockModelBuilder(BlockState state) { - this.state = state; - } - - public static BlockModelBuilder create(BlockState state) { - return FlwLibXplat.INSTANCE.createBlockModelBuilder(state); - } - - public BlockModelBuilder level(BlockAndTintGetter level) { - this.level = level; - return this; - } - - public BlockModelBuilder poseStack(PoseStack poseStack) { - this.poseStack = poseStack; - return this; - } - - public BlockModelBuilder materialFunc(BiFunction materialFunc) { - this.materialFunc = materialFunc; - return this; - } - - public abstract SimpleModel build(); -} diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/EmptyVirtualBlockGetter.java similarity index 61% rename from common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java rename to common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/EmptyVirtualBlockGetter.java index 825e229f6..a5439444d 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/EmptyVirtualBlockGetter.java @@ -5,26 +5,20 @@ import org.jetbrains.annotations.Nullable; import net.minecraft.core.BlockPos; -import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Fluids; -public class VirtualEmptyBlockGetter extends VirtualBlockGetter { - public static final VirtualEmptyBlockGetter INSTANCE = new VirtualEmptyBlockGetter(p -> 0, p -> 15); - public static final VirtualEmptyBlockGetter FULL_BRIGHT = new VirtualEmptyBlockGetter(p -> 15, p -> 15); - public static final VirtualEmptyBlockGetter FULL_DARK = new VirtualEmptyBlockGetter(p -> 0, p -> 0); +public class EmptyVirtualBlockGetter extends VirtualBlockGetter { + public static final EmptyVirtualBlockGetter FULL_DARK = new EmptyVirtualBlockGetter(p -> 0, p -> 0); + public static final EmptyVirtualBlockGetter FULL_BRIGHT = new EmptyVirtualBlockGetter(p -> 15, p -> 15); - public VirtualEmptyBlockGetter(ToIntFunction blockLightFunc, ToIntFunction skyLightFunc) { + public EmptyVirtualBlockGetter(ToIntFunction blockLightFunc, ToIntFunction skyLightFunc) { super(blockLightFunc, skyLightFunc); } - public static boolean is(BlockAndTintGetter blockGetter) { - return blockGetter instanceof VirtualEmptyBlockGetter; - } - @Override @Nullable public final BlockEntity getBlockEntity(BlockPos pos) { diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MultiBlockModelBuilder.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MultiBlockModelBuilder.java index 5a495263e..a1b77d3c4 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MultiBlockModelBuilder.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MultiBlockModelBuilder.java @@ -33,17 +33,17 @@ public static MultiBlockModelBuilder create(BlockAndTintGetter level, Iterable materialFunc) { + public MultiBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { this.materialFunc = materialFunc; return this; } diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/OriginBlockAndTintGetter.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/OriginBlockAndTintGetter.java deleted file mode 100644 index 9df1dbf4f..000000000 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/OriginBlockAndTintGetter.java +++ /dev/null @@ -1,57 +0,0 @@ -package dev.engine_room.flywheel.lib.model.baked; - -import java.util.function.ToIntFunction; - -import org.jetbrains.annotations.Nullable; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; - -public class OriginBlockAndTintGetter extends VirtualBlockGetter { - @Nullable - protected BlockEntity originBlockEntity; - protected BlockState originBlockState = Blocks.AIR.defaultBlockState(); - - public OriginBlockAndTintGetter(ToIntFunction blockLightFunc, ToIntFunction skyLightFunc) { - super(blockLightFunc, skyLightFunc); - } - - public void originBlockEntity(@Nullable BlockEntity blockEntity) { - originBlockEntity = blockEntity; - } - - public void originBlockState(BlockState state) { - originBlockState = state; - } - - @Override - @Nullable - public BlockEntity getBlockEntity(BlockPos pos) { - if (pos.equals(BlockPos.ZERO)) { - return originBlockEntity; - } - - return null; - } - - @Override - public BlockState getBlockState(BlockPos pos) { - if (pos.equals(BlockPos.ZERO)) { - return originBlockState; - } - - return Blocks.AIR.defaultBlockState(); - } - - @Override - public int getHeight() { - return 1; - } - - @Override - public int getMinBuildHeight() { - return 0; - } -} diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/SinglePosVirtualBlockGetter.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/SinglePosVirtualBlockGetter.java new file mode 100644 index 000000000..21d248724 --- /dev/null +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/SinglePosVirtualBlockGetter.java @@ -0,0 +1,73 @@ +package dev.engine_room.flywheel.lib.model.baked; + +import java.util.function.ToIntFunction; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class SinglePosVirtualBlockGetter extends VirtualBlockGetter { + protected BlockPos pos = BlockPos.ZERO; + protected BlockState blockState = Blocks.AIR.defaultBlockState(); + @Nullable + protected BlockEntity blockEntity; + + public SinglePosVirtualBlockGetter(ToIntFunction blockLightFunc, ToIntFunction skyLightFunc) { + super(blockLightFunc, skyLightFunc); + } + + public static SinglePosVirtualBlockGetter createFullDark() { + return new SinglePosVirtualBlockGetter(p -> 0, p -> 0); + } + + public static SinglePosVirtualBlockGetter createFullBright() { + return new SinglePosVirtualBlockGetter(p -> 15, p -> 15); + } + + public SinglePosVirtualBlockGetter pos(BlockPos pos) { + this.pos = pos; + return this; + } + + public SinglePosVirtualBlockGetter blockState(BlockState state) { + blockState = state; + return this; + } + + public SinglePosVirtualBlockGetter blockEntity(@Nullable BlockEntity blockEntity) { + this.blockEntity = blockEntity; + return this; + } + + @Override + @Nullable + public BlockEntity getBlockEntity(BlockPos pos) { + if (pos.equals(this.pos)) { + return blockEntity; + } + + return null; + } + + @Override + public BlockState getBlockState(BlockPos pos) { + if (pos.equals(this.pos)) { + return blockState; + } + + return Blocks.AIR.defaultBlockState(); + } + + @Override + public int getHeight() { + return 1; + } + + @Override + public int getMinBuildHeight() { + return pos.getY(); + } +} diff --git a/common/src/vanillin/java/dev/engine_room/vanillin/VanillaVisuals.java b/common/src/vanillin/java/dev/engine_room/vanillin/VanillaVisuals.java index ae2618add..4108f5afe 100644 --- a/common/src/vanillin/java/dev/engine_room/vanillin/VanillaVisuals.java +++ b/common/src/vanillin/java/dev/engine_room/vanillin/VanillaVisuals.java @@ -3,7 +3,12 @@ import dev.engine_room.vanillin.config.BlockEntityVisualizerBuilder; import dev.engine_room.vanillin.config.Configurator; import dev.engine_room.vanillin.config.EntityVisualizerBuilder; -import dev.engine_room.vanillin.visuals.*; +import dev.engine_room.vanillin.visuals.BellVisual; +import dev.engine_room.vanillin.visuals.ChestVisual; +import dev.engine_room.vanillin.visuals.MinecartVisual; +import dev.engine_room.vanillin.visuals.ShulkerBoxVisual; +import dev.engine_room.vanillin.visuals.SignVisual; +import dev.engine_room.vanillin.visuals.TntMinecartVisual; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; diff --git a/fabric/src/backend/java/dev/engine_room/flywheel/backend/compile/FlwProgramsReloader.java b/fabric/src/backend/java/dev/engine_room/flywheel/backend/compile/FlwProgramsReloader.java index 13f6a77bd..7782a5d7d 100644 --- a/fabric/src/backend/java/dev/engine_room/flywheel/backend/compile/FlwProgramsReloader.java +++ b/fabric/src/backend/java/dev/engine_room/flywheel/backend/compile/FlwProgramsReloader.java @@ -1,7 +1,7 @@ package dev.engine_room.flywheel.backend.compile; -import dev.engine_room.flywheel.lib.util.ResourceUtil; import dev.engine_room.flywheel.backend.NoiseTextures; +import dev.engine_room.flywheel.lib.util.ResourceUtil; import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.packs.resources.ResourceManager; diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java index 16f043185..d8ecd3109 100644 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java +++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java @@ -19,7 +19,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; @@ -33,18 +32,8 @@ final class BakedModelBufferer { private BakedModelBufferer() { } - public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel model, @Nullable BlockState state, @Nullable PoseStack poseStack, ResultConsumer resultConsumer) { + public static void bufferModel(BakedModel model, BlockPos pos, BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ResultConsumer resultConsumer) { ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); - if (level == null) { - if (state == null) { - state = Blocks.AIR.defaultBlockState(); - } - FabricOriginBlockAndTintGetter originLevel = objects.level; - originLevel.originBlockState(state); - level = originLevel; - } else if (state == null) { - state = level.getBlockState(BlockPos.ZERO); - } if (poseStack == null) { poseStack = objects.identityPoseStack; } @@ -56,6 +45,8 @@ public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel m emitter.prepare(resultConsumer); } + long seed = state.getSeed(pos); + RenderType defaultLayer = ItemBlockRenderTypes.getChunkRenderType(state); universalEmitter.prepare(defaultLayer); model = universalEmitter.wrapModel(model); @@ -64,7 +55,7 @@ public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel m Minecraft.getInstance() .getBlockRenderer() .getModelRenderer() - .tesselateBlock(level, model, state, BlockPos.ZERO, poseStack, universalEmitter, false, random, 42L, OverlayTexture.NO_OVERLAY); + .tesselateBlock(level, model, state, pos, poseStack, universalEmitter, false, random, seed, OverlayTexture.NO_OVERLAY); poseStack.popPose(); universalEmitter.clear(); @@ -74,17 +65,6 @@ public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel m } } - public static void bufferBlock(@Nullable BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ResultConsumer resultConsumer) { - if (state.getRenderShape() != RenderShape.MODEL) { - return; - } - - var blockModel = Minecraft.getInstance() - .getBlockRenderer() - .getBlockModel(state); - bufferSingle(level, blockModel, state, poseStack, resultConsumer); - } - public static void bufferMultiBlock(Iterator posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, boolean renderFluids, ResultConsumer resultConsumer) { ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); if (poseStack == null) { @@ -154,7 +134,7 @@ public interface ResultConsumer { } private static class ThreadLocalObjects { - public final FabricOriginBlockAndTintGetter level = new FabricOriginBlockAndTintGetter(p -> 0, p -> 0); + public final FabricSinglePosVirtualBlockGetter level = new FabricSinglePosVirtualBlockGetter(p -> 0, p -> 0); public final PoseStack identityPoseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBakedModelBuilder.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBakedModelBuilder.java index 9db5a23f5..acf01934c 100644 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBakedModelBuilder.java +++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBakedModelBuilder.java @@ -11,6 +11,7 @@ import dev.engine_room.flywheel.lib.model.SimpleModel; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockAndTintGetter; import net.minecraft.world.level.block.state.BlockState; @@ -26,8 +27,8 @@ public FabricBakedModelBuilder level(BlockAndTintGetter level) { } @Override - public FabricBakedModelBuilder blockState(BlockState blockState) { - super.blockState(blockState); + public FabricBakedModelBuilder pos(BlockPos pos) { + super.pos(pos); return this; } @@ -45,13 +46,20 @@ public FabricBakedModelBuilder materialFunc(BiFunctiongetThreadLocal(); - BakedModelBufferer.bufferSingle(level, bakedModel, blockState, poseStack, (renderType, shaded, data) -> { + BakedModelBufferer.bufferModel(bakedModel, pos, level, blockState, poseStack, (renderType, shaded, data) -> { Material material = materialFunc.apply(renderType, shaded); if (material != null) { Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded); diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java deleted file mode 100644 index eaf2d371e..000000000 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java +++ /dev/null @@ -1,57 +0,0 @@ -package dev.engine_room.flywheel.lib.model.baked; - -import java.util.function.BiFunction; - -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.engine_room.flywheel.api.material.Material; -import dev.engine_room.flywheel.api.model.Mesh; -import dev.engine_room.flywheel.api.model.Model; -import dev.engine_room.flywheel.lib.model.ModelUtil; -import dev.engine_room.flywheel.lib.model.SimpleModel; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; - -public final class FabricBlockModelBuilder extends BlockModelBuilder { - public FabricBlockModelBuilder(BlockState state) { - super(state); - } - - @Override - public FabricBlockModelBuilder level(BlockAndTintGetter level) { - super.level(level); - return this; - } - - @Override - public FabricBlockModelBuilder poseStack(PoseStack poseStack) { - super.poseStack(poseStack); - return this; - } - - @Override - public FabricBlockModelBuilder materialFunc(BiFunction materialFunc) { - super.materialFunc(materialFunc); - return this; - } - - @Override - public SimpleModel build() { - if (materialFunc == null) { - materialFunc = ModelUtil::getMaterial; - } - - var builder = ChunkLayerSortedListBuilder.getThreadLocal(); - - BakedModelBufferer.bufferBlock(level, state, poseStack, (renderType, shaded, data) -> { - Material material = materialFunc.apply(renderType, shaded); - if (material != null) { - Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded); - builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); - } - }); - - return new SimpleModel(builder.build()); - } -} diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMultiBlockModelBuilder.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMultiBlockModelBuilder.java index df0c750ae..b65227787 100644 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMultiBlockModelBuilder.java +++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMultiBlockModelBuilder.java @@ -2,6 +2,8 @@ import java.util.function.BiFunction; +import org.jetbrains.annotations.Nullable; + import com.mojang.blaze3d.vertex.PoseStack; import dev.engine_room.flywheel.api.material.Material; @@ -19,19 +21,19 @@ public FabricMultiBlockModelBuilder(BlockAndTintGetter level, Iterable } @Override - public FabricMultiBlockModelBuilder poseStack(PoseStack poseStack) { + public FabricMultiBlockModelBuilder poseStack(@Nullable PoseStack poseStack) { super.poseStack(poseStack); return this; } @Override - public FabricMultiBlockModelBuilder enableFluidRendering() { - super.enableFluidRendering(); + public FabricMultiBlockModelBuilder renderFluids(boolean renderFluids) { + super.renderFluids(renderFluids); return this; } @Override - public FabricMultiBlockModelBuilder materialFunc(BiFunction materialFunc) { + public FabricMultiBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { super.materialFunc(materialFunc); return this; } diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricOriginBlockAndTintGetter.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricOriginBlockAndTintGetter.java deleted file mode 100644 index 6ca65bafe..000000000 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricOriginBlockAndTintGetter.java +++ /dev/null @@ -1,30 +0,0 @@ -package dev.engine_room.flywheel.lib.model.baked; - -import java.util.function.ToIntFunction; - -import org.jetbrains.annotations.Nullable; - -import net.minecraft.core.BlockPos; - -public class FabricOriginBlockAndTintGetter extends OriginBlockAndTintGetter { - @Nullable - protected Object originRenderData; - - public FabricOriginBlockAndTintGetter(ToIntFunction blockLightFunc, ToIntFunction skyLightFunc) { - super(blockLightFunc, skyLightFunc); - } - - public void originRenderData(@Nullable Object renderData) { - originRenderData = renderData; - } - - @Override - @Nullable - public Object getBlockEntityRenderData(BlockPos pos) { - if (pos.equals(BlockPos.ZERO)) { - return originRenderData; - } - - return super.getBlockEntityRenderData(pos); - } -} diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricSinglePosVirtualBlockGetter.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricSinglePosVirtualBlockGetter.java new file mode 100644 index 000000000..7a860daf3 --- /dev/null +++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricSinglePosVirtualBlockGetter.java @@ -0,0 +1,59 @@ +package dev.engine_room.flywheel.lib.model.baked; + +import java.util.function.ToIntFunction; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; + +public class FabricSinglePosVirtualBlockGetter extends SinglePosVirtualBlockGetter { + @Nullable + protected Object renderData; + + public FabricSinglePosVirtualBlockGetter(ToIntFunction blockLightFunc, ToIntFunction skyLightFunc) { + super(blockLightFunc, skyLightFunc); + } + + public static FabricSinglePosVirtualBlockGetter createFullDark() { + return new FabricSinglePosVirtualBlockGetter(p -> 0, p -> 0); + } + + public static FabricSinglePosVirtualBlockGetter createFullBright() { + return new FabricSinglePosVirtualBlockGetter(p -> 15, p -> 15); + } + + @Override + public FabricSinglePosVirtualBlockGetter pos(BlockPos pos) { + super.pos(pos); + return this; + } + + @Override + public FabricSinglePosVirtualBlockGetter blockState(BlockState state) { + super.blockState(blockState); + return this; + } + + @Override + public FabricSinglePosVirtualBlockGetter blockEntity(@Nullable BlockEntity blockEntity) { + super.blockEntity(blockEntity); + return this; + } + + public FabricSinglePosVirtualBlockGetter renderData(@Nullable Object renderData) { + this.renderData = renderData; + return this; + } + + @Override + @Nullable + public Object getBlockEntityRenderData(BlockPos pos) { + if (pos.equals(this.pos)) { + return renderData != null ? renderData : super.getBlockEntityRenderData(pos); + } + + return super.getBlockEntityRenderData(pos); + } +} diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java index a99a95092..cb04e75d8 100644 --- a/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java +++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java @@ -4,9 +4,7 @@ import dev.engine_room.flywheel.lib.internal.FlwLibXplat; 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.FabricBakedModelBuilder; -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.MultiBlockModelBuilder; import net.minecraft.client.resources.model.BakedModel; @@ -14,7 +12,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; public class FlwLibXplatImpl implements FlwLibXplat { @Override @@ -28,11 +25,6 @@ public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) { return new FabricBakedModelBuilder(bakedModel); } - @Override - public BlockModelBuilder createBlockModelBuilder(BlockState state) { - return new FabricBlockModelBuilder(state); - } - @Override public MultiBlockModelBuilder createMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { return new FabricMultiBlockModelBuilder(level, positions); diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java index b38fc8a46..913b204ec 100644 --- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java +++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java @@ -18,7 +18,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.RenderShape; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; @@ -34,26 +33,17 @@ final class BakedModelBufferer { private BakedModelBufferer() { } - public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel model, @Nullable BlockState state, @Nullable PoseStack poseStack, ModelData modelData, ResultConsumer resultConsumer) { + public static void bufferModel(BakedModel model, BlockPos pos, BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ModelData modelData, ResultConsumer resultConsumer) { ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); - if (level == null) { - if (state == null) { - state = Blocks.AIR.defaultBlockState(); - } - OriginBlockAndTintGetter originLevel = objects.level; - originLevel.originBlockState(state); - level = originLevel; - } else if (state == null) { - state = level.getBlockState(BlockPos.ZERO); - } if (poseStack == null) { poseStack = objects.identityPoseStack; } RandomSource random = objects.random; MeshEmitter[] emitters = objects.emitters; - modelData = model.getModelData(level, BlockPos.ZERO, state, modelData); - random.setSeed(42L); + long seed = state.getSeed(pos); + modelData = model.getModelData(level, pos, state, modelData); + random.setSeed(seed); ChunkRenderTypeSet renderTypes = model.getRenderTypes(state, random, modelData); ModelBlockRenderer blockRenderer = Minecraft.getInstance() @@ -67,24 +57,13 @@ public static void bufferSingle(@Nullable BlockAndTintGetter level, BakedModel m emitter.prepare(resultConsumer); poseStack.pushPose(); - blockRenderer.tesselateBlock(level, model, state, BlockPos.ZERO, poseStack, emitter, false, random, 42L, OverlayTexture.NO_OVERLAY, modelData, renderType); + blockRenderer.tesselateBlock(level, model, state, pos, poseStack, emitter, false, random, seed, OverlayTexture.NO_OVERLAY, modelData, renderType); poseStack.popPose(); emitter.end(); } } - public static void bufferBlock(@Nullable BlockAndTintGetter level, BlockState state, @Nullable PoseStack poseStack, ModelData modelData, ResultConsumer resultConsumer) { - if (state.getRenderShape() != RenderShape.MODEL) { - return; - } - - var blockModel = Minecraft.getInstance() - .getBlockRenderer() - .getBlockModel(state); - bufferSingle(level, blockModel, state, poseStack, modelData, resultConsumer); - } - public static void bufferMultiBlock(Iterator posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, Function modelDataLookup, boolean renderFluids, ResultConsumer resultConsumer) { ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); if (poseStack == null) { @@ -156,7 +135,7 @@ public interface ResultConsumer { } private static class ThreadLocalObjects { - public final OriginBlockAndTintGetter level = new OriginBlockAndTintGetter(p -> 0, p -> 0); + public final SinglePosVirtualBlockGetter level = new SinglePosVirtualBlockGetter(p -> 0, p -> 0); public final PoseStack identityPoseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java index 9b49b780b..2162dd634 100644 --- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java +++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBakedModelBuilder.java @@ -13,7 +13,9 @@ import dev.engine_room.flywheel.lib.model.SimpleModel; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.data.ModelData; @@ -26,46 +28,54 @@ public ForgeBakedModelBuilder(BakedModel bakedModel) { } @Override - public ForgeBakedModelBuilder level(BlockAndTintGetter level) { + public ForgeBakedModelBuilder level(@Nullable BlockAndTintGetter level) { super.level(level); return this; } @Override - public ForgeBakedModelBuilder blockState(BlockState blockState) { - super.blockState(blockState); + public ForgeBakedModelBuilder pos(@Nullable BlockPos pos) { + super.pos(pos); return this; } @Override - public ForgeBakedModelBuilder poseStack(PoseStack poseStack) { + public ForgeBakedModelBuilder poseStack(@Nullable PoseStack poseStack) { super.poseStack(poseStack); return this; } @Override - public ForgeBakedModelBuilder materialFunc(BiFunction materialFunc) { + public ForgeBakedModelBuilder materialFunc(@Nullable BiFunction materialFunc) { super.materialFunc(materialFunc); return this; } - public ForgeBakedModelBuilder modelData(ModelData modelData) { + public ForgeBakedModelBuilder modelData(@Nullable ModelData modelData) { this.modelData = modelData; return this; } @Override public SimpleModel build() { + if (level == null) { + level = EmptyVirtualBlockGetter.FULL_DARK; + } + if (pos == null) { + pos = BlockPos.ZERO; + } if (materialFunc == null) { materialFunc = ModelUtil::getMaterial; } if (modelData == null) { - modelData = ModelData.EMPTY; + BlockEntity blockEntity = level.getBlockEntity(pos); + modelData = blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; } + BlockState blockState = level.getBlockState(pos); var builder = ChunkLayerSortedListBuilder.getThreadLocal(); - BakedModelBufferer.bufferSingle(level, bakedModel, blockState, poseStack, modelData, (renderType, shaded, data) -> { + BakedModelBufferer.bufferModel(bakedModel, pos, level, blockState, poseStack, modelData, (renderType, shaded, data) -> { Material material = materialFunc.apply(renderType, shaded); if (material != null) { Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BakedModelBuilder," + "bakedModel=" + bakedModel + ",renderType=" + renderType + ",shaded=" + shaded); diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java deleted file mode 100644 index 5b485c412..000000000 --- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java +++ /dev/null @@ -1,71 +0,0 @@ -package dev.engine_room.flywheel.lib.model.baked; - -import java.util.function.BiFunction; - -import org.jetbrains.annotations.Nullable; - -import com.mojang.blaze3d.vertex.PoseStack; - -import dev.engine_room.flywheel.api.material.Material; -import dev.engine_room.flywheel.api.model.Mesh; -import dev.engine_room.flywheel.api.model.Model; -import dev.engine_room.flywheel.lib.model.ModelUtil; -import dev.engine_room.flywheel.lib.model.SimpleModel; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraftforge.client.model.data.ModelData; - -public final class ForgeBlockModelBuilder extends BlockModelBuilder { - @Nullable - private ModelData modelData; - - public ForgeBlockModelBuilder(BlockState state) { - super(state); - } - - @Override - public ForgeBlockModelBuilder level(BlockAndTintGetter level) { - super.level(level); - return this; - } - - @Override - public ForgeBlockModelBuilder poseStack(PoseStack poseStack) { - super.poseStack(poseStack); - return this; - } - - @Override - public ForgeBlockModelBuilder materialFunc(BiFunction materialFunc) { - super.materialFunc(materialFunc); - return this; - } - - public ForgeBlockModelBuilder modelData(ModelData modelData) { - this.modelData = modelData; - return this; - } - - @Override - public SimpleModel build() { - if (materialFunc == null) { - materialFunc = ModelUtil::getMaterial; - } - if (modelData == null) { - modelData = ModelData.EMPTY; - } - - var builder = ChunkLayerSortedListBuilder.getThreadLocal(); - - BakedModelBufferer.bufferBlock(level, state, poseStack, modelData, (renderType, shaded, data) -> { - Material material = materialFunc.apply(renderType, shaded); - if (material != null) { - Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "blockState=" + state + ",renderType=" + renderType + ",shaded=" + shaded); - builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); - } - }); - - return new SimpleModel(builder.build()); - } -} diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java index ec021aad4..0dcad2689 100644 --- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java +++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java @@ -15,6 +15,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.client.model.data.ModelData; public final class ForgeMultiBlockModelBuilder extends MultiBlockModelBuilder { @@ -26,24 +27,24 @@ public ForgeMultiBlockModelBuilder(BlockAndTintGetter level, Iterable } @Override - public ForgeMultiBlockModelBuilder poseStack(PoseStack poseStack) { + public ForgeMultiBlockModelBuilder poseStack(@Nullable PoseStack poseStack) { super.poseStack(poseStack); return this; } @Override - public ForgeMultiBlockModelBuilder enableFluidRendering() { - super.enableFluidRendering(); + public ForgeMultiBlockModelBuilder renderFluids(boolean renderFluids) { + super.renderFluids(renderFluids); return this; } @Override - public ForgeMultiBlockModelBuilder materialFunc(BiFunction materialFunc) { + public ForgeMultiBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { super.materialFunc(materialFunc); return this; } - public ForgeMultiBlockModelBuilder modelDataLookup(Function modelDataLookup) { + public ForgeMultiBlockModelBuilder modelDataLookup(@Nullable Function modelDataLookup) { this.modelDataLookup = modelDataLookup; return this; } @@ -54,7 +55,10 @@ public SimpleModel build() { materialFunc = ModelUtil::getMaterial; } if (modelDataLookup == null) { - modelDataLookup = pos -> ModelData.EMPTY; + modelDataLookup = pos -> { + BlockEntity blockEntity = level.getBlockEntity(pos); + return blockEntity != null ? blockEntity.getModelData() : ModelData.EMPTY; + }; } var builder = ChunkLayerSortedListBuilder.getThreadLocal(); diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java index 886e9b631..d95f38ba0 100644 --- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java +++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java @@ -4,9 +4,7 @@ import dev.engine_room.flywheel.lib.internal.FlwLibXplat; 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.ForgeBakedModelBuilder; -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.MultiBlockModelBuilder; import net.minecraft.client.resources.model.BakedModel; @@ -14,7 +12,6 @@ import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.BlockAndTintGetter; -import net.minecraft.world.level.block.state.BlockState; public class FlwLibXplatImpl implements FlwLibXplat { @Override @@ -28,11 +25,6 @@ public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) { return new ForgeBakedModelBuilder(bakedModel); } - @Override - public BlockModelBuilder createBlockModelBuilder(BlockState state) { - return new ForgeBlockModelBuilder(state); - } - @Override public MultiBlockModelBuilder createMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { return new ForgeMultiBlockModelBuilder(level, positions); From 50e0cb32a44538014022b621fe99f5e73aaeae42 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 27 Feb 2025 19:42:47 -0800 Subject: [PATCH 2/3] No longer multi - Rename MultiBlockModelBuilder to BlockModelBuilder --- .../flywheel/lib/internal/FlwLibXplat.java | 4 ++-- .../engine_room/flywheel/lib/model/Models.java | 4 ++-- ...kModelBuilder.java => BlockModelBuilder.java} | 14 +++++++------- .../lib/model/baked/BakedModelBufferer.java | 2 +- ...Builder.java => FabricBlockModelBuilder.java} | 14 +++++++------- .../flywheel/impl/FlwLibXplatImpl.java | 8 ++++---- .../lib/model/baked/BakedModelBufferer.java | 2 +- ...lBuilder.java => ForgeBlockModelBuilder.java} | 16 ++++++++-------- .../flywheel/impl/FlwLibXplatImpl.java | 8 ++++---- 9 files changed, 36 insertions(+), 36 deletions(-) rename common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/{MultiBlockModelBuilder.java => BlockModelBuilder.java} (64%) rename fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/{FabricMultiBlockModelBuilder.java => FabricBlockModelBuilder.java} (63%) rename forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/{ForgeMultiBlockModelBuilder.java => ForgeBlockModelBuilder.java} (67%) diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java b/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java index 9391921e1..75563a4fb 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/internal/FlwLibXplat.java @@ -4,7 +4,7 @@ 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.MultiBlockModelBuilder; +import dev.engine_room.flywheel.lib.model.baked.BlockModelBuilder; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.BlockPos; @@ -19,5 +19,5 @@ public interface FlwLibXplat { BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel); - MultiBlockModelBuilder createMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions); + BlockModelBuilder createBlockModelBuilder(BlockAndTintGetter level, Iterable positions); } diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java index cdb5ae284..b7645516f 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/Models.java @@ -7,7 +7,7 @@ import dev.engine_room.flywheel.api.model.Model; import dev.engine_room.flywheel.lib.model.baked.BakedModelBuilder; -import dev.engine_room.flywheel.lib.model.baked.MultiBlockModelBuilder; +import dev.engine_room.flywheel.lib.model.baked.BlockModelBuilder; import dev.engine_room.flywheel.lib.model.baked.PartialModel; import dev.engine_room.flywheel.lib.model.baked.SinglePosVirtualBlockGetter; import dev.engine_room.flywheel.lib.transform.TransformStack; @@ -23,7 +23,7 @@ * method with the same parameters will return the same object. */ public final class Models { - private static final RendererReloadCache BLOCK_STATE = new RendererReloadCache<>(it -> MultiBlockModelBuilder.create(SinglePosVirtualBlockGetter.createFullDark() + private static final RendererReloadCache BLOCK_STATE = new RendererReloadCache<>(it -> BlockModelBuilder.create(SinglePosVirtualBlockGetter.createFullDark() .blockState(it), List.of(BlockPos.ZERO)) .build()); private static final RendererReloadCache PARTIAL = new RendererReloadCache<>(it -> BakedModelBuilder.create(it.get()) diff --git a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MultiBlockModelBuilder.java b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockModelBuilder.java similarity index 64% rename from common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MultiBlockModelBuilder.java rename to common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockModelBuilder.java index a1b77d3c4..67f2eb0a6 100644 --- a/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/MultiBlockModelBuilder.java +++ b/common/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BlockModelBuilder.java @@ -15,7 +15,7 @@ import net.minecraft.world.level.BlockAndTintGetter; @ApiStatus.NonExtendable -public abstract class MultiBlockModelBuilder { +public abstract class BlockModelBuilder { final BlockAndTintGetter level; final Iterable positions; @Nullable @@ -24,26 +24,26 @@ public abstract class MultiBlockModelBuilder { @Nullable BiFunction materialFunc; - MultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { + BlockModelBuilder(BlockAndTintGetter level, Iterable positions) { this.level = level; this.positions = positions; } - public static MultiBlockModelBuilder create(BlockAndTintGetter level, Iterable positions) { - return FlwLibXplat.INSTANCE.createMultiBlockModelBuilder(level, positions); + public static BlockModelBuilder create(BlockAndTintGetter level, Iterable positions) { + return FlwLibXplat.INSTANCE.createBlockModelBuilder(level, positions); } - public MultiBlockModelBuilder poseStack(@Nullable PoseStack poseStack) { + public BlockModelBuilder poseStack(@Nullable PoseStack poseStack) { this.poseStack = poseStack; return this; } - public MultiBlockModelBuilder renderFluids(boolean renderFluids) { + public BlockModelBuilder renderFluids(boolean renderFluids) { this.renderFluids = renderFluids; return this; } - public MultiBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { + public BlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { this.materialFunc = materialFunc; return this; } diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java index d8ecd3109..98e8d3114 100644 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java +++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java @@ -65,7 +65,7 @@ public static void bufferModel(BakedModel model, BlockPos pos, BlockAndTintGette } } - public static void bufferMultiBlock(Iterator posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, boolean renderFluids, ResultConsumer resultConsumer) { + public static void bufferBlocks(Iterator posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, boolean renderFluids, ResultConsumer resultConsumer) { ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); if (poseStack == null) { poseStack = objects.identityPoseStack; diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMultiBlockModelBuilder.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java similarity index 63% rename from fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMultiBlockModelBuilder.java rename to fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java index b65227787..6e3bb0911 100644 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricMultiBlockModelBuilder.java +++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/FabricBlockModelBuilder.java @@ -15,25 +15,25 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockAndTintGetter; -public final class FabricMultiBlockModelBuilder extends MultiBlockModelBuilder { - public FabricMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { +public final class FabricBlockModelBuilder extends BlockModelBuilder { + public FabricBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { super(level, positions); } @Override - public FabricMultiBlockModelBuilder poseStack(@Nullable PoseStack poseStack) { + public FabricBlockModelBuilder poseStack(@Nullable PoseStack poseStack) { super.poseStack(poseStack); return this; } @Override - public FabricMultiBlockModelBuilder renderFluids(boolean renderFluids) { + public FabricBlockModelBuilder renderFluids(boolean renderFluids) { super.renderFluids(renderFluids); return this; } @Override - public FabricMultiBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { + public FabricBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { super.materialFunc(materialFunc); return this; } @@ -46,10 +46,10 @@ public SimpleModel build() { var builder = ChunkLayerSortedListBuilder.getThreadLocal(); - BakedModelBufferer.bufferMultiBlock(positions.iterator(), level, poseStack, renderFluids, (renderType, shaded, data) -> { + BakedModelBufferer.bufferBlocks(positions.iterator(), level, poseStack, renderFluids, (renderType, shaded, data) -> { Material material = materialFunc.apply(renderType, shaded); if (material != null) { - Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded); + Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded); builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); } }); diff --git a/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java index cb04e75d8..c921241ef 100644 --- a/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java +++ b/fabric/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java @@ -5,8 +5,8 @@ import dev.engine_room.flywheel.lib.internal.FlwLibXplat; import dev.engine_room.flywheel.lib.model.baked.BakedModelBuilder; import dev.engine_room.flywheel.lib.model.baked.FabricBakedModelBuilder; -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.FabricBlockModelBuilder; +import dev.engine_room.flywheel.lib.model.baked.BlockModelBuilder; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.BlockPos; @@ -26,7 +26,7 @@ public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) { } @Override - public MultiBlockModelBuilder createMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { - return new FabricMultiBlockModelBuilder(level, positions); + public BlockModelBuilder createBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { + return new FabricBlockModelBuilder(level, positions); } } diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java index 913b204ec..dee112eb6 100644 --- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java +++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java @@ -64,7 +64,7 @@ public static void bufferModel(BakedModel model, BlockPos pos, BlockAndTintGette } } - public static void bufferMultiBlock(Iterator posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, Function modelDataLookup, boolean renderFluids, ResultConsumer resultConsumer) { + public static void bufferBlocks(Iterator posIterator, BlockAndTintGetter level, @Nullable PoseStack poseStack, Function modelDataLookup, boolean renderFluids, ResultConsumer resultConsumer) { ThreadLocalObjects objects = THREAD_LOCAL_OBJECTS.get(); if (poseStack == null) { poseStack = objects.identityPoseStack; diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java similarity index 67% rename from forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java rename to forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java index 0dcad2689..06da266a4 100644 --- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeMultiBlockModelBuilder.java +++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/ForgeBlockModelBuilder.java @@ -18,33 +18,33 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraftforge.client.model.data.ModelData; -public final class ForgeMultiBlockModelBuilder extends MultiBlockModelBuilder { +public final class ForgeBlockModelBuilder extends BlockModelBuilder { @Nullable private Function modelDataLookup; - public ForgeMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { + public ForgeBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { super(level, positions); } @Override - public ForgeMultiBlockModelBuilder poseStack(@Nullable PoseStack poseStack) { + public ForgeBlockModelBuilder poseStack(@Nullable PoseStack poseStack) { super.poseStack(poseStack); return this; } @Override - public ForgeMultiBlockModelBuilder renderFluids(boolean renderFluids) { + public ForgeBlockModelBuilder renderFluids(boolean renderFluids) { super.renderFluids(renderFluids); return this; } @Override - public ForgeMultiBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { + public ForgeBlockModelBuilder materialFunc(@Nullable BiFunction materialFunc) { super.materialFunc(materialFunc); return this; } - public ForgeMultiBlockModelBuilder modelDataLookup(@Nullable Function modelDataLookup) { + public ForgeBlockModelBuilder modelDataLookup(@Nullable Function modelDataLookup) { this.modelDataLookup = modelDataLookup; return this; } @@ -63,10 +63,10 @@ public SimpleModel build() { var builder = ChunkLayerSortedListBuilder.getThreadLocal(); - BakedModelBufferer.bufferMultiBlock(positions.iterator(), level, poseStack, modelDataLookup, renderFluids, (renderType, shaded, data) -> { + BakedModelBufferer.bufferBlocks(positions.iterator(), level, poseStack, modelDataLookup, renderFluids, (renderType, shaded, data) -> { Material material = materialFunc.apply(renderType, shaded); if (material != null) { - Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=MultiBlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded); + Mesh mesh = MeshHelper.blockVerticesToMesh(data, "source=BlockModelBuilder," + "renderType=" + renderType + ",shaded=" + shaded); builder.add(renderType, new Model.ConfiguredMesh(material, mesh)); } }); diff --git a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java index d95f38ba0..04677fe3d 100644 --- a/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java +++ b/forge/src/main/java/dev/engine_room/flywheel/impl/FlwLibXplatImpl.java @@ -5,8 +5,8 @@ import dev.engine_room.flywheel.lib.internal.FlwLibXplat; import dev.engine_room.flywheel.lib.model.baked.BakedModelBuilder; import dev.engine_room.flywheel.lib.model.baked.ForgeBakedModelBuilder; -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.ForgeBlockModelBuilder; +import dev.engine_room.flywheel.lib.model.baked.BlockModelBuilder; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.client.resources.model.ModelManager; import net.minecraft.core.BlockPos; @@ -26,7 +26,7 @@ public BakedModelBuilder createBakedModelBuilder(BakedModel bakedModel) { } @Override - public MultiBlockModelBuilder createMultiBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { - return new ForgeMultiBlockModelBuilder(level, positions); + public BlockModelBuilder createBlockModelBuilder(BlockAndTintGetter level, Iterable positions) { + return new ForgeBlockModelBuilder(level, positions); } } From 8c8f6bce56d79cdd126eda5ec9bcfb33ea556b22 Mon Sep 17 00:00:00 2001 From: PepperCode1 <44146161+PepperCode1@users.noreply.github.com> Date: Thu, 27 Feb 2025 19:57:17 -0800 Subject: [PATCH 3/3] Level drain - Remove BakedModelBufferer.ThreadLocalObjects.level from Forge and Fabric versions --- .../engine_room/flywheel/lib/model/baked/BakedModelBufferer.java | 1 - .../engine_room/flywheel/lib/model/baked/BakedModelBufferer.java | 1 - 2 files changed, 2 deletions(-) diff --git a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java index 98e8d3114..e97c5154e 100644 --- a/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java +++ b/fabric/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java @@ -134,7 +134,6 @@ public interface ResultConsumer { } private static class ThreadLocalObjects { - public final FabricSinglePosVirtualBlockGetter level = new FabricSinglePosVirtualBlockGetter(p -> 0, p -> 0); public final PoseStack identityPoseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance(); diff --git a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java index dee112eb6..996144805 100644 --- a/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java +++ b/forge/src/lib/java/dev/engine_room/flywheel/lib/model/baked/BakedModelBufferer.java @@ -135,7 +135,6 @@ public interface ResultConsumer { } private static class ThreadLocalObjects { - public final SinglePosVirtualBlockGetter level = new SinglePosVirtualBlockGetter(p -> 0, p -> 0); public final PoseStack identityPoseStack = new PoseStack(); public final RandomSource random = RandomSource.createNewThreadLocalInstance();