Skip to content

Commit ae4e8a0

Browse files
ABeaterA.BeaterAvanatiker
authored
Added MinecartChest/Hopper detection to stashlogger (#330)
* Added Minecart detection * Minecarts * Minecarts * Minecarts * Added Minecartchest and MinecartHopper detaction only. Fixed coords. * Added MinecartChest and MinecartHopper detection only. Fixed coords. removed comment. * Changed some variables to fit better with the pre-existing ones. * Changed some variables to fit better with the pre-existing ones. * Changed the way it detected doubles(location -> UUID) to prevent it from not detecting merged Minecarts. * Removed empty lines. * Big cleanup. Please read about code style! Co-authored-by: A.Beater <[email protected]> Co-authored-by: Constructor <[email protected]>
1 parent 8657185 commit ae4e8a0

File tree

1 file changed

+56
-4
lines changed

1 file changed

+56
-4
lines changed

src/main/kotlin/com/lambda/client/module/modules/misc/StashLogger.kt

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.lambda.client.module.modules.misc
22

3+
import com.lambda.client.commons.extension.synchronized
34
import com.lambda.client.manager.managers.WaypointManager
45
import com.lambda.client.module.Category
56
import com.lambda.client.module.Module
@@ -12,10 +13,13 @@ import com.lambda.client.util.text.MessageSendHelper
1213
import com.lambda.client.util.threads.defaultScope
1314
import com.lambda.client.util.threads.onMainThread
1415
import com.lambda.client.util.threads.safeListener
15-
import com.lambda.client.commons.extension.synchronized
1616
import kotlinx.coroutines.coroutineScope
1717
import kotlinx.coroutines.launch
1818
import net.minecraft.client.audio.PositionedSoundRecord
19+
import net.minecraft.entity.Entity
20+
import net.minecraft.entity.item.EntityMinecartChest
21+
import net.minecraft.entity.item.EntityMinecartContainer
22+
import net.minecraft.entity.item.EntityMinecartHopper
1923
import net.minecraft.init.SoundEvents
2024
import net.minecraft.tileentity.*
2125
import net.minecraft.util.math.BlockPos
@@ -41,11 +45,17 @@ object StashLogger : Module(
4145
private val dispenserDensity by setting("Min Dispensers", 5, 1..20, 1, { logDispensers })
4246
private val logHoppers by setting("Hoppers", true)
4347
private val hopperDensity by setting("Min Hoppers", 5, 1..20, 1, { logHoppers })
48+
private val logMinecartChests by setting("Minecart Chests", true)
49+
private val minecartChestDensity by setting("Min Minecart Chests", 5, 1..20, 1, { logMinecartChests })
50+
private val logMinecartHoppers by setting("Minecart Hoppers", true)
51+
private val minecartHopperDensity by setting("Min Minecart Hoppers", 5, 1..20, 1, { logMinecartHoppers })
52+
4453
private val disableAutoWalk by setting("Disable Auto Walk", false, description = "Disables AutoWalk when a stash is found")
4554
private val cancelBaritone by setting("Cancel Baritone", false, description = "Cancels Baritone when a stash is found")
4655

4756
private val chunkData = LinkedHashMap<Long, ChunkStats>()
4857
private val knownPositions = HashSet<BlockPos>()
58+
private val knownEntityMinecartContainers = HashSet<EntityMinecartContainer>()
4959
private val timer = TickTimer(TimeUnit.SECONDS)
5060

5161
init {
@@ -55,6 +65,7 @@ object StashLogger : Module(
5565
defaultScope.launch {
5666
coroutineScope {
5767
launch {
68+
world.loadedEntityList.toList().filterIsInstance<EntityMinecartContainer>().forEach(::logEntityMinecartContainer)
5869
world.loadedTileEntityList.toList().forEach(::logTileEntity)
5970
notification()
6071
}
@@ -97,14 +108,27 @@ object StashLogger : Module(
97108
}
98109
}
99110

111+
private fun logEntityMinecartContainer(entity: EntityMinecartContainer) {
112+
if (!checkEntityType(entity)) return
113+
if (!knownEntityMinecartContainers.add(entity)) return
114+
115+
val chunk = ChunkPos.asLong(entity.position.x shr 4, entity.position.z shr 4)
116+
val chunkStats = chunkData.getOrPut(chunk, ::ChunkStats)
117+
chunkStats.addEntity(entity)
118+
}
119+
120+
private fun checkEntityType(entity: Entity) =
121+
logMinecartChests && entity is EntityMinecartChest
122+
|| logMinecartHoppers && entity is EntityMinecartHopper
123+
100124
private fun logTileEntity(tileEntity: TileEntity) {
101125
if (!checkTileEntityType(tileEntity)) return
102126
if (!knownPositions.add(tileEntity.pos)) return
103127

104128
val chunk = ChunkPos.asLong(tileEntity.pos.x shr 4, tileEntity.pos.z shr 4)
105129
val chunkStats = chunkData.getOrPut(chunk, ::ChunkStats)
106130

107-
chunkStats.add(tileEntity)
131+
chunkStats.addTileEntity(tileEntity)
108132
}
109133

110134
private fun checkTileEntityType(tileEntity: TileEntity) =
@@ -120,18 +144,37 @@ object StashLogger : Module(
120144
var droppers = 0; private set
121145
var dispensers = 0; private set
122146
var hoppers = 0; private set
147+
var minecartChests = 0; private set
148+
var minecartHoppers = 0; private set
123149

124150
var hot = false
125151

126152
private val tileEntities = ArrayList<TileEntity>().synchronized()
153+
private val entityMinecartContainers = ArrayList<EntityMinecartContainer>().synchronized()
154+
155+
fun addEntity(entity: EntityMinecartContainer) {
156+
when (entity) {
157+
is EntityMinecartChest -> minecartChests++
158+
is EntityMinecartHopper -> minecartHoppers++
159+
else -> return
160+
}
161+
162+
entityMinecartContainers.add(entity)
163+
164+
if (minecartChests >= minecartChestDensity
165+
|| minecartHoppers >= minecartHopperDensity) {
166+
hot = true
167+
}
168+
}
127169

128-
fun add(tileEntity: TileEntity) {
170+
fun addTileEntity(tileEntity: TileEntity) {
129171
when (tileEntity) {
130172
is TileEntityChest -> chests++
131173
is TileEntityShulkerBox -> shulkers++
132174
is TileEntityDropper -> droppers++
133175
is TileEntityDispenser -> dispensers++
134176
is TileEntityHopper -> hoppers++
177+
135178
else -> return
136179
}
137180

@@ -150,7 +193,13 @@ object StashLogger : Module(
150193
var x = 0.0
151194
var y = 0.0
152195
var z = 0.0
153-
val size = tileEntities.size
196+
val size = tileEntities.size.or(entityMinecartContainers.size)
197+
198+
for (entity in entityMinecartContainers) {
199+
x += entity.position.x
200+
y += entity.position.y
201+
z += entity.position.z
202+
}
154203

155204
for (tileEntity in tileEntities) {
156205
x += tileEntity.pos.x
@@ -172,6 +221,9 @@ object StashLogger : Module(
172221
if (droppers > 0 && logDroppers) statList.add("$droppers dropper${if (droppers == 1) "" else "s"}")
173222
if (dispensers > 0 && logDispensers) statList.add("$dispensers dispenser${if (dispensers == 1) "" else "s"}")
174223
if (hoppers > 0 && logHoppers) statList.add("$hoppers hopper${if (hoppers == 1) "" else "s"}")
224+
if (minecartChests > 0 && logMinecartChests) statList.add("$minecartChests minecart chest${if (minecartChests == 1) "" else "s"}")
225+
if (minecartHoppers > 0 && logMinecartHoppers) statList.add("$minecartHoppers minecart hopper${if (minecartHoppers == 1) "" else "s"}")
226+
175227
return statList.joinToString()
176228
}
177229
}

0 commit comments

Comments
 (0)