From 20acf14beeac2f8d2729384c0d837f892a3a5534 Mon Sep 17 00:00:00 2001 From: YuRaNnNzZZ Date: Sat, 10 Jun 2023 17:49:44 +0300 Subject: [PATCH] matter reconstructor item render --- .../matter/MatterReconstructorBlockEntity.kt | 10 ++++- .../MatterReconstructorRenderer.kt | 44 +++++++++++++++++++ .../mc/otm/registry/MBlockEntities.kt | 9 +--- 3 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt index 6f09ba35c..36a157be9 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/block/entity/matter/MatterReconstructorBlockEntity.kt @@ -49,7 +49,10 @@ class MatterReconstructorBlockEntity(blockPos: BlockPos, blockState: BlockState) private var lastItem: Item? = null private var initialDamage = 0.0 - var visualProgress = 0f + var visualItemStack by synchronizer.item(observe = false) + private set + + var visualProgress by synchronizer.float().property private set var isUnableToProcess = false @@ -155,6 +158,7 @@ class MatterReconstructorBlockEntity(blockPos: BlockPos, blockState: BlockState) lastItem = item.item repairProgress = 0.0 initialDamage = item.damageValue.toDouble() + visualItemStack = item visualProgress = 0f } @@ -162,6 +166,7 @@ class MatterReconstructorBlockEntity(blockPos: BlockPos, blockState: BlockState) matterPerTick = Decimal.ZERO progressPerTick = 0.0 initialDamage = 0.0 + visualItemStack = item visualProgress = 0f } else { if (ALLOW_TO_SKIP_ANVIL && !ONLY_ANVIL) { @@ -199,6 +204,7 @@ class MatterReconstructorBlockEntity(blockPos: BlockPos, blockState: BlockState) matterPerTick = Decimal.ZERO progressPerTick = 0.0 initialDamage = 0.0 + visualItemStack = item visualProgress = 0f } } @@ -261,9 +267,11 @@ class MatterReconstructorBlockEntity(blockPos: BlockPos, blockState: BlockState) repairProgress %= 1.0 } + visualItemStack = item visualProgress = 1f - ((item.damageValue - repairProgress) / initialDamage).toFloat() } else { initialDamage = 0.0 + visualItemStack = item visualProgress = 0f } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt new file mode 100644 index 000000000..5b7fccff5 --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/render/blockentity/MatterReconstructorRenderer.kt @@ -0,0 +1,44 @@ +package ru.dbotthepony.mc.otm.client.render.blockentity + +import com.mojang.blaze3d.vertex.PoseStack +import com.mojang.math.Axis +import net.minecraft.client.renderer.MultiBufferSource +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider +import net.minecraft.world.item.ItemDisplayContext +import ru.dbotthepony.mc.otm.block.entity.matter.MatterReconstructorBlockEntity +import ru.dbotthepony.mc.otm.client.render.DynamicBufferSource + +class MatterReconstructorRenderer(private val context: BlockEntityRendererProvider.Context) : BlockEntityRenderer { + companion object { + private val source = DynamicBufferSource(maximalInitialBufferSize = 2 shl 10) + } + + override fun render( + tile: MatterReconstructorBlockEntity, + partialTick: Float, + pose: PoseStack, + bufferSource: MultiBufferSource, + packedLight: Int, + packedOverlay: Int + ) { + val item = tile.visualItemStack + + if (item.isEmpty) { + return + } + + pose.pushPose() + + pose.translate(0.5, 0.6, 0.5) + pose.scale(0.5f, 0.5f, 0.5f) + + pose.mulPose(Axis.XP.rotationDegrees(90f)) + pose.mulPose(Axis.ZP.rotationDegrees(tile.blockRotation.front.toYRot() + 180f)) + + context.itemRenderer.renderStatic(item, ItemDisplayContext.FIXED, packedLight, packedOverlay, pose, source, tile.level, tile.blockPos.asLong().toInt()) + source.endBatch() + + pose.popPose() + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt index 397b88194..2f33fe80f 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/registry/MBlockEntities.kt @@ -22,13 +22,7 @@ import ru.dbotthepony.mc.otm.block.entity.tech.BatteryBankBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.EnergyServoBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.GravitationStabilizerBlockEntity import ru.dbotthepony.mc.otm.block.entity.tech.PlatePressBlockEntity -import ru.dbotthepony.mc.otm.client.render.blockentity.BatteryBankRenderer -import ru.dbotthepony.mc.otm.client.render.blockentity.BlackHoleRenderer -import ru.dbotthepony.mc.otm.client.render.blockentity.EnergyCounterRenderer -import ru.dbotthepony.mc.otm.client.render.blockentity.GravitationStabilizerRenderer -import ru.dbotthepony.mc.otm.client.render.blockentity.HoloSignRenderer -import ru.dbotthepony.mc.otm.client.render.blockentity.MatterBatteryBankRenderer -import ru.dbotthepony.mc.otm.client.render.blockentity.MatterReplicatorRenderer +import ru.dbotthepony.mc.otm.client.render.blockentity.* @Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") // Type<*> is unused in BlockEntityType.Builder object MBlockEntities { @@ -84,6 +78,7 @@ object MBlockEntities { BlockEntityRenderers.register(ENERGY_COUNTER, ::EnergyCounterRenderer) BlockEntityRenderers.register(BATTERY_BANK, ::BatteryBankRenderer) BlockEntityRenderers.register(MATTER_CAPACITOR_BANK, ::MatterBatteryBankRenderer) + BlockEntityRenderers.register(MATTER_RECONSTRUCTOR, ::MatterReconstructorRenderer) BlockEntityRenderers.register(MATTER_REPLICATOR, ::MatterReplicatorRenderer) BlockEntityRenderers.register(HOLO_SIGN, ::HoloSignRenderer) }