1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
package at.hannibal2.skyhanni.data
import at.hannibal2.skyhanni.api.CollectionAPI
import at.hannibal2.skyhanni.events.InventoryCloseEvent
import at.hannibal2.skyhanni.events.OwnInventorItemUpdateEvent
import at.hannibal2.skyhanni.events.PacketEvent
import at.hannibal2.skyhanni.features.bazaar.BazaarApi
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.NEUItems
import net.minecraft.item.ItemStack
import net.minecraft.network.play.server.S2FPacketSetSlot
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class OwnInventoryData {
private var itemNames = mutableMapOf<Int, String>()
private var itemAmount = mutableMapOf<Int, Int>()
@SubscribeEvent(priority = EventPriority.LOW, receiveCanceled = true)
fun onChatPacket(event: PacketEvent.ReceiveEvent) {
if (!LorenzUtils.inSkyBlock) return
val packet = event.packet
if (packet is S2FPacketSetSlot) {
val windowId = packet.func_149175_c()
if (windowId == 0) {
val item = packet.func_149174_e() ?: return
OwnInventorItemUpdateEvent(item).postAndCatch()
}
}
if (packet is S2FPacketSetSlot) {
val windowId = packet.func_149175_c()
val item = packet.func_149174_e()
val slot = packet.func_149173_d()
if (windowId != 0) return
val name = item?.name ?: "null"
val oldItem = itemNames.getOrDefault(slot, "null")
val oldAmount = itemAmount.getOrDefault(slot, 0)
val amount = item?.stackSize ?: 0
if (name == oldItem) {
val diff = amount - oldAmount
if (amount > oldAmount) {
add(item, diff)
}
} else {
if (name != "null") {
add(item, amount)
}
}
itemNames[slot] = name
itemAmount[slot] = amount
}
}
@SubscribeEvent
fun onInventoryClose(event: InventoryCloseEvent) {
BazaarApi.inBazaarInventory = false
lastClose = System.currentTimeMillis()
}
private var lastClose = 0L
private fun add(item: ItemStack?, add: Int) {
if (item == null) return
val diffClose = System.currentTimeMillis() - lastClose
if (diffClose < 500) return
val diffWorld = System.currentTimeMillis() - LorenzUtils.lastWorldSwitch
if (diffWorld < 3_000) return
val internalName = item.getInternalName()
if (internalName.startsWith("MAP-")) return
val (_, amount) = NEUItems.getMultiplier(internalName)
if (amount > 1) return
if (internalName == "") {
LorenzUtils.debug("OwnInventoryData add is empty for: '$internalName'")
return
}
addMultiplier(internalName, add)
}
private fun addMultiplier(internalName: String, amount: Int) {
CollectionAPI.addFromInventory(internalName, amount)
}
}
|