Added the option to look for droppers and dispensers in stashfinder. (#807)

This commit is contained in:
Sorzon 2020-05-11 16:23:10 +02:00 committed by GitHub
parent 6929040d9d
commit 40c39209de
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 5 deletions

View File

@ -12,6 +12,8 @@ import net.minecraft.init.SoundEvents
import net.minecraft.tileentity.TileEntity import net.minecraft.tileentity.TileEntity
import net.minecraft.tileentity.TileEntityChest import net.minecraft.tileentity.TileEntityChest
import net.minecraft.tileentity.TileEntityShulkerBox import net.minecraft.tileentity.TileEntityShulkerBox
import net.minecraft.tileentity.TileEntityDropper
import net.minecraft.tileentity.TileEntityDispenser
import net.minecraft.util.math.BlockPos import net.minecraft.util.math.BlockPos
import net.minecraft.util.math.ChunkPos import net.minecraft.util.math.ChunkPos
@ -21,7 +23,7 @@ import net.minecraft.util.math.ChunkPos
@Module.Info( @Module.Info(
name = "StashFinder", name = "StashFinder",
category = Module.Category.MISC, category = Module.Category.MISC,
description = "Logs chests and shulkers around you." description = "Logs storage units in render distance."
) )
class StashFinder : Module() { class StashFinder : Module() {
private val logChests = register(Settings.b("Chests")) private val logChests = register(Settings.b("Chests"))
@ -30,16 +32,24 @@ class StashFinder : Module() {
private val logShulkers = register(Settings.b("Shulkers")) private val logShulkers = register(Settings.b("Shulkers"))
private val shulkerDensity = register(Settings.integerBuilder("Min Shulkers").withMinimum(1).withMaximum(20).withValue(1).build()) private val shulkerDensity = register(Settings.integerBuilder("Min Shulkers").withMinimum(1).withMaximum(20).withValue(1).build())
private val logDroppers = register(Settings.b("Droppers", false))
private val dropperDensity = register(Settings.integerBuilder("Min Droppers").withMinimum(1).withMaximum(20).withValue(5).build())
private val logDispensers = register(Settings.b("Dispensers", false))
private val dispenserDensity = register(Settings.integerBuilder("Min Dispensers").withMinimum(1).withMaximum(20).withValue(5).build())
private val logToChat = register(Settings.b("Log To Chat")) private val logToChat = register(Settings.b("Log To Chat"))
private val playSound = register(Settings.b("Play Sound")) private val playSound = register(Settings.b("Play Sound"))
private data class ChunkStats(var chests: Int = 0, var shulkers: Int = 0, var hot: Boolean = false) { private data class ChunkStats(var chests: Int = 0, var shulkers: Int = 0, var droppers: Int = 0, var dispensers: Int = 0, var hot: Boolean = false) {
val tileEntities = mutableListOf<TileEntity>() val tileEntities = mutableListOf<TileEntity>()
fun add(tileEntity: TileEntity) { fun add(tileEntity: TileEntity) {
when (tileEntity) { when (tileEntity) {
is TileEntityChest -> chests++ is TileEntityChest -> chests++
is TileEntityShulkerBox -> shulkers++ is TileEntityShulkerBox -> shulkers++
is TileEntityDropper -> droppers++
is TileEntityDispenser -> dispensers++
} }
tileEntities.add(tileEntity) tileEntities.add(tileEntity)
@ -59,7 +69,7 @@ class StashFinder : Module() {
} }
override fun toString(): String { override fun toString(): String {
return "($chests chests, $shulkers shulkers)" return "($chests chests, $shulkers shulkers, $droppers droppers, $dispensers dispensers)"
} }
} }
@ -81,7 +91,7 @@ class StashFinder : Module() {
val chunkStats = chunkData.getOrPut(chunk, { ChunkStats() }) val chunkStats = chunkData.getOrPut(chunk, { ChunkStats() })
chunkStats.add(tileEntity) chunkStats.add(tileEntity)
if (chunkStats.chests >= chestDensity.value || chunkStats.shulkers >= shulkerDensity.value) { if (chunkStats.chests >= chestDensity.value || chunkStats.shulkers >= shulkerDensity.value || chunkStats.droppers >= dropperDensity.value || chunkStats.dispensers >= dispenserDensity.value) {
chunkStats.hot = true chunkStats.hot = true
} }
} }
@ -90,7 +100,7 @@ class StashFinder : Module() {
super.onUpdate() super.onUpdate()
mc.world.loadedTileEntityList mc.world.loadedTileEntityList
.filter { (it is TileEntityChest && logChests.value) || (it is TileEntityShulkerBox && logShulkers.value) } .filter { (it is TileEntityChest && logChests.value) || (it is TileEntityShulkerBox && logShulkers.value) || (it is TileEntityDropper && logDroppers.value) || (it is TileEntityDispenser && logDispensers.value) }
.forEach { logTileEntity(it) } .forEach { logTileEntity(it) }
chunkData.values.filter { it.hot }.forEach { chunkStats -> chunkData.values.filter { it.hot }.forEach { chunkStats ->