From 8f7c4902e8deb0054635239bad88c4c4d2c26296 Mon Sep 17 00:00:00 2001 From: vercte Date: Thu, 28 Aug 2025 17:07:16 -0700 Subject: [PATCH 1/3] What the hell am i doing --- .../basin/BasinMovementBehaviour.java | 37 +++++++++++++++++++ .../processing/basin/BasinRenderer.java | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java index 5f21a3fd6e..4574c0450d 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java @@ -1,20 +1,32 @@ package com.simibubi.create.content.processing.basin; import java.util.HashMap; +import java.util.List; import java.util.Map; +import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.api.behaviour.movement.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; +import com.simibubi.create.content.contraptions.render.ContraptionMatrices; +import com.simibubi.create.foundation.render.BlockEntityRenderHelper; +import com.simibubi.create.foundation.virtualWorld.VirtualRenderWorld; + +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.core.Direction; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.phys.Vec3; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.ItemStackHandler; public class BasinMovementBehaviour implements MovementBehaviour { + @OnlyIn(Dist.CLIENT) + private Map BASINS = new HashMap<>(); + public Map getOrReadInventory(MovementContext context) { Map map = new HashMap<>(); map.put("InputItems", new ItemStackHandler(9)); @@ -53,4 +65,29 @@ private void dump(MovementContext context, Vec3 facingVec) { ((BasinBlockEntity) blockEntity).readOnlyItems(context.blockEntityData); context.temporaryData = false; // did already dump, so can't any more } + + @Override + public boolean disableBlockEntityRendering() { + return true; + } + + @OnlyIn(Dist.CLIENT) + private BasinBlockEntity getBasinBlockEntity(Long l, MovementContext context, VirtualRenderWorld renderWorld) { + return BASINS.computeIfAbsent(l, u -> { + BasinBlockEntity basin = new BasinBlockEntity(AllBlockEntityTypes.BASIN.get(), context.localPos, context.state); + basin.setLevel(renderWorld); + return basin; + }); + } + + @Override + @OnlyIn(Dist.CLIENT) + public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, ContraptionMatrices matrices, MultiBufferSource buffer) { + BasinBlockEntity basin = getBasinBlockEntity(context.localPos.asLong(), context, renderWorld); + basin.read(context.blockEntityData, true); + basin.tick(); + + BlockEntityRenderHelper.renderBlockEntities(context.world, renderWorld, List.of(basin), + matrices.getModelViewProjection(), matrices.getLight(), buffer); + } } diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java index 3e604c2851..ba5a92c74c 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java @@ -139,7 +139,7 @@ protected void renderItem(PoseStack ms, MultiBufferSource buffer, int light, int .renderStatic(stack, ItemDisplayContext.GROUND, light, overlay, ms, buffer, mc.level, 0); } - protected float renderFluids(BasinBlockEntity basin, float partialTicks, PoseStack ms, MultiBufferSource buffer, + protected static float renderFluids(BasinBlockEntity basin, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { SmartFluidTankBehaviour inputFluids = basin.getBehaviour(SmartFluidTankBehaviour.INPUT); SmartFluidTankBehaviour outputFluids = basin.getBehaviour(SmartFluidTankBehaviour.OUTPUT); From 4fbbd6cd1adede973b249b71a6f8ed2ef4d9d8ae Mon Sep 17 00:00:00 2001 From: vercte Date: Thu, 28 Aug 2025 17:17:13 -0700 Subject: [PATCH 2/3] Haha! don't need that anymore --- .../simibubi/create/content/processing/basin/BasinRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java index ba5a92c74c..3e604c2851 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinRenderer.java @@ -139,7 +139,7 @@ protected void renderItem(PoseStack ms, MultiBufferSource buffer, int light, int .renderStatic(stack, ItemDisplayContext.GROUND, light, overlay, ms, buffer, mc.level, 0); } - protected static float renderFluids(BasinBlockEntity basin, float partialTicks, PoseStack ms, MultiBufferSource buffer, + protected float renderFluids(BasinBlockEntity basin, float partialTicks, PoseStack ms, MultiBufferSource buffer, int light, int overlay) { SmartFluidTankBehaviour inputFluids = basin.getBehaviour(SmartFluidTankBehaviour.INPUT); SmartFluidTankBehaviour outputFluids = basin.getBehaviour(SmartFluidTankBehaviour.OUTPUT); From 95d0f9abd26f594a217d3aeb39680bbda5b3a01b Mon Sep 17 00:00:00 2001 From: vercte Date: Thu, 28 Aug 2025 21:38:46 -0700 Subject: [PATCH 3/3] its better now ! --- .../basin/BasinMovementBehaviour.java | 38 ++++++++----------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java b/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java index 4574c0450d..61075d8e8f 100644 --- a/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java +++ b/src/main/java/com/simibubi/create/content/processing/basin/BasinMovementBehaviour.java @@ -1,10 +1,10 @@ package com.simibubi.create.content.processing.basin; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; -import com.simibubi.create.AllBlockEntityTypes; import com.simibubi.create.api.behaviour.movement.MovementBehaviour; import com.simibubi.create.content.contraptions.behaviour.MovementContext; @@ -24,9 +24,6 @@ import net.minecraftforge.items.ItemStackHandler; public class BasinMovementBehaviour implements MovementBehaviour { - @OnlyIn(Dist.CLIENT) - private Map BASINS = new HashMap<>(); - public Map getOrReadInventory(MovementContext context) { Map map = new HashMap<>(); map.put("InputItems", new ItemStackHandler(9)); @@ -66,28 +63,23 @@ private void dump(MovementContext context, Vec3 facingVec) { context.temporaryData = false; // did already dump, so can't any more } - @Override - public boolean disableBlockEntityRendering() { - return true; - } - - @OnlyIn(Dist.CLIENT) - private BasinBlockEntity getBasinBlockEntity(Long l, MovementContext context, VirtualRenderWorld renderWorld) { - return BASINS.computeIfAbsent(l, u -> { - BasinBlockEntity basin = new BasinBlockEntity(AllBlockEntityTypes.BASIN.get(), context.localPos, context.state); - basin.setLevel(renderWorld); - return basin; - }); - } - @Override @OnlyIn(Dist.CLIENT) public void renderInContraption(MovementContext context, VirtualRenderWorld renderWorld, ContraptionMatrices matrices, MultiBufferSource buffer) { - BasinBlockEntity basin = getBasinBlockEntity(context.localPos.asLong(), context, renderWorld); - basin.read(context.blockEntityData, true); - basin.tick(); + BasinBlockEntity basin = null; + + Collection bes = context.contraption.getRenderedBEs(); + for (BlockEntity blockEntity: bes) { + if (blockEntity instanceof BasinBlockEntity basinBlockEntity) { + if (basinBlockEntity.getBlockPos().equals(context.localPos)) basin = basinBlockEntity; + } + } - BlockEntityRenderHelper.renderBlockEntities(context.world, renderWorld, List.of(basin), - matrices.getModelViewProjection(), matrices.getLight(), buffer); + if (basin != null) { + basin.read(context.blockEntityData, true); + basin.tick(); + BlockEntityRenderHelper.renderBlockEntities(context.world, renderWorld, List.of(basin), + matrices.getModelViewProjection(), matrices.getLight(), buffer); + } } }