diff --git a/src/main/scala/com/github/unchama/seichiassist/achievement/hierarchy/AchievementGroup.scala b/src/main/scala/com/github/unchama/seichiassist/achievement/hierarchy/AchievementGroup.scala index 31cf66ec16..8641097b10 100644 --- a/src/main/scala/com/github/unchama/seichiassist/achievement/hierarchy/AchievementGroup.scala +++ b/src/main/scala/com/github/unchama/seichiassist/achievement/hierarchy/AchievementGroup.scala @@ -28,4 +28,27 @@ object AchievementGroup { case object VoteCounts extends AchievementGroup("JMS投票数", Specials) case object Secrets extends AchievementGroup("極秘任務", Specials) + + private val achievementIdRangeToGroupNameList = List( + (1001 to 1012, BrokenBlockRanking), + (2001 to 2014, PlacedBlockAmount), + (3001 to 3019, BrokenBlockAmount), + (4001 to 4023, PlayTime), + (5101 to 5125, TotalLogins), + (5001 to 5008, ConsecutiveLogins), + (6001 to 6008, VoteCounts), + (7001 to 7027, OfficialEvent), + (7901 to 7906, OfficialEvent), + (8001 to 8003, Secrets), + (9001 to 9047, Anniversaries) + ) + + /** + * @return 実績IDから実績IDが属する実績グループ名を取得する + */ + def getGroupNameByEntryId(entryId: Int): Option[String] = { + achievementIdRangeToGroupNameList.collectFirst { + case (range, group) if range contains entryId => group.name + } + } } diff --git a/src/main/scala/com/github/unchama/seichiassist/menus/achievement/group/AchievementGroupMenuButtons.scala b/src/main/scala/com/github/unchama/seichiassist/menus/achievement/group/AchievementGroupMenuButtons.scala index 02a6355957..535d6fc3b7 100644 --- a/src/main/scala/com/github/unchama/seichiassist/menus/achievement/group/AchievementGroupMenuButtons.scala +++ b/src/main/scala/com/github/unchama/seichiassist/menus/achievement/group/AchievementGroupMenuButtons.scala @@ -19,6 +19,7 @@ import com.github.unchama.seichiassist.achievement.{ NicknameMapping, SeichiAchievement } +import com.github.unchama.seichiassist.achievement.hierarchy.AchievementGroup import com.github.unchama.seichiassist.menus.ColorScheme import com.github.unchama.targetedeffect.commandsender.MessageEffect import com.github.unchama.targetedeffect.player.FocusedSoundEffect @@ -124,7 +125,13 @@ object AchievementGroupMenuButtons { .playermap(player.getUniqueId) .TitleFlags .addOne(achievement.id) - player.sendMessage(s"実績No${achievement.id}を解除しました!おめでとうございます!") + val displayGroupName = + AchievementGroup + .getGroupNameByEntryId(achievement.id) + .getOrElse("未実装") + player.sendMessage( + s"[${displayGroupName}]実績No${achievement.id}を解除しました!おめでとうございます!" + ) } else { MessageEffect(s"${RED}実績No${achievement.id}は条件を満たしていません。")(player) diff --git a/src/main/scala/com/github/unchama/seichiassist/task/global/PlayerDataRecalculationRoutine.scala b/src/main/scala/com/github/unchama/seichiassist/task/global/PlayerDataRecalculationRoutine.scala index b7ed284b9f..bbaf2b5823 100644 --- a/src/main/scala/com/github/unchama/seichiassist/task/global/PlayerDataRecalculationRoutine.scala +++ b/src/main/scala/com/github/unchama/seichiassist/task/global/PlayerDataRecalculationRoutine.scala @@ -5,6 +5,7 @@ import com.github.unchama.concurrent.{RepeatingRoutine, RepeatingTaskContext} import com.github.unchama.minecraft.actions.OnMinecraftServerThread import com.github.unchama.seichiassist.SeichiAssist import com.github.unchama.seichiassist.achievement.SeichiAchievement +import com.github.unchama.seichiassist.achievement.hierarchy.AchievementGroup import org.bukkit.Bukkit import scala.concurrent.duration.FiniteDuration @@ -48,13 +49,22 @@ object PlayerDataRecalculationRoutine { .toList .sequence .map(_.flatMap { - case (achievementId, true) => Some(achievementId) - case _ => None + case (achievementId, true) => + val displayGroupName = + AchievementGroup.getGroupNameByEntryId(achievementId).getOrElse("未実装") + Some((achievementId, displayGroupName)) + case _ => None }) .flatMap(unlockTargets => IO { - playerData.TitleFlags.addAll(unlockTargets) - unlockTargets.map("実績No" + _ + "が解除されました!おめでとうございます!").foreach(player.sendMessage) + val achievementIds = unlockTargets.map(_._1) + playerData.TitleFlags.addAll(achievementIds) + unlockTargets.foreach { + case (achievementId, displayGroupName) => + player.sendMessage( + s"[${displayGroupName}]実績No${achievementId}が解除されました!おめでとうございます!" + ) + } } ) .unsafeRunSync()