From 24b68dcc80cbf13f1098a0f6cf259c4bd44f4446 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Tue, 28 Nov 2023 21:59:21 +0100 Subject: Add unique gift highlighter (#737) Added Unique Gifting Opportunities. #737 --- .../SkyhanniPlayersWhenTheySeeUngiftedPlayers.kt | 84 ++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/event/SkyhanniPlayersWhenTheySeeUngiftedPlayers.kt (limited to 'src/main/java/at/hannibal2/skyhanni/features') 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? + 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)) + } + } + +} -- cgit