From 621973aeb1ceb07b27167d58a052ed1aa676d384 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:07:21 +0200 Subject: [PATCH] Fix Quarry not resized when removing range upgrades --- .../addon/machines/tileentity/world/Quarry.kt | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/machines/src/main/kotlin/xyz/xenondevs/nova/addon/machines/tileentity/world/Quarry.kt b/machines/src/main/kotlin/xyz/xenondevs/nova/addon/machines/tileentity/world/Quarry.kt index 45c5439..8064dd9 100644 --- a/machines/src/main/kotlin/xyz/xenondevs/nova/addon/machines/tileentity/world/Quarry.kt +++ b/machines/src/main/kotlin/xyz/xenondevs/nova/addon/machines/tileentity/world/Quarry.kt @@ -40,6 +40,7 @@ import xyz.xenondevs.nova.addon.simpleupgrades.storedEnergyHolder import xyz.xenondevs.nova.addon.simpleupgrades.storedUpgradeHolder import xyz.xenondevs.nova.api.NovaEventFactory import xyz.xenondevs.nova.config.GlobalValues +import xyz.xenondevs.nova.config.entry import xyz.xenondevs.nova.context.Context import xyz.xenondevs.nova.context.intention.DefaultContextIntentions import xyz.xenondevs.nova.context.intention.DefaultContextIntentions.BlockPlace @@ -111,10 +112,8 @@ class Quarry(pos: BlockPos, blockState: NovaBlockState, compound: Compound) : Ne private val energyHolder = storedEnergyHolder(MAX_ENERGY, upgradeHolder, INSERT, BLOCKED_SIDES) private val itemHolder = storedItemHolder(inventory to EXTRACT, blockedSides = BLOCKED_SIDES) - private var sizeXProvider = storedValue("sizeX") { DEFAULT_SIZE_X } - private var sizeZProvider = storedValue("sizeZ") { DEFAULT_SIZE_Z } - private var sizeX by sizeXProvider - private var sizeZ by sizeZProvider + private var sizeXZProvider = storedValue("sizeX") { DEFAULT_SIZE_X } + private var sizeXZ by sizeXZProvider private var sizeY by storedValue("sizeY") { DEFAULT_SIZE_Y } private val solidScaffolding = MovableMultiModel() @@ -125,12 +124,13 @@ class Quarry(pos: BlockPos, blockState: NovaBlockState, compound: Compound) : Ne private val energyPerTick by combinedProvider( BASE_ENERGY_CONSUMPTION, - sizeXProvider, sizeZProvider, + sizeXZProvider, ENERGY_PER_SQUARE_BLOCK, upgradeHolder.getValueProvider(UpgradeTypes.SPEED), upgradeHolder.getValueProvider(UpgradeTypes.EFFICIENCY) - ).map { (base, sizeX, sizeZ, perSqr, speed, eff) -> (base + sizeX * sizeZ * perSqr * speed / eff).roundToInt() } - private val maxSize by rangeAffectedValue(MAX_SIZE, upgradeHolder) + ).map { (base, sizeXZ, perSqr, speed, eff) -> (base + sizeXZ * sizeXZ * perSqr * speed / eff).roundToInt() } + private val maxSizeProvider = rangeAffectedValue(MAX_SIZE, upgradeHolder) + private val maxSize by maxSizeProvider private val drillSpeedMultiplier by speedMultipliedValue(DRILL_SPEED_MULTIPLIER, upgradeHolder) private val moveSpeed by speedMultipliedValue(MOVE_SPEED, upgradeHolder) @@ -168,6 +168,10 @@ class Quarry(pos: BlockPos, blockState: NovaBlockState, compound: Compound) : Ne private val currentDrillSpeedMultiplier: Double get() = drillSpeedMultiplier * energySufficiency + init { + maxSizeProvider.subscribe { resize(sizeXZ.coerceIn(MIN_SIZE, it)) } + } + override fun handleEnable() { super.handleEnable() updateBounds(false) @@ -192,7 +196,7 @@ class Quarry(pos: BlockPos, blockState: NovaBlockState, compound: Compound) : Ne val facing = blockState.getOrThrow(DefaultBlockStateProperties.FACING) val (minX, minZ, maxX, maxZ) = getMinMaxPositions( pos, - sizeX, sizeZ, + sizeXZ, sizeXZ, BlockSide.BACK.getBlockFace(facing), BlockSide.RIGHT.getBlockFace(facing) ) this.minX = minX @@ -201,21 +205,22 @@ class Quarry(pos: BlockPos, blockState: NovaBlockState, compound: Compound) : Ne this.maxZ = maxZ if (owner == null || (checkPermission && runBlocking { !canBreak(owner!!, pos, minX, maxX, minZ, maxZ) })) { // TODO: non-blocking - if (sizeX == MIN_SIZE && sizeZ == MIN_SIZE) { + if (sizeXZ == MIN_SIZE) { val ctx = Context.intention(DefaultContextIntentions.BlockBreak) .param(DefaultContextParamTypes.BLOCK_POS, pos) .build() BlockUtils.breakBlockNaturally(ctx) return false - } else resize(MIN_SIZE, MIN_SIZE) + } else resize(MIN_SIZE) } return true } - private fun resize(sizeX: Int, sizeZ: Int) { - this.sizeX = sizeX - this.sizeZ = sizeZ + private fun resize(sizeXZ: Int) { + if (this.sizeXZ == sizeXZ) + return + this.sizeXZ = sizeXZ if (updateBounds(true)) { drilling = false @@ -692,9 +697,9 @@ class Quarry(pos: BlockPos, blockState: NovaBlockState, compound: Compound) : Ne "3 - - - - - - - 4") .addIngredient('i', inventory) .addIngredient('s', OpenSideConfigItem(sideConfigGui)) - .addIngredient('m', RemoveNumberItem({ MIN_SIZE..maxSize }, { sizeX }, ::setSize).also(sizeItems::add)) - .addIngredient('n', SizeDisplayItem { sizeX }.also(sizeItems::add)) - .addIngredient('p', AddNumberItem({ MIN_SIZE..maxSize }, { sizeX }, ::setSize).also(sizeItems::add)) + .addIngredient('m', RemoveNumberItem({ MIN_SIZE..maxSize }, { sizeXZ }, ::setSize).also(sizeItems::add)) + .addIngredient('n', SizeDisplayItem { sizeXZ }.also(sizeItems::add)) + .addIngredient('p', AddNumberItem({ MIN_SIZE..maxSize }, { sizeXZ }, ::setSize).also(sizeItems::add)) .addIngredient('M', RemoveNumberItem({ MIN_DEPTH..MAX_DEPTH }, { sizeY }, ::setDepth).also(depthItems::add)) .addIngredient('N', DepthDisplayItem { sizeY }.also(depthItems::add)) .addIngredient('P', AddNumberItem({ MIN_DEPTH..MAX_DEPTH }, { sizeY }, ::setDepth).also(depthItems::add)) @@ -703,7 +708,7 @@ class Quarry(pos: BlockPos, blockState: NovaBlockState, compound: Compound) : Ne .build() private fun setSize(size: Int) { - resize(size, size) + resize(size) sizeItems.forEach(Item::notifyWindows) }