diff --git a/.poggit.yml b/.poggit.yml index 70d59b5..fe50f38 100644 --- a/.poggit.yml +++ b/.poggit.yml @@ -3,6 +3,10 @@ build-by-default: true branches: - main projects: + PlayedTimeScore: + path: PlayedTimeScore + lint: + phpstan: false EcoAPIScore: path: EcoAPIScore lint: diff --git a/PlayedTimeScore/README.md b/PlayedTimeScore/README.md new file mode 100644 index 0000000..684e8de --- /dev/null +++ b/PlayedTimeScore/README.md @@ -0,0 +1,6 @@ +### Available Tags: + +| Tag | Description | +|:--:|:--:| +|`{ptscore.total_time}`|Totally played time of the player| +|`{ptscore.session_time}`|Played time while the player-session| \ No newline at end of file diff --git a/PlayedTimeScore/plugin.yml b/PlayedTimeScore/plugin.yml new file mode 100644 index 0000000..fdf7124 --- /dev/null +++ b/PlayedTimeScore/plugin.yml @@ -0,0 +1,8 @@ +name: PlayedTimeScore +main: supercrafter333\PlayedTimeScore\Main +src-namespace-prefix: supercrafter333\PlayedTimeScore +api: 4.0.0 +version: 1.1.0 +author: supercrafter333 +description: A plugin implementing some basic tags for ScoreHud. +depend: ["PlayedTime", "ScoreHud"] \ No newline at end of file diff --git a/PlayedTimeScore/resources/config.yml b/PlayedTimeScore/resources/config.yml new file mode 100644 index 0000000..43a7125 --- /dev/null +++ b/PlayedTimeScore/resources/config.yml @@ -0,0 +1,7 @@ +dateformat-letters: + year: 'y' + month: 'mo' + day: 'd' + hour: 'h' + minute: 'm' + second: 's' \ No newline at end of file diff --git a/PlayedTimeScore/src/Main.php b/PlayedTimeScore/src/Main.php new file mode 100644 index 0000000..86e2a46 --- /dev/null +++ b/PlayedTimeScore/src/Main.php @@ -0,0 +1,28 @@ +saveResource("config.yml"); + + $this->getServer()->getPluginManager()->registerEvents(new EventListener(), $this); + $this->getServer()->getPluginManager()->registerEvents(new TagResolveListener($this), $this); + + $this->getScheduler()->scheduleRepeatingTask(new ScorehudUpdateTask(), 20); + } +} \ No newline at end of file diff --git a/PlayedTimeScore/src/ScorehudUpdateTask.php b/PlayedTimeScore/src/ScorehudUpdateTask.php new file mode 100644 index 0000000..a50b92b --- /dev/null +++ b/PlayedTimeScore/src/ScorehudUpdateTask.php @@ -0,0 +1,16 @@ +getServer()->getOnlinePlayers() as $player) + (new EventListener())->sendUpdate($player); + } +} \ No newline at end of file diff --git a/PlayedTimeScore/src/listeners/EventListener.php b/PlayedTimeScore/src/listeners/EventListener.php new file mode 100644 index 0000000..c452e25 --- /dev/null +++ b/PlayedTimeScore/src/listeners/EventListener.php @@ -0,0 +1,54 @@ +getPlayer(); + + if (is_null($player) || !$player->isOnline()) { + return; + } + + $this->sendUpdate($player); + } + + // no better way to detect when the suffix or prefix of a player changes + public function onPlayerChat(PlayerChatEvent $event) + { + $this->sendUpdate($event->getPlayer()); + } + + public function sendUpdate(Player $player): void + { + $time = function (DateInterval|null $dt): string { + if ($dt === null) return "§cNOT FOUND"; + $str = ""; + $cfg = Main::getInstance()->getConfig()->get("dateformat-letters", []); + if ($dt->y > 0) $str .= "§e" . $dt->y . $cfg["year"] . "§7, "; + if ($dt->m > 0) $str .= "§e" . $dt->m . $cfg["month"] . "§7, "; + if ($dt->d > 0) $str .= "§e" . $dt->d . $cfg["day"] . "§7, "; + if ($dt->h > 0) $str .= "§e" . $dt->h . $cfg["hour"] . "§7, "; + if ($dt->i > 0) $str .= "§e" . $dt->i . $cfg["minute"] . "§7, "; + if ($dt->s > 0) $str .= "§e" . $dt->s . $cfg["second"]; + return $str; + }; + (new PlayerTagsUpdateEvent($player, [ + new ScoreTag("ptscore.total_time", $time(PlayedTimeLoader::getInstance()->getPlayedTimeManager()->getTotalTime($player))), + new ScoreTag("ptscore.session_time", $time(PlayedTimeLoader::getInstance()->getPlayedTimeManager()->getSessionTime($player))) + ]))->call(); + } +} \ No newline at end of file diff --git a/PlayedTimeScore/src/listeners/TagResolveListener.php b/PlayedTimeScore/src/listeners/TagResolveListener.php new file mode 100644 index 0000000..1aa2a67 --- /dev/null +++ b/PlayedTimeScore/src/listeners/TagResolveListener.php @@ -0,0 +1,52 @@ +getPlayer(); + $tag = $ev->getTag(); + $tags = explode('.', $tag->getName(), 2); + $value = ""; + + if ($tags[0] !== 'ptscore' || count($tags) < 2) { + return; + } + + $time = function (DateInterval|null $dt): string { + if ($dt === null) return "§cNOT FOUND"; + $str = ""; + $cfg = Main::getInstance()->getConfig()->get("dateformat-letters", []); + if ($dt->y > 0) $str .= "§e" . $dt->y . $cfg["year"] . "§7, "; + if ($dt->m > 0) $str .= "§e" . $dt->m . $cfg["month"] . "§7, "; + if ($dt->d > 0) $str .= "§e" . $dt->d . $cfg["day"] . "§7, "; + if ($dt->h > 0) $str .= "§e" . $dt->h . $cfg["hour"] . "§7, "; + if ($dt->i > 0) $str .= "§e" . $dt->i . $cfg["minute"] . "§7, "; + if ($dt->s > 0) $str .= "§e" . $dt->s . $cfg["second"]; + return $str; + }; + + switch ($tags[1]) { + case "total_time": + $value = $time(PlayedTimeLoader::getInstance()->getPlayedTimeManager()->getTotalTime($player)); + break; + + case "session_time": + $value = $time(PlayedTimeLoader::getInstance()->getPlayedTimeManager()->getSessionTime($player)); + break; + } + + $tag->setValue($value); + } +} \ No newline at end of file diff --git a/README.md b/README.md index cda9bcf..a44170d 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ A repository containing plugins implementing tags for ScoreHud. |CombatScore|[CombatLogger](https://github.com/JackNoordhuis/PocketMine-Plugins/tree/master/CombatLogger)|[Download](https://poggit.pmmp.io/ci/Ifera/ScoreHudX/CombatScore)| |FactionsProScore|[FactionsPro](https://github.com/poggit-orphanage/FactionsPro)|[Download](https://poggit.pmmp.io/ci/Ifera/ScoreHudX/FactionsProScore)| |PurePermsScore|[PurePerms](https://github.com/poggit-orphanage/PurePerms)|[Download](https://poggit.pmmp.io/ci/Ifera/ScoreHudX/PurePermsScore)| +|PlayedTimeScore|[PlayedTime](https://github.com/supercrafter333/PlayedTime)|[Download](https://poggit.pmmp.io/ci/Ifera/ScoreHudX/PlayedTimeScore)| ## More plugins