Skip to content

Commit

Permalink
Fix Quarry not resized when removing range upgrades
Browse files Browse the repository at this point in the history
  • Loading branch information
NichtStudioCode committed Oct 17, 2024
1 parent 4b8b0ea commit 621973a
Showing 1 changed file with 22 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand All @@ -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)

Expand Down Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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))
Expand All @@ -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)
}

Expand Down

0 comments on commit 621973a

Please sign in to comment.