blob: 24cb1614e2a5fd1f385bb7b564297e8e832caaa2 (
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
package at.hannibal2.skyhanni.features.misc.items
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.IslandType
import at.hannibal2.skyhanni.events.RenderEntityOutlineEvent
import at.hannibal2.skyhanni.features.garden.pests.SprayType
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull
import at.hannibal2.skyhanni.utils.ItemUtils.getItemRarityOrNull
import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.RecalculatingValue
import net.minecraft.entity.Entity
import net.minecraft.entity.item.EntityArmorStand
import net.minecraft.entity.item.EntityItem
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.time.Duration.Companion.seconds
@SkyHanniModule
object GlowingDroppedItems {
private val config get() = SkyHanniMod.feature.misc.glowingDroppedItems
/**
* List of SkyBlock locations where we might see items in showcases
*/
private val showcaseItemLocations = setOf(
"The End",
"Jerry's Workshop",
"Dark Auction",
"Photon Pathway",
"Barrier Street",
"Village Plaza",
"Déjà Vu Alley"
)
private val showcaseItemIslands = setOf(
IslandType.HUB,
IslandType.PRIVATE_ISLAND,
IslandType.PRIVATE_ISLAND_GUEST,
IslandType.CRIMSON_ISLE
)
@SubscribeEvent
fun onRenderEntityOutlines(event: RenderEntityOutlineEvent) {
if (isEnabled() && event.type === RenderEntityOutlineEvent.Type.XRAY) {
event.queueEntitiesToOutline { getEntityOutlineColor(it) }
}
}
private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled
private fun getEntityOutlineColor(entity: Entity): Int? {
val item = entity as? EntityItem ?: return null
if (shouldHideShowcaseItem(entity)) return null
val entityItem = item.entityItem
if (!config.highlightFishingBait && entityItem.name.endsWith(" Bait")) {
return null
}
val internalName = entityItem.getInternalNameOrNull() ?: return null
val isSprayItem = LorenzUtils.enumValueOfOrNull<SprayType>(internalName.asString()) != null
if (isSprayItem) return null
val rarity = entityItem.getItemRarityOrNull()
return rarity?.color?.toColor()?.rgb
}
private val isShowcaseArea by RecalculatingValue(1.seconds) {
LorenzUtils.skyBlockIsland in showcaseItemIslands || LorenzUtils.skyBlockArea in showcaseItemLocations
}
private fun shouldHideShowcaseItem(entity: EntityItem): Boolean {
if (!isShowcaseArea || config.highlightShowcase) return false
for (entityArmorStand in entity.worldObj.getEntitiesWithinAABB(
EntityArmorStand::class.java,
entity.entityBoundingBox
)) {
if (entityArmorStand.isInvisible) {
return true
}
}
return false
}
}
|