diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/data')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt index ecf90172d..fd399ae8b 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt @@ -8,11 +8,13 @@ import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.PlaySoundEvent import at.hannibal2.skyhanni.events.ScoreboardUpdateEvent +import at.hannibal2.skyhanni.events.SecondPassedEvent import at.hannibal2.skyhanni.events.ServerBlockChangeEvent import at.hannibal2.skyhanni.events.mining.OreMinedEvent import at.hannibal2.skyhanni.events.player.PlayerDeathEvent import at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardPattern import at.hannibal2.skyhanni.features.mining.OreBlock +import at.hannibal2.skyhanni.features.mining.isTitanium import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.CollectionUtils.countBy import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer @@ -50,8 +52,7 @@ object MiningAPI { private var lastInitSound = SimpleTimeMark.farPast() - private var waitingForInitBlock = false - private var waitingForInitBlockPos: LorenzVec? = null + private var initBlockPos: LorenzVec? = null private var waitingForInitSound = true private var waitingForEffMinerSound = false @@ -146,8 +147,8 @@ object MiningAPI { val pos = event.location.roundLocationToBlock() if (recentClickedBlocks.none { it.first == pos }) return waitingForInitSound = false - waitingForInitBlock = true - waitingForInitBlockPos = event.location.roundLocationToBlock() + waitingForEffMinerBlock = true + initBlockPos = event.location.roundLocationToBlock() lastInitSound = SimpleTimeMark.now() } return @@ -164,21 +165,25 @@ object MiningAPI { @SubscribeEvent fun onBlockChange(event: ServerBlockChangeEvent) { if (!inCustomMiningIsland()) return - if (event.newState.block.let { it != Blocks.air && it != Blocks.bedrock }) return - if (event.oldState.block.let { it == Blocks.air || it == Blocks.bedrock }) return - if (event.oldState.block == Blocks.air) return + val oldState = event.oldState + val newState = event.newState + val oldBlock = oldState.block + val newBlock = newState.block + + if (oldState == newState) return + if (oldBlock == Blocks.air || oldBlock == Blocks.bedrock) return + if (newBlock != Blocks.air && newBlock != Blocks.bedrock && !isTitanium(newState)) return + val pos = event.location if (pos.distanceToPlayer() > 7) return if (lastInitSound.passedSince() > 100.milliseconds) return - val ore = OreBlock.getByStateOrNull(event.oldState) ?: return + val ore = OreBlock.getByStateOrNull(oldState) ?: return - if (waitingForInitBlock) { - if (waitingForInitBlockPos != pos) return - waitingForInitBlock = false + if (initBlockPos == pos) { surroundingMinedBlocks += MinedBlock(ore, true) to pos - waitingForEffMinerBlock = true + runEvent() return } if (waitingForEffMinerBlock) { @@ -205,7 +210,11 @@ object MiningAPI { if (waitingForInitSound) return if (lastInitSound.passedSince() < 200.milliseconds) return + // in case the init block is not found + resetOreEvent() + } + private fun runEvent() { resetOreEvent() if (surroundingMinedBlocks.isEmpty()) return @@ -237,8 +246,7 @@ object MiningAPI { private fun resetOreEvent() { lastInitSound = SimpleTimeMark.farPast() waitingForInitSound = true - waitingForInitBlock = false - waitingForInitBlockPos = null + initBlockPos = null waitingForEffMinerSound = false waitingForEffMinerBlock = false } @@ -258,8 +266,7 @@ object MiningAPI { add("lastInitSound: ${lastInitSound.passedSince().format()}") } add("waitingForInitSound: $waitingForInitSound") - add("waitingForInitBlock: $waitingForInitBlock") - add("waitingForInitBlockPos: $waitingForInitBlockPos") + add("waitingForInitBlockPos: $initBlockPos") add("waitingForEffMinerSound: $waitingForEffMinerSound") add("waitingForEffMinerBlock: $waitingForEffMinerBlock") add("recentlyClickedBlocks: ${recentClickedBlocks.joinToString { "(${it.first.toCleanString()}" }}") |
