@@ -69,6 +69,7 @@ import com.lambda.util.BlockUtils.calcItemBlockBreakingDelta
6969import com.lambda.util.BlockUtils.isEmpty
7070import com.lambda.util.BlockUtils.isNotBroken
7171import com.lambda.util.BlockUtils.isNotEmpty
72+ import com.lambda.util.extension.partialTicks
7273import com.lambda.util.item.ItemUtils.block
7374import com.lambda.util.math.lerp
7475import com.lambda.util.player.gamemode
@@ -198,21 +199,25 @@ object BreakManager : RequestHandler<BreakRequest>(
198199 info.context.blockPos,
199200 info.breakConfig,
200201 if (! info.isRedundant) player.inventory.getStack(info.context.hotbarIndex) else null
201- )
202+ ).toDouble()
203+ val currentDelta = info.breakingTicks * breakDelta
204+
202205 val threshold = if (info.isPrimary) info.breakConfig.breakThreshold else 1f
203- val progress = (info.breakingTicks * breakDelta).toDouble() / ( threshold + (breakDelta * config.fudgeFactor) )
204- val state = info.context.cachedState
205- val boxes = state.getOutlineShape(world, info.context.blockPos).boundingBoxes.map {
206- it.offset(info.context.blockPos)
207- }
206+ val adjustedThreshold = threshold + (breakDelta * config.fudgeFactor)
207+
208+ val currentProgress = currentDelta / adjustedThreshold
209+ val nextTicksProgress = (currentDelta + breakDelta) / adjustedThreshold
210+ val interpolatedProgress = lerp(mc.partialTicks, currentProgress, nextTicksProgress)
208211
209- val fillColor = if (config.dynamicFillColor) lerp(progress , config.startFillColor, config.endFillColor)
212+ val fillColor = if (config.dynamicFillColor) lerp(interpolatedProgress , config.startFillColor, config.endFillColor)
210213 else config.staticFillColor
211- val outlineColor = if (config.dynamicOutlineColor) lerp(progress , config.startOutlineColor, config.endOutlineColor)
214+ val outlineColor = if (config.dynamicOutlineColor) lerp(interpolatedProgress , config.startOutlineColor, config.endOutlineColor)
212215 else config.staticOutlineColor
213216
214- boxes.forEach boxes@ { box ->
215- val interpolated = interpolateBox(box, progress, info.breakConfig)
217+ info.context.cachedState.getOutlineShape(world, info.context.blockPos).boundingBoxes.map {
218+ it.offset(info.context.blockPos)
219+ }.forEach boxes@ { box ->
220+ val interpolated = interpolateBox(box, interpolatedProgress, info.breakConfig)
216221 if (config.fill) event.renderer.buildFilled(interpolated, fillColor)
217222 if (config.outline) event.renderer.buildOutline(interpolated, outlineColor)
218223 }
0 commit comments