From 59817a0009109373e0d67a14287a843cc3d7684e Mon Sep 17 00:00:00 2001 From: Nucleus Date: Sat, 25 Apr 2020 17:57:13 +0200 Subject: [PATCH 1/2] Add Stashfinder --- .../kami/module/modules/misc/StashFinder.kt | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt b/src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt new file mode 100644 index 000000000..55bdeeb9c --- /dev/null +++ b/src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt @@ -0,0 +1,102 @@ +package me.zeroeightsix.kami.module.modules.misc + +import me.zeroeightsix.kami.module.Module +import me.zeroeightsix.kami.setting.Settings +import me.zeroeightsix.kami.util.LogUtil +import me.zeroeightsix.kami.util.MessageSendHelper +import net.minecraft.client.audio.PositionedSoundRecord +import net.minecraft.init.SoundEvents +import net.minecraft.tileentity.TileEntity +import net.minecraft.tileentity.TileEntityChest +import net.minecraft.tileentity.TileEntityShulkerBox +import net.minecraft.util.math.BlockPos +import net.minecraft.util.math.ChunkPos +import kotlin.math.roundToInt + +@Module.Info( + name = "StashFinder", + category = Module.Category.MISC, + description = "Logs chests and shulkers around you." +) +class StashFinder : Module() { + private val logChests = register(Settings.b("Chests")) + private val chestDensity = register(Settings.integerBuilder("Min Chests").withMinimum(1).withMaximum(20).withValue(5)) + + private val logShulkers = register(Settings.b("Shulkers")) + private val shulkerDensity = register(Settings.integerBuilder("Min Shulkers").withMinimum(1).withMaximum(20).withValue(1)) + + private val logToChat = register(Settings.b("Log To Chat")) + private val playSound = register(Settings.b("Play Sound")) + + private data class ChunkStats(var chests: Int = 0, var shulkers: Int = 0, var hot: Boolean = false) { + val tileEntities = mutableListOf() + + fun add(tileEntity: TileEntity) { + when (tileEntity) { + is TileEntityChest -> chests++ + is TileEntityShulkerBox -> shulkers++ + } + + tileEntities.add(tileEntity) + } + + // Averages the positions of all the tile entities + fun getPosition(): IntArray { + val x = tileEntities.map { it.pos.x }.average().roundToInt() + val y = tileEntities.map { it.pos.y }.average().roundToInt() + val z = tileEntities.map { it.pos.z }.average().roundToInt() + return intArrayOf(x, y, z) + } + + override fun toString(): String { + return "($chests chests, $shulkers shulkers)" + } + } + + private val chunkData = hashMapOf() + private val knownPositions = mutableListOf() + + override fun onEnable() { + super.onEnable() + chunkData.clear() + knownPositions.clear() + } + + private fun logTileEntity(tileEntity: TileEntity) { + if (knownPositions.contains(tileEntity.pos)) return + + knownPositions.add(tileEntity.pos) + + val chunk = ChunkPos.asLong(tileEntity.pos.x / 16, tileEntity.pos.z / 16) + val chunkStats = chunkData.getOrPut(chunk, { ChunkStats() }) + + chunkStats.add(tileEntity) + if (chunkStats.chests >= chestDensity.value || chunkStats.shulkers >= shulkerDensity.value) { + chunkStats.hot = true + } + } + + override fun onUpdate() { + super.onUpdate() + + mc.world.loadedTileEntityList + .filter { (it is TileEntityChest && logChests.value) || (it is TileEntityShulkerBox && logShulkers.value) } + .forEach { logTileEntity(it) } + + chunkData.values.filter { it.hot }.forEach { chunkStats -> + chunkStats.hot = false + + // mfw int array instead of Vec3i + LogUtil.writeCoords(chunkStats.getPosition(), chunkStats.toString()) + + if (playSound.value) { + mc.getSoundHandler().playSound(PositionedSoundRecord.getRecord(SoundEvents.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0f, 1.0f)) + } + + if (logToChat.value) { + val positionString = chunkStats.getPosition().joinToString { "$it" } + MessageSendHelper.sendChatMessage("$chatName $positionString $chunkStats") + } + } + } +} \ No newline at end of file From b0e67bec610375bf8596e91f5140888470c850ca Mon Sep 17 00:00:00 2001 From: Nucleus Date: Sat, 25 Apr 2020 18:15:01 +0200 Subject: [PATCH 2/2] Add author to Stashfinder --- .../me/zeroeightsix/kami/module/modules/misc/StashFinder.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt b/src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt index 55bdeeb9c..af3455630 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt +++ b/src/main/java/me/zeroeightsix/kami/module/modules/misc/StashFinder.kt @@ -13,6 +13,9 @@ import net.minecraft.util.math.BlockPos import net.minecraft.util.math.ChunkPos import kotlin.math.roundToInt +/** + * @author Nucleus + */ @Module.Info( name = "StashFinder", category = Module.Category.MISC,