summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/data')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt7
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt68
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt10
3 files changed, 56 insertions, 29 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt b/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt
index bfcc8df5f..56d565299 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/MinecraftData.kt
@@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
import at.hannibal2.skyhanni.events.PacketEvent
import at.hannibal2.skyhanni.events.PlaySoundEvent
import at.hannibal2.skyhanni.events.ReceiveParticleEvent
+import at.hannibal2.skyhanni.utils.DelayedRun
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
import at.hannibal2.skyhanni.utils.LorenzUtils
@@ -71,6 +72,7 @@ object MinecraftData {
Minecraft.getMinecraft().thePlayer ?: return
totalTicks++
LorenzTickEvent(totalTicks).postAndCatch()
+ DelayedRun.checkRuns()
}
@SubscribeEvent
@@ -78,8 +80,8 @@ object MinecraftData {
if (!LorenzUtils.inSkyBlock) return
val hand = InventoryUtils.getItemInHand()
val newItem = hand?.getInternalName() ?: NEUInternalName.NONE
- if (newItem != InventoryUtils.itemInHandId) {
- ItemInHandChangeEvent(newItem, hand).postAndCatch()
+ val oldItem = InventoryUtils.itemInHandId
+ if (newItem != oldItem) {
InventoryUtils.recentItemsInHand.keys.removeIf { it + 30_000 > System.currentTimeMillis() }
if (newItem != NEUInternalName.NONE) {
@@ -87,6 +89,7 @@ object MinecraftData {
}
InventoryUtils.itemInHandId = newItem
InventoryUtils.latestItemInHand = hand
+ ItemInHandChangeEvent(newItem, oldItem).postAndCatch()
}
}
diff --git a/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt b/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt
index 4c6058b26..f3c04a0c6 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/OwnInventoryData.kt
@@ -1,23 +1,28 @@
package at.hannibal2.skyhanni.data
-import at.hannibal2.skyhanni.events.InventoryCloseEvent
+import at.hannibal2.skyhanni.events.GuiContainerEvent
import at.hannibal2.skyhanni.events.LorenzTickEvent
import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
import at.hannibal2.skyhanni.events.OwnInventoryItemUpdateEvent
import at.hannibal2.skyhanni.events.PacketEvent
import at.hannibal2.skyhanni.events.entity.ItemAddInInventoryEvent
import at.hannibal2.skyhanni.features.bazaar.BazaarApi
+import at.hannibal2.skyhanni.features.bazaar.BazaarApi.Companion.isBazaarItem
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy
-import at.hannibal2.skyhanni.utils.NEUItems
+import at.hannibal2.skyhanni.utils.NEUInternalName
+import at.hannibal2.skyhanni.utils.SimpleTimeMark
+import net.minecraft.client.Minecraft
import net.minecraft.item.ItemStack
import net.minecraft.network.play.server.S0DPacketCollectItem
import net.minecraft.network.play.server.S2FPacketSetSlot
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.milliseconds
typealias SlotNumber = Int
typealias ItemName = String
@@ -58,7 +63,12 @@ class OwnInventoryData {
val old = items[slot]
val new = itemStack.itemToPair()
if (old != new) {
- item(slot, new, itemStack)
+ itemStack?.let {
+ calculateDifference(slot, new, it)
+ }
+ items = items.editCopy {
+ this[slot] = new
+ }
}
}
}
@@ -78,59 +88,65 @@ class OwnInventoryData {
private fun ItemStack?.itemToPair(): ItemData = this?.let { (name ?: "null") to stackSize } ?: Pair("null", 0)
- private fun item(slot: SlotNumber, new: ItemData, itemStack: ItemStack?) {
+ private fun calculateDifference(slot: SlotNumber, new: ItemData, itemStack: ItemStack) {
val (oldItem, oldAmount) = items[slot] ?: Pair("null", 0)
val (name, amount) = new
if (name == oldItem) {
val diff = amount - oldAmount
- if (amount > oldAmount) {
- add(itemStack, diff)
+ if (diff > 0) {
+ addItem(itemStack, diff)
}
} else {
if (name != "null") {
- add(itemStack!!, amount)
+ addItem(itemStack, amount)
}
}
- items = items.editCopy {
- this[slot] = new
- }
}
@SubscribeEvent
- fun onInventoryClose(event: InventoryCloseEvent) {
- BazaarApi.inBazaarInventory = false
- lastClose = System.currentTimeMillis()
+ fun onInventoryClose(event: GuiContainerEvent.CloseWindowEvent) {
+ val item = Minecraft.getMinecraft().thePlayer.inventory.itemStack ?: return
+ val internalNameOrNull = item.getInternalNameOrNull() ?: return
+ ignoreItem(500.milliseconds) { it == internalNameOrNull }
}
- private var lastClose = 0L
+ @SubscribeEvent
+ fun onSlotClick(event: GuiContainerEvent.SlotClickEvent) {
+ if (BazaarApi.inBazaarInventory) {
+ ignoreItem(500.milliseconds) { it.isBazaarItem() }
+ }
+ }
+
+ private fun ignoreItem(duration: Duration, condition: (NEUInternalName) -> Boolean) {
+ ignoredItemsUntil.add(IgnoredItem(condition, SimpleTimeMark.now() + duration))
+ }
- private fun add(item_: ItemStack?, add: Int) {
- val item = item_ ?: return
- val diffClose = System.currentTimeMillis() - lastClose
- if (diffClose < 500) return
+ private val ignoredItemsUntil = mutableListOf<IgnoredItem>()
+ class IgnoredItem(val condition: (NEUInternalName) -> Boolean, val blockedUntil: SimpleTimeMark)
+
+ private fun addItem(item: ItemStack, add: Int) {
val diffWorld = System.currentTimeMillis() - LorenzUtils.lastWorldSwitch
if (diffWorld < 3_000) return
- val internalName = item.getInternalNameOrNull()
-
item.name?.let {
if (it == "§8Quiver Arrow") {
return
}
}
- if (internalName == null) {
- LorenzUtils.debug("OwnInventoryData add is empty for: '${item.name}'")
+ val internalName = item.getInternalNameOrNull() ?: run {
+ LorenzUtils.debug("OwnInventoryData add is null for: '${item.name}'")
return
}
- if (internalName.startsWith("MAP-")) return
- val (_, amount) = NEUItems.getMultiplier(internalName)
- if (amount > 1) return
+ ignoredItemsUntil.removeIf { it.blockedUntil.isInPast() }
+ if (ignoredItemsUntil.any { it.condition(internalName) }) return
+
+ if (internalName.startsWith("MAP-")) return
ItemAddInInventoryEvent(internalName, add).postAndCatch()
+ LorenzUtils.debug("added item internalName: $internalName")
}
-
}
diff --git a/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt b/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt
index 78c25e799..470c8d171 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/SkillExperience.kt
@@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.data
import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent
import at.hannibal2.skyhanni.events.LorenzActionBarEvent
import at.hannibal2.skyhanni.events.ProfileJoinEvent
+import at.hannibal2.skyhanni.events.SkillExpGainEvent
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.LorenzUtils
@@ -32,7 +33,14 @@ class SkillExperience {
val neededForNextLevel = group("needed").formatNumber()
val nextLevel = getLevelForExpExactly(neededForNextLevel)
val baseExp = getExpForLevel(nextLevel - 1)
- skillExp[skill] = baseExp + overflow
+ val totalExp = baseExp + overflow
+ skillExp[skill] = totalExp
+ SkillExpGainEvent(skill).postAndCatch()
+ }
+ val pattern = ".*§3+(?<add>.+) (?<skill>.*) \\((?<percentage>.*)%\\).*".toPattern()
+ pattern.matchMatcher(event.message) {
+ val skill = group("skill").lowercase()
+ SkillExpGainEvent(skill).postAndCatch()
}
}