blob: e24a66594edb33ca606f0514839095fef94cca04 (
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
package at.hannibal2.skyhanni.features.event
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.api.event.HandleEvent
import at.hannibal2.skyhanni.data.ProfileStorageData
import at.hannibal2.skyhanni.data.WinterAPI
import at.hannibal2.skyhanni.events.EntityCustomNameUpdateEvent
import at.hannibal2.skyhanni.events.LorenzChatEvent
import at.hannibal2.skyhanni.events.LorenzTickEvent
import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
import at.hannibal2.skyhanni.events.entity.EntityEnterWorldEvent
import at.hannibal2.skyhanni.features.event.winter.UniqueGiftCounter
import at.hannibal2.skyhanni.mixins.hooks.RenderLivingEntityHelper
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.ColorUtils.withAlpha
import at.hannibal2.skyhanni.utils.EntityUtils
import at.hannibal2.skyhanni.utils.EntityUtils.isNPC
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.LorenzColor
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher
import at.hannibal2.skyhanni.utils.RegexUtils.matches
import at.hannibal2.skyhanni.utils.getLorenzVec
import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraft.client.entity.EntityOtherPlayerMP
import net.minecraft.entity.Entity
import net.minecraft.entity.EntityLivingBase
import net.minecraft.entity.item.EntityArmorStand
import net.minecraft.entity.player.EntityPlayer
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
@SkyHanniModule
object UniqueGiftingOpportunitiesFeatures {
private val playerList: MutableSet<String>?
get() = ProfileStorageData.playerSpecific?.winter?.playersThatHaveBeenGifted
private val patternGroup = RepoPattern.group("event.winter.uniquegifts")
private val giftedPattern by patternGroup.pattern(
"gifted",
"§6\\+1 Unique Gift given! To ([^§]+)§r§6!"
)
private val giftNamePattern by patternGroup.pattern(
"giftname",
"(?:WHITE|RED|GREEN)_GIFT\$"
)
private var holdingGift = false
private fun hasGiftedPlayer(player: EntityPlayer) = playerList?.contains(player.name) == true
private fun addGiftedPlayer(playerName: String) {
playerList?.add(playerName)
}
private val config get() = SkyHanniMod.feature.event.winter.giftingOpportunities
private fun isEnabled() = holdingGift
private val hasNotGiftedNametag = "§a§lꤥ"
private val hasGiftedNametag = "§c§lꤥ"
private fun analyzeArmorStand(entity: EntityArmorStand) {
if (!config.useArmorStandDetection) return
if (entity.name != hasGiftedNametag) return
val matchedPlayer = EntityUtils.getEntitiesNearby<EntityPlayer>(entity.getLorenzVec(), 2.0)
.singleOrNull { !it.isNPC() } ?: return
addGiftedPlayer(matchedPlayer.name)
}
@SubscribeEvent
fun onEntityChangeName(event: EntityCustomNameUpdateEvent) {
val entity = event.entity as? EntityArmorStand ?: return
analyzeArmorStand(entity)
}
@HandleEvent
fun onEntityJoinWorld(event: EntityEnterWorldEvent<Entity>) {
playerColor(event)
val entity = event.entity as? EntityArmorStand ?: return
analyzeArmorStand(entity)
}
private fun playerColor(event: EntityEnterWorldEvent<Entity>) {
if (event.entity is EntityOtherPlayerMP) {
val entity = event.entity
if (entity.isNPC() || isIronman(entity) || isBingo(entity)) return
RenderLivingEntityHelper.setEntityColor(
entity,
LorenzColor.DARK_GREEN.toColor().withAlpha(127)
) { isEnabled() && !hasGiftedPlayer(entity) }
}
}
private fun isBingo(entity: EntityLivingBase) =
!LorenzUtils.isBingoProfile && entity.displayName.formattedText.endsWith("Ⓑ§r")
private fun isIronman(entity: EntityLivingBase) =
!LorenzUtils.noTradeMode && entity.displayName.formattedText.endsWith("♲§r")
@SubscribeEvent
fun onChat(event: LorenzChatEvent) {
giftedPattern.matchMatcher(event.message) {
addGiftedPlayer(group(1))
UniqueGiftCounter.addUniqueGift()
}
}
@SubscribeEvent
fun onTick(event: LorenzTickEvent) {
holdingGift = false
if (!LorenzUtils.inSkyBlock) return
if (!config.enabled) return
if (!WinterAPI.isDecember()) return
holdingGift = !config.highlighWithGiftOnly || giftNamePattern.matches(InventoryUtils.itemInHandId.asString())
}
@SubscribeEvent
fun onWorldChange(event: LorenzWorldChangeEvent) {
holdingGift = false
}
}
|