1
1
package com.lambda.client.module.modules.misc
2
2
3
+ import com.lambda.client.commons.extension.synchronized
3
4
import com.lambda.client.manager.managers.WaypointManager
4
5
import com.lambda.client.module.Category
5
6
import com.lambda.client.module.Module
@@ -12,10 +13,13 @@ import com.lambda.client.util.text.MessageSendHelper
12
13
import com.lambda.client.util.threads.defaultScope
13
14
import com.lambda.client.util.threads.onMainThread
14
15
import com.lambda.client.util.threads.safeListener
15
- import com.lambda.client.commons.extension.synchronized
16
16
import kotlinx.coroutines.coroutineScope
17
17
import kotlinx.coroutines.launch
18
18
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
19
23
import net.minecraft.init.SoundEvents
20
24
import net.minecraft.tileentity.*
21
25
import net.minecraft.util.math.BlockPos
@@ -41,11 +45,17 @@ object StashLogger : Module(
41
45
private val dispenserDensity by setting(" Min Dispensers" , 5 , 1 .. 20 , 1 , { logDispensers })
42
46
private val logHoppers by setting(" Hoppers" , true )
43
47
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
+
44
53
private val disableAutoWalk by setting(" Disable Auto Walk" , false , description = " Disables AutoWalk when a stash is found" )
45
54
private val cancelBaritone by setting(" Cancel Baritone" , false , description = " Cancels Baritone when a stash is found" )
46
55
47
56
private val chunkData = LinkedHashMap <Long , ChunkStats >()
48
57
private val knownPositions = HashSet <BlockPos >()
58
+ private val knownEntityMinecartContainers = HashSet <EntityMinecartContainer >()
49
59
private val timer = TickTimer (TimeUnit .SECONDS )
50
60
51
61
init {
@@ -55,6 +65,7 @@ object StashLogger : Module(
55
65
defaultScope.launch {
56
66
coroutineScope {
57
67
launch {
68
+ world.loadedEntityList.toList().filterIsInstance<EntityMinecartContainer >().forEach(::logEntityMinecartContainer)
58
69
world.loadedTileEntityList.toList().forEach(::logTileEntity)
59
70
notification()
60
71
}
@@ -97,14 +108,27 @@ object StashLogger : Module(
97
108
}
98
109
}
99
110
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
+
100
124
private fun logTileEntity (tileEntity : TileEntity ) {
101
125
if (! checkTileEntityType(tileEntity)) return
102
126
if (! knownPositions.add(tileEntity.pos)) return
103
127
104
128
val chunk = ChunkPos .asLong(tileEntity.pos.x shr 4 , tileEntity.pos.z shr 4 )
105
129
val chunkStats = chunkData.getOrPut(chunk, ::ChunkStats )
106
130
107
- chunkStats.add (tileEntity)
131
+ chunkStats.addTileEntity (tileEntity)
108
132
}
109
133
110
134
private fun checkTileEntityType (tileEntity : TileEntity ) =
@@ -120,18 +144,37 @@ object StashLogger : Module(
120
144
var droppers = 0 ; private set
121
145
var dispensers = 0 ; private set
122
146
var hoppers = 0 ; private set
147
+ var minecartChests = 0 ; private set
148
+ var minecartHoppers = 0 ; private set
123
149
124
150
var hot = false
125
151
126
152
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
+ }
127
169
128
- fun add (tileEntity : TileEntity ) {
170
+ fun addTileEntity (tileEntity : TileEntity ) {
129
171
when (tileEntity) {
130
172
is TileEntityChest -> chests++
131
173
is TileEntityShulkerBox -> shulkers++
132
174
is TileEntityDropper -> droppers++
133
175
is TileEntityDispenser -> dispensers++
134
176
is TileEntityHopper -> hoppers++
177
+
135
178
else -> return
136
179
}
137
180
@@ -150,7 +193,13 @@ object StashLogger : Module(
150
193
var x = 0.0
151
194
var y = 0.0
152
195
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
+ }
154
203
155
204
for (tileEntity in tileEntities) {
156
205
x + = tileEntity.pos.x
@@ -172,6 +221,9 @@ object StashLogger : Module(
172
221
if (droppers > 0 && logDroppers) statList.add(" $droppers dropper${if (droppers == 1 ) " " else " s" } " )
173
222
if (dispensers > 0 && logDispensers) statList.add(" $dispensers dispenser${if (dispensers == 1 ) " " else " s" } " )
174
223
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
+
175
227
return statList.joinToString()
176
228
}
177
229
}
0 commit comments