aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/dulkirmod/features/BrokenHypeNotif.kt
blob: 4253b6fe76538e51a689dd310a5bbf120eaa71d2 (plain)
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
package dulkirmod.features

import dulkirmod.DulkirMod.Companion.mc
import dulkirmod.config.DulkirConfig
import dulkirmod.utils.TabListUtils
import dulkirmod.utils.TextUtils
import dulkirmod.utils.TitleUtils
import dulkirmod.utils.Utils
import net.minecraft.item.ItemStack
import net.minecraft.nbt.NBTTagCompound

var oldKill = -1
var oldChampionXp = -1.0
var oldID = ""

fun brokenHypeNotif() {
    if (!DulkirConfig.notifyHype) return

    var kill = -1
    var championXp = -1.0
    var id = ""

    if (mc.thePlayer == null) return

    val stack: ItemStack = mc.thePlayer.heldItem ?: return

    // get info about held item
    if (stack.hasTagCompound()) {
        val tag: NBTTagCompound = stack.tagCompound
        if (tag.hasKey("ExtraAttributes", 10) && tag.hasKey("display", 10)) {
            val ea: NBTTagCompound = tag.getCompoundTag("ExtraAttributes")
            if (ea.hasKey("id", 8)) {
                id = ea.getString("id")
            }
            if (ea.hasKey("stats_book", 99)) {
                kill = ea.getInteger("stats_book")
            }
            if (ea.hasKey("champion_combat_xp", 99)) {
                championXp = ea.getDouble("champion_combat_xp")
            }
        }
    }
    TextUtils.info(id)
    // check if a wither blade, then check if same id
    if (!(id matches "(HYPERION|ASTRAEA|SCYLLA|VALKYRIE)".toRegex())) {
        return
    } else if (id != oldID) {
        // Check if this is a valid item for testing whether bestiary is broken.
        // That is, to be specific, check that it has champion and book of stats.
        // If it doesn't, don't reset because it can't be used anyway.
        if (kill == -1 || championXp == -1.0) {
            return
        }
        // If we get here this is a new item that is legitimate for testing bugged xp, in theory.
        oldID = id
        oldKill = kill
        oldChampionXp = championXp
        return
    }

    // If this section of the code is reached, then we have the same item, and we can check for updated stats
    if (oldKill != kill && oldChampionXp == championXp && TabListUtils.area != "Private Island") {
        mc.thePlayer.playSound("random.anvil_land", 1f * DulkirConfig.bestiaryNotifVol, 0f)
        val color = Utils.getColorString(DulkirConfig.bestiaryNotifColor)
        TitleUtils.drawStringForTime("${color}Hype Broken", 5000)
    }
    // update item regardless of whether it is bugged or not
    oldKill = kill
    oldChampionXp = championXp
}