summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2023-11-28 21:59:21 +0100
committerGitHub <noreply@github.com>2023-11-28 21:59:21 +0100
commit24b68dcc80cbf13f1098a0f6cf259c4bd44f4446 (patch)
tree9eed3b719b5bdb67bcbb43448f785d1398a2ce8f /src/main/java/at/hannibal2/skyhanni/features
parentc923b05837cd26f6aaedd4d04b7d9b5cab4462c8 (diff)
downloadskyhanni-24b68dcc80cbf13f1098a0f6cf259c4bd44f4446.tar.gz
skyhanni-24b68dcc80cbf13f1098a0f6cf259c4bd44f4446.tar.bz2
skyhanni-24b68dcc80cbf13f1098a0f6cf259c4bd44f4446.zip
Add unique gift highlighter (#737)
Added Unique Gifting Opportunities. #737
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/SkyhanniPlayersWhenTheySeeUngiftedPlayers.kt84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/SkyhanniPlayersWhenTheySeeUngiftedPlayers.kt b/src/main/java/at/hannibal2/skyhanni/features/event/SkyhanniPlayersWhenTheySeeUngiftedPlayers.kt
new file mode 100644
index 000000000..e720e3e30
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/SkyhanniPlayersWhenTheySeeUngiftedPlayers.kt
@@ -0,0 +1,84 @@
+package at.hannibal2.skyhanni.features.event
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.data.ProfileStorageData
+import at.hannibal2.skyhanni.events.EntityCustomNameUpdateEvent
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.events.RenderMobColoredEvent
+import at.hannibal2.skyhanni.events.withAlpha
+import at.hannibal2.skyhanni.utils.EntityUtils.isNPC
+import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
+import at.hannibal2.skyhanni.utils.LorenzColor
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.getLorenzVec
+import net.minecraft.client.Minecraft
+import net.minecraft.entity.item.EntityArmorStand
+import net.minecraft.entity.player.EntityPlayer
+import net.minecraftforge.event.entity.EntityJoinWorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+object SkyhanniPlayersWhenTheySeeUngiftedPlayers {
+ val playerList: MutableSet<String>?
+ get() = ProfileStorageData.playerSpecific?.playersThatHaveBeenGifted
+
+ val pattern = "§6\\+1 Unique Gift given! To ([^§]+)§r§6!".toPattern()
+ fun hasGiftedPlayer(player: EntityPlayer): Boolean =
+ playerList?.contains(player.name) == true
+
+ fun addGiftedPlayer(playerName: String): Unit {
+ playerList?.add(playerName)
+ }
+
+ val config get() = SkyHanniMod.feature.event.winter.giftingOpportunities
+
+ fun isEnabled(): Boolean {
+ return LorenzUtils.inSkyBlock && config.highlightSpecialNeedsPlayers &&
+ (Minecraft.getMinecraft().thePlayer?.heldItem?.getInternalName()?.endsWith("_GIFT") == true
+ || (!config.highlighWithGiftOnly))
+ }
+
+ val hasNotGiftedNametag = "§a§lꤥ"
+ val hasGiftedNametag = "§c§lꤥ"
+
+ fun analyzeArmorStand(entity: EntityArmorStand) {
+ if (!config.useArmorStandDetection) return
+ val world = Minecraft.getMinecraft().theWorld ?: return
+ if (entity.name != hasGiftedNametag) return
+ val matchedPlayer =
+ world.playerEntities.singleOrNull {
+ !it.isNPC() && it.getLorenzVec().distance(entity.getLorenzVec()) < 2
+ } ?: return
+ addGiftedPlayer(matchedPlayer.name)
+
+ }
+
+ @SubscribeEvent
+ fun onEntityChangeName(event: EntityCustomNameUpdateEvent) {
+ val entity = event.entity as? EntityArmorStand ?: return
+ analyzeArmorStand(entity)
+ }
+
+ @SubscribeEvent
+ fun onEntityJoinWorldEvent(event: EntityJoinWorldEvent) {
+ val entity = event.entity as? EntityArmorStand ?: return
+ analyzeArmorStand(entity)
+ }
+
+ @SubscribeEvent
+ fun onRenderMobColored(event: RenderMobColoredEvent) {
+ if (!isEnabled()) return
+ val entity = event.entity
+ if (entity is EntityPlayer && !entity.isNPC() && !hasGiftedPlayer(entity))
+ event.color = LorenzColor.DARK_GREEN.toColor().withAlpha(127)
+ }
+
+
+ @SubscribeEvent
+ fun onChat(event: LorenzChatEvent) {
+ pattern.matchMatcher(event.message) {
+ addGiftedPlayer(group(1))
+ }
+ }
+
+}