From 50d16243dd8b8c22673a794b0e198b01a4da36ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=E1=BB=8Dc=20Lam?= <33188123+NgLamVN@users.noreply.github.com> Date: Mon, 7 Jun 2021 15:34:15 +0700 Subject: [PATCH 1/5] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6b094f5..d758acd 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ # CustomAlerts Customize or hide alerts (join/leave messages, whitelist messages, outdated server/client messages, etc...) plugin for PocketMine-MP +This repo is made for API 4.0.0 [![Download!](https://user-images.githubusercontent.com/10297075/101246002-cb046780-3710-11eb-950f-ba06934b8138.png)](http://gestyy.com/er3sEQ) @@ -12,7 +13,7 @@ PocketMine-MP plugins ## Requirements -PocketMine-MP API 3.0.0 +PocketMine-MP API 4.0.0 ## Overview From 1987912eddec66c9741b31a4e848428d5c9034a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=E1=BB=8Dc=20Lam?= Date: Mon, 7 Jun 2021 16:08:19 +0700 Subject: [PATCH 2/5] API 4 changes. --- CustomAlerts/plugin.yml | 26 ++++---- .../src/CustomAlerts/Commands/Commands.php | 20 ++++--- .../src/CustomAlerts/CustomAlerts.php | 60 +++++++++---------- .../src/CustomAlerts/EventListener.php | 26 ++++---- .../Events/CustomAlertsDeathEvent.php | 8 ++- .../CustomAlerts/Events/CustomAlertsEvent.php | 11 +++- .../CustomAlertsFullServerKickEvent.php | 14 +++-- .../Events/CustomAlertsJoinEvent.php | 6 +- .../Events/CustomAlertsMotdUpdateEvent.php | 6 +- .../CustomAlertsOutdatedClientKickEvent.php | 14 +++-- .../CustomAlertsOutdatedServerKickEvent.php | 14 +++-- .../Events/CustomAlertsQuitEvent.php | 6 +- .../Events/CustomAlertsWhitelistKickEvent.php | 14 +++-- .../Events/CustomAlertsWorldChangeEvent.php | 24 ++++---- CustomAlerts/src/CustomAlerts/MotdTask.php | 4 +- 15 files changed, 139 insertions(+), 114 deletions(-) diff --git a/CustomAlerts/plugin.yml b/CustomAlerts/plugin.yml index b28e44c..f97fbed 100755 --- a/CustomAlerts/plugin.yml +++ b/CustomAlerts/plugin.yml @@ -1,28 +1,22 @@ name: CustomAlerts main: CustomAlerts\CustomAlerts version: 2.1 -api: [3.0.0] +api: [4.0.0] load: STARTUP author: EvolSoft description: Customize or hide alerts (join/leave messages, whitelist messages, outdated server/client messages, etc...) plugin website: https://www.evolsoft.tk -commands: - customalerts: - aliases: [calerts] - description: CustomAlerts commands. - permission: customalerts permissions: customalerts: default: op description: CustomAlerts permission tree. - children: - customalerts.help: - default: op - description: let player read CustomAlerts commands help. - customalerts.info: - default: op - description: Let player read info about CustomAlerts. - customalerts.reload: - default: op - description: Let player reload CustomAlerts configuration. + customalerts.help: + default: op + description: let player read CustomAlerts commands help. + customalerts.info: + default: op + description: Let player read info about CustomAlerts. + customalerts.reload: + default: op + description: Let player reload CustomAlerts configuration. diff --git a/CustomAlerts/src/CustomAlerts/Commands/Commands.php b/CustomAlerts/src/CustomAlerts/Commands/Commands.php index 7ff0810..b475041 100755 --- a/CustomAlerts/src/CustomAlerts/Commands/Commands.php +++ b/CustomAlerts/src/CustomAlerts/Commands/Commands.php @@ -11,20 +11,26 @@ namespace CustomAlerts\Commands; use pocketmine\command\Command; -use pocketmine\command\PluginCommand; -use pocketmine\command\CommandExecutor; use pocketmine\command\CommandSender; +use pocketmine\plugin\PluginOwned; +use pocketmine\plugin\PluginOwnedTrait; use pocketmine\utils\TextFormat; use CustomAlerts\CustomAlerts; -class Commands extends PluginCommand implements CommandExecutor { +class Commands extends Command implements PluginOwned { + + use PluginOwnedTrait; + + private CustomAlerts $plugin; public function __construct(CustomAlerts $plugin){ - $this->plugin = $plugin; + parent::__construct("customalerts"); + $this->plugin = $plugin; + $this->setPermission("customalerts.help"); } - public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) : bool { + public function execute(CommandSender $sender, string $commandLabel, array $args){ if(isset($args[0])){ $args[0] = strtolower($args[0]); switch($args[0]){ @@ -55,7 +61,7 @@ public function onCommand(CommandSender $sender, Command $cmd, $label, array $ar $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); break; } - return true; + return; } help: if($sender->hasPermission("customalerts.help")){ @@ -66,6 +72,6 @@ public function onCommand(CommandSender $sender, Command $cmd, $label, array $ar }else{ $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); } - return true; + return; } } diff --git a/CustomAlerts/src/CustomAlerts/CustomAlerts.php b/CustomAlerts/src/CustomAlerts/CustomAlerts.php index 0dd3d82..a16fede 100755 --- a/CustomAlerts/src/CustomAlerts/CustomAlerts.php +++ b/CustomAlerts/src/CustomAlerts/CustomAlerts.php @@ -9,12 +9,13 @@ */ namespace CustomAlerts; - -use pocketmine\Player; -use pocketmine\entity\Living; -use pocketmine\event\entity\EntityDamageByBlockEvent; -use pocketmine\event\entity\EntityDamageEvent; -use pocketmine\level\Level; + +use pocketmine\player\Player; +use pocketmine\entity\Living; +use pocketmine\event\entity\EntityDamageByBlockEvent; +use pocketmine\event\entity\EntityDamageEvent; +use pocketmine\player\PlayerInfo; +use pocketmine\world\World; use pocketmine\plugin\PluginBase; use pocketmine\utils\TextFormat; @@ -27,24 +28,24 @@ class CustomAlerts extends PluginBase { const PREFIX = "&b[&aCustom&cAlerts&b] "; /** @var string */ - const API_VERSION = "2.0"; - - private $cfg; + const API_VERSION = "4.0"; + + public $cfg; - /** @var CustomAlerts $instance */ - private static $instance = null; + /** @var null|CustomAlerts $instance */ + private static ?CustomAlerts $instance = null; - public function onLoad(){ + public function onLoad(): void{ if(!self::$instance instanceof CustomAlerts){ self::$instance = $this; } } - public function onEnable(){ + public function onEnable(): void{ @mkdir($this->getDataFolder()); $this->saveDefaultConfig(); $this->cfg = $this->getConfig()->getAll(); - $this->getCommand("customalerts")->setExecutor(new Commands($this)); + $this->getServer()->getCommandMap()->register("customalerts", new Commands($this)); $this->getServer()->getPluginManager()->registerEvents(new EventListener($this), $this); $this->getScheduler()->scheduleRepeatingTask(new MotdTask($this), 20); } @@ -121,7 +122,7 @@ public function updateMotd(){ }else{ $cevent->setMessage($this->getServer()->getMotd()); } - $this->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); $this->getServer()->getNetwork()->setName($cevent->getMessage()); } @@ -141,9 +142,9 @@ public function isOutdatedClientMessageCustom() : bool { * * @return string */ - public function getOutdatedClientMessage(Player $player){ + public function getOutdatedClientMessage(PlayerInfo $player){ return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedClient"]["message"], array( - "PLAYER" => $player->getName(), + "PLAYER" => $player->getUsername(), "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), "TIME" => date($this->cfg["datetime-format"])))); @@ -165,9 +166,9 @@ public function isOutdatedServerMessageCustom() : bool { * * @return string */ - public function getOutdatedServerMessage(Player $player){ + public function getOutdatedServerMessage(PlayerInfo $player){ return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedServer"]["message"], array( - "PLAYER" => $player->getName(), + "PLAYER" => $player->getUsername(), "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), "TIME" => date($this->cfg["datetime-format"])))); @@ -189,9 +190,9 @@ public function isWhitelistMessageCustom() : bool { * * @return string */ - public function getWhitelistMessage(Player $player){ + public function getWhitelistMessage(PlayerInfo $player){ return TextFormat::colorize($this->replaceVars($this->cfg["WhitelistedServer"]["message"], array( - "PLAYER" => $player->getName(), + "PLAYER" => $player->getUsername(), "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), "TIME" => date($this->cfg["datetime-format"])))); @@ -214,9 +215,9 @@ public function isFullServerMessageCustom() : bool { * * @return string */ - public function getFullServerMessage(Player $player){ + public function getFullServerMessage(PlayerInfo $player){ return TextFormat::colorize($this->replaceVars($this->cfg["FullServer"]["message"], array( - "PLAYER" => $player->getName(), + "PLAYER" => $player->getUsername(), "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), "TIME" => date($this->cfg["datetime-format"])))); @@ -325,15 +326,15 @@ public function isWorldChangeMessageEnabled(){ * Get world change message * * @param Player $player - * @param Level $origin - * @param Level $target + * @param World $origin + * @param World $target * * @return string */ - public function getWorldChangeMessage(Player $player, Level $origin, Level $target){ + public function getWorldChangeMessage(Player $player, World $origin, World $target){ return TextFormat::colorize($this->replaceVars($this->cfg["WorldChange"]["message"], array( - "ORIGIN" => $origin->getName(), - "TARGET" => $target->getName(), + "ORIGIN" => $origin->getDisplayName(), + "TARGET" => $target->getDisplayName(), "PLAYER" => $player->getName(), "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), @@ -342,9 +343,6 @@ public function getWorldChangeMessage(Player $player, Level $origin, Level $targ /** * Check if death messages are custom - * - * @param EntityDeathEvent $cause - * * @return bool */ public function isDeathMessageCustom(EntityDamageEvent $cause = null){ diff --git a/CustomAlerts/src/CustomAlerts/EventListener.php b/CustomAlerts/src/CustomAlerts/EventListener.php index 5b631d5..15e75d2 100755 --- a/CustomAlerts/src/CustomAlerts/EventListener.php +++ b/CustomAlerts/src/CustomAlerts/EventListener.php @@ -10,7 +10,6 @@ namespace CustomAlerts; -use pocketmine\event\entity\EntityLevelChangeEvent; use pocketmine\event\Listener; use pocketmine\event\player\PlayerDeathEvent; use pocketmine\event\player\PlayerJoinEvent; @@ -19,7 +18,7 @@ use pocketmine\event\server\DataPacketReceiveEvent; use pocketmine\network\mcpe\protocol\LoginPacket; use pocketmine\network\mcpe\protocol\ProtocolInfo; -use pocketmine\Player; +use pocketmine\player\Player; use pocketmine\Server; use CustomAlerts\Events\CustomAlertsDeathEvent; @@ -32,7 +31,9 @@ use CustomAlerts\Events\CustomAlertsWorldChangeEvent; class EventListener implements Listener { - + + private CustomAlerts $plugin; + public function __construct(CustomAlerts $plugin){ $this->plugin = $plugin; } @@ -43,7 +44,8 @@ public function __construct(CustomAlerts $plugin){ * @priority HIGHEST */ public function onReceivePacket(DataPacketReceiveEvent $event){ - $player = $event->getPlayer(); + $origin = $event->getOrigin(); + $player = $origin->getPlayer(); $packet = $event->getPacket(); if($packet instanceof LoginPacket){ if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){ @@ -52,10 +54,10 @@ public function onReceivePacket(DataPacketReceiveEvent $event){ if($this->plugin->isOutdatedClientMessageCustom()){ $cevent->setMessage($this->plugin->getOutdatedClientMessage($player)); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); if($cevent->getMessage() != ""){ - $player->close($cevent->getMessage(), $cevent->getMessage()); - $event->setCancelled(true); + $origin->disconnect($cevent->getMessage()); + $event->cancel(); return; } }else if($packet->protocol > ProtocolInfo::CURRENT_PROTOCOL){ @@ -64,10 +66,10 @@ public function onReceivePacket(DataPacketReceiveEvent $event){ if($this->plugin->isOutdatedServerMessageCustom()){ $cevent->setMessage($this->plugin->getOutdatedServerMessage($player)); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); if($cevent->getMessage() != ""){ - $player->close($cevent->getMessage(), $cevent->getMessage()); - $event->setCancelled(true); + $origin->disconnect($cevent->getMessage()); + $event->cancel(); return; } } @@ -80,10 +82,10 @@ public function onReceivePacket(DataPacketReceiveEvent $event){ * @priority HIGHEST */ public function onPlayerPreLogin(PlayerPreLoginEvent $event){ - $player = $event->getPlayer(); + $player = $event->getPlayerInfo(); if(count($this->plugin->getServer()->getOnlinePlayers()) - 1 < $this->plugin->getServer()->getMaxPlayers()){ //Whitelist Message - if(!$this->plugin->getServer()->isWhitelisted($player->getName())){ + if(!$this->plugin->getServer()->isWhitelisted($player->getUsername())){ $cevent = new CustomAlertsWhitelistKickEvent($player); if($this->plugin->isWhitelistMessageCustom()){ $cevent->setMessage($this->plugin->getWhitelistMessage($player)); diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsDeathEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsDeathEvent.php index 988d55a..ed20e83 100755 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsDeathEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsDeathEvent.php @@ -11,7 +11,8 @@ namespace CustomAlerts\Events; use pocketmine\event\entity\EntityDamageEvent; -use pocketmine\Player; +use pocketmine\player\Player; +use pocketmine\plugin\Plugin; class CustomAlertsDeathEvent extends CustomAlertsEvent { @@ -27,11 +28,12 @@ class CustomAlertsDeathEvent extends CustomAlertsEvent { * @param Player $player * @param EntityDamageEvent $cause */ - public function __construct(Player $player, EntityDamageEvent $cause = null){ + public function __construct(Plugin $plugin, Player $player, EntityDamageEvent $cause) { + parent::__construct($plugin); $this->player = $player; $this->cause = $cause; } - + /** * Get death event player * diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsEvent.php index fe5621d..9eb4c25 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsEvent.php @@ -11,13 +11,18 @@ namespace CustomAlerts\Events; use pocketmine\event\plugin\PluginEvent; +use pocketmine\plugin\Plugin; -abstract class CustomAlertsEvent extends PluginEvent { +abstract class CustomAlertsEvent extends PluginEvent{ /** @var string */ private $message; - - /** + + public function __construct(Plugin $plugin) { + parent::__construct($plugin); + } + + /** * Get event message * * @return string diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php index bb1e021..3e82798 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php @@ -10,28 +10,30 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\PlayerInfo; +use pocketmine\plugin\Plugin; class CustomAlertsFullServerKickEvent extends CustomAlertsEvent { public static $handlerList = null; - /** @var Player $player */ + /** @var PlayerInfo $player */ private $player; /** - * @param Player $player + * @param PlayerInfo $player */ - public function __construct(Player $player){ + public function __construct(Plugin $plugin, PlayerInfo $player){ + parent::__construct($plugin); $this->player = $player; } /** * Get full server kick event player * - * @return Player + * @return PlayerInfo */ - public function getPlayer() : Player { + public function getPlayerInfo() : PlayerInfo { return $this->player; } } \ No newline at end of file diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsJoinEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsJoinEvent.php index ff96738..a95e542 100755 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsJoinEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsJoinEvent.php @@ -10,7 +10,8 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\Player; +use pocketmine\plugin\Plugin; class CustomAlertsJoinEvent extends CustomAlertsEvent { @@ -22,7 +23,8 @@ class CustomAlertsJoinEvent extends CustomAlertsEvent { /** * @param Player $player */ - public function __construct(Player $player){ + public function __construct(Plugin $plugin, Player $player){ + parent::__construct($plugin); $this->player = $player; } diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php index 9726786..1e74e7d 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php @@ -10,9 +10,13 @@ namespace CustomAlerts\Events; +use pocketmine\plugin\Plugin; + class CustomAlertsMotdUpdateEvent extends CustomAlertsEvent { public static $handlerList = null; - public function __construct(){} + public function __construct(Plugin $plugin){ + parent::__construct($plugin); + } } \ No newline at end of file diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php index 5f3066c..4b9f5e7 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php @@ -10,28 +10,30 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\PlayerInfo; +use pocketmine\plugin\Plugin; class CustomAlertsOutdatedClientKickEvent extends CustomAlertsEvent { public static $handlerList = null; - /** @var Player $player */ + /** @var PlayerInfo $player */ private $player; /** - * @param Player $player + * @param PlayerInfo $player */ - public function __construct(Player $player){ + public function __construct(Plugin $plugin, PlayerInfo $player){ + parent::__construct($plugin); $this->player = $player; } /** * Get outdated client kick event player * - * @return Player + * @return PlayerInfo */ - public function getPlayer() : Player { + public function getPlayer() : PlayerInfo { return $this->player; } } \ No newline at end of file diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php index 749e25f..dc5424a 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php @@ -10,28 +10,30 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\PlayerInfo; +use pocketmine\plugin\Plugin; class CustomAlertsOutdatedServerKickEvent extends CustomAlertsEvent { public static $handlerList = null; - /** @var Player $player */ + /** @var PlayerInfo $player */ private $player; /** - * @param Player $player + * @param PlayerInfo $player */ - public function __construct(Player $player){ + public function __construct(Plugin $plugin, PlayerInfo $player){ + parent::__construct($plugin); $this->player = $player; } /** * Get outdated server kick event player * - * @return Player + * @return PlayerInfo */ - public function getPlayer() : Player { + public function getPlayer() : PlayerInfo { return $this->player; } } \ No newline at end of file diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsQuitEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsQuitEvent.php index d7293d5..3ff85b8 100755 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsQuitEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsQuitEvent.php @@ -10,7 +10,8 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\Player; +use pocketmine\plugin\Plugin; class CustomAlertsQuitEvent extends CustomAlertsEvent { @@ -22,7 +23,8 @@ class CustomAlertsQuitEvent extends CustomAlertsEvent { /** * @param Player $player */ - public function __construct(Player $player){ + public function __construct(Plugin $plugin, Player $player){ + parent::__construct($plugin); $this->player = $player; } diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php index 72665cb..c848e7e 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php @@ -10,28 +10,30 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\PlayerInfo; +use pocketmine\plugin\Plugin; class CustomAlertsWhitelistKickEvent extends CustomAlertsEvent { public static $handlerList = null; - /** @var Player $player */ + /** @var PlayerInfo $player */ private $player; /** - * @param Player $player + * @param PlayerInfo $player */ - public function __construct(Player $player){ + public function __construct(Plugin $plugin, PlayerInfo $player){ + parent::__construct($plugin); $this->player = $player; } /** * Get whitelist kick event player * - * @return Player + * @return PlayerInfo */ - public function getPlayer() : Player { + public function getPlayer() : PlayerInfo { return $this->player; } } \ No newline at end of file diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php index e5134a3..1157814 100755 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php @@ -10,8 +10,9 @@ namespace CustomAlerts\Events; -use pocketmine\level\Level; -use pocketmine\Player; +use pocketmine\plugin\Plugin; +use pocketmine\world\World; +use pocketmine\player\Player; class CustomAlertsWorldChangeEvent extends CustomAlertsEvent { @@ -20,18 +21,19 @@ class CustomAlertsWorldChangeEvent extends CustomAlertsEvent { /** @var Player $player */ private $player; - /** @var Level $origin */ + /** @var World $origin */ private $origin; - /** @var Level $target */ + /** @var World $target */ private $target; /** * @param Player $player - * @param Level $origin - * @param Level $target + * @param World $origin + * @param World $target */ - public function __construct(Player $player, Level $origin, Level $target){ + public function __construct(Plugin $plugin, Player $player, World $origin, World $target){ + parent::__construct($plugin); $this->player = $player; $this->origin = $origin; $this->target = $target; @@ -49,18 +51,18 @@ public function getPlayer() : Player { /** * Get origin level * - * @return Level + * @return World */ - public function getOrigin() : Level { + public function getOrigin() : World { return $this->origin; } /** * Get target level * - * @return Level + * @return World */ - public function getTarget() : Level { + public function getTarget() : World { return $this->target; } } \ No newline at end of file diff --git a/CustomAlerts/src/CustomAlerts/MotdTask.php b/CustomAlerts/src/CustomAlerts/MotdTask.php index e48277f..7a88a61 100644 --- a/CustomAlerts/src/CustomAlerts/MotdTask.php +++ b/CustomAlerts/src/CustomAlerts/MotdTask.php @@ -15,13 +15,13 @@ class MotdTask extends Task { /** @var CustomAlerts */ - private $plugin; + private CustomAlerts $plugin; public function __construct(CustomAlerts $plugin){ $this->plugin = $plugin; } - public function onRun($tick){ + public function onRun(): void{ CustomAlerts::getAPI()->updateMotd(); } From 571222c98f0c416a169a7b6b5e35c4233d21c280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=E1=BB=8Dc=20Lam?= Date: Mon, 7 Jun 2021 16:25:18 +0700 Subject: [PATCH 3/5] API 4 changes (part 2) --- .../src/CustomAlerts/CustomAlerts.php | 8 +- .../src/CustomAlerts/EventListener.php | 49 +- .../CustomAlertsOutdatedClientKickEvent.php | 12 +- .../CustomAlertsOutdatedServerKickEvent.php | 12 +- icon.png | Bin 0 -> 4348 bytes plugin.yml | 22 + resources/config.yml | 89 +++ src/CustomAlerts/Commands/Commands.php | 77 +++ src/CustomAlerts/CustomAlerts.php | 511 ++++++++++++++++++ src/CustomAlerts/EventListener.php | 208 +++++++ .../Events/CustomAlertsDeathEvent.php | 55 ++ src/CustomAlerts/Events/CustomAlertsEvent.php | 42 ++ .../CustomAlertsFullServerKickEvent.php | 39 ++ .../Events/CustomAlertsJoinEvent.php | 39 ++ .../Events/CustomAlertsMotdUpdateEvent.php | 22 + .../CustomAlertsOutdatedClientKickEvent.php | 39 ++ .../CustomAlertsOutdatedServerKickEvent.php | 39 ++ .../Events/CustomAlertsQuitEvent.php | 39 ++ .../Events/CustomAlertsWhitelistKickEvent.php | 39 ++ .../Events/CustomAlertsWorldChangeEvent.php | 68 +++ src/CustomAlerts/MotdTask.php | 31 ++ 21 files changed, 1401 insertions(+), 39 deletions(-) create mode 100644 icon.png create mode 100644 plugin.yml create mode 100644 resources/config.yml create mode 100644 src/CustomAlerts/Commands/Commands.php create mode 100644 src/CustomAlerts/CustomAlerts.php create mode 100644 src/CustomAlerts/EventListener.php create mode 100644 src/CustomAlerts/Events/CustomAlertsDeathEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsJoinEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsQuitEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php create mode 100644 src/CustomAlerts/MotdTask.php diff --git a/CustomAlerts/src/CustomAlerts/CustomAlerts.php b/CustomAlerts/src/CustomAlerts/CustomAlerts.php index a16fede..47cff73 100755 --- a/CustomAlerts/src/CustomAlerts/CustomAlerts.php +++ b/CustomAlerts/src/CustomAlerts/CustomAlerts.php @@ -142,9 +142,9 @@ public function isOutdatedClientMessageCustom() : bool { * * @return string */ - public function getOutdatedClientMessage(PlayerInfo $player){ + public function getOutdatedClientMessage(Player $player){ return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedClient"]["message"], array( - "PLAYER" => $player->getUsername(), + "PLAYER" => $player->getName(), "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), "TIME" => date($this->cfg["datetime-format"])))); @@ -166,9 +166,9 @@ public function isOutdatedServerMessageCustom() : bool { * * @return string */ - public function getOutdatedServerMessage(PlayerInfo $player){ + public function getOutdatedServerMessage(Player $player){ return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedServer"]["message"], array( - "PLAYER" => $player->getUsername(), + "PLAYER" => $player->getName(), "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), "TIME" => date($this->cfg["datetime-format"])))); diff --git a/CustomAlerts/src/CustomAlerts/EventListener.php b/CustomAlerts/src/CustomAlerts/EventListener.php index 15e75d2..b3dd99f 100755 --- a/CustomAlerts/src/CustomAlerts/EventListener.php +++ b/CustomAlerts/src/CustomAlerts/EventListener.php @@ -10,6 +10,7 @@ namespace CustomAlerts; +use pocketmine\event\entity\EntityTeleportEvent; use pocketmine\event\Listener; use pocketmine\event\player\PlayerDeathEvent; use pocketmine\event\player\PlayerJoinEvent; @@ -50,7 +51,7 @@ public function onReceivePacket(DataPacketReceiveEvent $event){ if($packet instanceof LoginPacket){ if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){ //Outdated Client message - $cevent = new CustomAlertsOutdatedClientKickEvent($player); + $cevent = new CustomAlertsOutdatedClientKickEvent($this->plugin, $player); if($this->plugin->isOutdatedClientMessageCustom()){ $cevent->setMessage($this->plugin->getOutdatedClientMessage($player)); } @@ -62,7 +63,7 @@ public function onReceivePacket(DataPacketReceiveEvent $event){ } }else if($packet->protocol > ProtocolInfo::CURRENT_PROTOCOL){ //Outdated Server message - $cevent = new CustomAlertsOutdatedServerKickEvent($player); + $cevent = new CustomAlertsOutdatedServerKickEvent($this->plugin, $player); if($this->plugin->isOutdatedServerMessageCustom()){ $cevent->setMessage($this->plugin->getOutdatedServerMessage($player)); } @@ -86,27 +87,25 @@ public function onPlayerPreLogin(PlayerPreLoginEvent $event){ if(count($this->plugin->getServer()->getOnlinePlayers()) - 1 < $this->plugin->getServer()->getMaxPlayers()){ //Whitelist Message if(!$this->plugin->getServer()->isWhitelisted($player->getUsername())){ - $cevent = new CustomAlertsWhitelistKickEvent($player); + $cevent = new CustomAlertsWhitelistKickEvent($this->plugin, $player); if($this->plugin->isWhitelistMessageCustom()){ $cevent->setMessage($this->plugin->getWhitelistMessage($player)); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); if($cevent->getMessage() != ""){ - $player->close("", $cevent->getMessage()); - $event->setCancelled(true); + $event->setKickReason(0, $cevent->getMessage()); return; } } }else{ //Full Server Message - $cevent = new CustomAlertsFullServerKickEvent($player); + $cevent = new CustomAlertsFullServerKickEvent($this->plugin, $player); if($this->plugin->isFullServerMessageCustom()){ - $cevent->setMesssage($this->plugin->getFullServerMessage($player)); + $cevent->setMessage($this->plugin->getFullServerMessage($player)); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); if($cevent->getMessage() != ""){ - $player->close("", $cevent->getMessage()); - $event->setCancelled(true); + $event->setKickReason(0, $cevent->getMessage()); return; } } @@ -122,7 +121,7 @@ public function onPlayerJoin(PlayerJoinEvent $event){ //Motd Update $this->plugin->updateMotd(); //Join Message - $cevent = new CustomAlertsJoinEvent($player); + $cevent = new CustomAlertsJoinEvent($this->plugin, $player); if(!$player->hasPlayedBefore() && $this->plugin->isFirstJoinMessageEnabled()){ $cevent->setMessage($this->plugin->getFirstJoinMessage($player)); }else if($this->plugin->isJoinMessageHidden()){ @@ -132,7 +131,7 @@ public function onPlayerJoin(PlayerJoinEvent $event){ }else{ $cevent->setMessage($event->getJoinMessage()); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); $event->setJoinMessage($cevent->getMessage()); } @@ -146,7 +145,7 @@ public function onPlayerQuit(PlayerQuitEvent $event){ //Motd Update $this->plugin->updateMotd(); //Quit Message - $cevent = new CustomAlertsQuitEvent($player); + $cevent = new CustomAlertsQuitEvent($this->plugin, $player); if($this->plugin->isQuitMessageHidden()){ $cevent->setMessage(""); }else if($this->plugin->isQuitMessageCustom()){ @@ -154,29 +153,33 @@ public function onPlayerQuit(PlayerQuitEvent $event){ }else{ $cevent->setMessage($event->getQuitMessage()); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); $event->setQuitMessage($cevent->getMessage()); } /** - * @param EntityLevelChangeEvent $event + * @param EntityTeleportEvent $event * * @priority HIGHEST */ - public function onWorldChange(EntityLevelChangeEvent $event){ + public function onWorldChange(EntityTeleportEvent $event){ + if ($event->getFrom()->getWorld() === $event->getTo()->getWorld()) + { + return; + } $entity = $event->getEntity(); //Check if the Entity is a Player if($entity instanceof Player){ $player = $entity; - $origin = $event->getOrigin(); - $target = $event->getTarget(); - $cevent = new CustomAlertsWorldChangeEvent($player, $origin, $target); + $origin = $event->getFrom()->getWorld(); + $target = $event->getTo()->getWorld(); + $cevent = new CustomAlertsWorldChangeEvent($this->plugin, $player, $origin, $target); if($this->plugin->isWorldChangeMessageEnabled()){ $cevent->setMessage($this->plugin->getWorldChangeMessage($player, $origin, $target)); }else{ $cevent->setMessage(""); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); if($cevent->getMessage() != ""){ Server::getInstance()->broadcastMessage($cevent->getMessage()); } @@ -193,7 +196,7 @@ public function onPlayerDeath(PlayerDeathEvent $event){ $player = $event->getEntity(); if($player instanceof Player){ $cause = $player->getLastDamageCause(); - $cevent = new CustomAlertsDeathEvent($player, $cause); + $cevent = new CustomAlertsDeathEvent($this->plugin, $player, $cause); if($this->plugin->isDeathMessageHidden($cause)){ $cevent->setMessage(""); }else if($this->plugin->isDeathMessageCustom($cause)){ @@ -201,7 +204,7 @@ public function onPlayerDeath(PlayerDeathEvent $event){ }else{ $cevent->setMessage($event->getDeathMessage()); } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); $event->setDeathMessage($cevent->getMessage()); } } diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php index 4b9f5e7..13139e1 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php @@ -10,20 +10,20 @@ namespace CustomAlerts\Events; -use pocketmine\player\PlayerInfo; +use pocketmine\player\Player; use pocketmine\plugin\Plugin; class CustomAlertsOutdatedClientKickEvent extends CustomAlertsEvent { public static $handlerList = null; - /** @var PlayerInfo $player */ + /** @var Player $player */ private $player; /** - * @param PlayerInfo $player + * @param Player $player */ - public function __construct(Plugin $plugin, PlayerInfo $player){ + public function __construct(Plugin $plugin, Player $player){ parent::__construct($plugin); $this->player = $player; } @@ -31,9 +31,9 @@ public function __construct(Plugin $plugin, PlayerInfo $player){ /** * Get outdated client kick event player * - * @return PlayerInfo + * @return Player */ - public function getPlayer() : PlayerInfo { + public function getPlayer() : Player { return $this->player; } } \ No newline at end of file diff --git a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php index dc5424a..47b7614 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php @@ -10,20 +10,20 @@ namespace CustomAlerts\Events; -use pocketmine\player\PlayerInfo; +use pocketmine\player\Player; use pocketmine\plugin\Plugin; class CustomAlertsOutdatedServerKickEvent extends CustomAlertsEvent { public static $handlerList = null; - /** @var PlayerInfo $player */ + /** @var Player $player */ private $player; /** - * @param PlayerInfo $player + * @param Player $player */ - public function __construct(Plugin $plugin, PlayerInfo $player){ + public function __construct(Plugin $plugin, Player $player){ parent::__construct($plugin); $this->player = $player; } @@ -31,9 +31,9 @@ public function __construct(Plugin $plugin, PlayerInfo $player){ /** * Get outdated server kick event player * - * @return PlayerInfo + * @return Player */ - public function getPlayer() : PlayerInfo { + public function getPlayer() : Player { return $this->player; } } \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..846394622757c557774ba40741a88997624ac373 GIT binary patch literal 4348 zcmVUX z1r^znWk@XDAGYE+l}cQ$#41 z%*<}@?9A@Wa;LjP+gDxJ(>vQc^Lu>z*WX{yh*FAj8N6bYMNn2iSpnrzRzOK5A+j(b z(lng!L5ABToDjJUI1J1K+JGc*4%pVM)X}mB41D=IupVfus|O(NDB_uf$e6MM2EMES z%+9@c^ThGLe3f8h)83}DvQ3n&Fj*@|%fYU>nh z_G|&D7)}a^4U_Bq1u$jD*FFa-?SY>x4BfG{1H*)b$WObKx})p?{a2>6%$&xI6|*wd zkFo%z!I0gavvwgsM?z$6Spoe6KQ#bd4{sqJSAgZzeBq-ks%tX$b;Nu(3PifJNZ<-<*mLUJJ~9=BM(uMiK-`hi9_$>w5rxkr1gUD@g7Nt)Rq+x&iWq!{`t@ghiGVy z`@@e@m0m5aYW<)2+kF5nz?)?S6c>Iq@E9O9wPp_26SVLOvVQlRNed>>e#b0;rm_Nx zmq&mJBgQoQV|`F07cOHjK={M1DneblxzJj0;~W0*dZG_LcxkZ)cAkTKE8bM z8b>;xA$jGh>Q>4qdw?zcHNdiLPgv_$PSa@@jF9Z_){dxT-LB;>MNv~$fL#s)@x@&; zg9R8W^em*5tTGqf+d=uh=o99;S& zz+ZJMwflqY0lO>WF_!(|9ib=HRLY{SPdU|TCoTGt?m5NR2eFEbGVV`^OdL!B#0Js& z8-dTQ{ge6Bj;OH(B;p7O6i)IzW4#Im{O)}A9MR4P!7vmJ^-x(E;3e94Z8KYV>*PBP z*g1!-A1DY)h_nJf2Sy!v`JqtoA;7hfE2x^Z$0!K{`cq^ z0Hb@5uz0W_=qX@S)0mo2d=3sA#l|ko#5BrLm$z1pn;#0w1jWX^E8XiEv;_WODc~aj zU3(UV;&a^34YM+55ap==601Z|2o_Rg6+OCrEDP671^CKfWzLL2fS+YR!)LlzF>~cC zJF}Icn6GdXd^5lT;H1OG-n&ZF^`DuA!ttO}THny_le{LrCi-W(AUgu-Ua^s&u~IGgq?1lW=gnRQbs zAR+Q>Rkg^UJ>Ny`$i{+^PQe=5`qPo3E4R*EH3y&`IFS%paZ@P3$-{np{m#i$*46u1 ze^@wD8kG>j3j)V1>~T})Gy+t;Ur_XZc)*u|=7pWJ0w`w7C-e-0qloxl0y@ zr>7RS#E@GJ!=sPir0ZE91i+wq?iiyv&SLxdnui_McK9hEAyNrcO`cK7!qP3h^EtLHF#UPFL&n*{8ArTd3nJ|H1d4;-D-QNtg6$$4neN@;X(v7F&W&$Q& zFEn9+XjZJZBXL0*tclXb(X8J}W1j!-JmF_J>Wz}a-VO@|Bt%97djX?)LThe+ z|C%DaLX(IgsILOEZAtbJd+UdoJ+B3hv~&eDj{;!CKyBt42oLxq8YR* z-fCsrDy5y{v{gthNFUSld(ziK?Clq*_|1kTGxs-s}w&Awel@DA{V6aw|GQhTslSUoqxyZ>$QdM3SVz~iioi3J^@$+ zY#Y)FNQle_xMy24@rI^cSRo+X^n)XBTdW8WL_VyELi#QdyLb{2<)6#ctEaTzDquf> z|5!q#Zb(K!&bu7`<^Bh6VfLC?j{9rThiDOvU)w!Lv}h$SDvAI>&UmqRU%^QB+Fv!b zA(T(so8Q!&u45@2dxcrpkG@VCQXb%7<$?AFsd*Um+)9=ex$` zU;D#NP&M#B*I5_D>=|IX%6e9MzV8!Z;!L<)H1$+mn+;@0v;V8#&A{sY3(c5^Uo}BNvkx}7`5J0Y6pyI+y z7^xl`atwn1`_%%UZTyJAy&n}Ey1HXXC?Fv+3W&{KWYRigoV^u93c!s%sp?Q=1oY=b zMXKP9!~jVr{jEFdaX?*aX9-3CPxi-Fmj3X7J%#}rcC>(Dpd6vu`*J+{a{|J{f^E_J zgDpSi%19y#Hl*O)AJX=fF2jCz-QX!8A@VHn#Y5k0qj_QrkVZ%&d9ag447*=6XcFyw z34$#RmW-<>^Fp{dxo>EyGmjO99KUuUNb;$>_X|KZ@K1xLfP~0woK3B@qem57_IoWp z;}s6%7y zsga(}m`d`e4vEO^`4G5WTZL1vDwJXu_FmVLN=dt;owz^QG!hOx`yq^)5!pqRp)INm zZ80T);j|6UvtB`qG@XuCDa@;^y(8&^!6y8*slPd?N;i+_Y;CP z0BrbJHAZ!PXz0o3do-94AFfDjn3B{5VwYdVuzE94@?H;#A6^nwXrE)elPOwKsw^|x%gSaNBeYtxTY-L@c~eoG~J_eW21 z;U|Zgu|`GYd?Xy~kl&w9DvlgfoPQU9c(+o01L*;u!hH>x5zonHiL!E|7&p4{K#~-s z8k{vm`VvO^VxA@Uz7zKqK7bL6GiJk+)X)A{ampdc8zQo#0A@_scwgqj%>xZVp90Le z9Td$txxyB)G77;7H+6yQ3pF8ynLJDE`kTJ+p~e<}pmFSdf0>;RB2`r~49#5(<86NQ zQ70eX{}ANtmwffk)xy2IT2W?9vnUN#3_K8{vi*7llyi=S(RUuhy5tiXIi4S%fZYD; zP}h3tyCw}SJ`m&wBY7!g3F!A}TeJuS3k@GYnydo_u1l0O;M@BQ|%Foq)5^kErWe;fJk`C&=5~ z#k0ZJFOe%l9ZBOxLqpO8Gu?XQX;DQ@;yO z4SSEzeXTgAp8Y~;baNCa3Q`JCRV}RT5`dM2c>dTZ0zdnJn$JFJFn8Gq+sBkf5qtOf z1W?LiUBXQL7K1DK^sW@4e@!P@V>9+J-3AU zVA&dRlQz#MM0S?MhB^kvfsA*uHe!-|~vz)<-i zse9b>4|c6tY)ks`2|K0fo~x8+PpD@;Q9fg;;tVLtr$6BQ@sr@p>r?~#fNz)L0lR?d zo!bqNSQcVDA!a7?rR>$P4o61%lDzT$Sw6pU1K(k%?Wi-%$j0YPr* z+Lr0KEiwcpM7{w$W}29-Q>t>I$F2IYN@bGjhIIuq-HVy-^-qWttSXyKDU`j^Yte+d ziU2n^kf`w}W6G_tD?+(1s30FNS^ zC5P$@IH#pm+_k~Bgvi`b3UETFw#q8_@Fv3!B{MMN^8ySf02V8WVOULp4V`Ud#ISB1(d$v&GU*@qi)-oay8 z8LmD|62m`FtHN!X3Yq{5WwQJzX)9oY^;1Nlb5wC9jA#;S>lByYV+YU-bQbb}E?~hu z_lon@DIcB(ZP&6&IUZ5ODhl?g(qO41oL0f!D3oO3VRFc8J2MA&1wxSXFxnd-*v#RfGNOP;6?1sr+%v#zqX2SZj|p0*6&7XNBs`K72r3aGGgU2u*E2g qpsawh0?MVVfU*M0rL2GtWchz2#oaD=qUlut0000plugin = $plugin; + $this->setPermission("customalerts.help"); + } + + public function execute(CommandSender $sender, string $commandLabel, array $args){ + if(isset($args[0])){ + $args[0] = strtolower($args[0]); + switch($args[0]){ + case "help": + goto help; + case "info": + if($sender->hasPermission("customalerts.info")){ + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aCustomAlerts &dv" . $this->plugin->getDescription()->getVersion() . "&a developed by &dEvolSoft")); + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aWebsite &d" . $this->plugin->getDescription()->getWebsite())); + break; + } + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + break; + case "reload": + if($sender->hasPermission("customalerts.reload")){ + $this->plugin->reloadConfig(); + $this->plugin->cfg = $this->plugin->getConfig()->getAll(); + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aConfiguration Reloaded.")); + break; + } + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + break; + default: + if($sender->hasPermission("customalerts")){ + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&cSubcommand &a" . $args[0] . " &cnot found. Use &a/calerts help &cto show available commands")); + break; + } + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + break; + } + return; + } + help: + if($sender->hasPermission("customalerts.help")){ + $sender->sendMessage(TextFormat::colorize("&b-- &aAvailable Commands &b--")); + $sender->sendMessage(TextFormat::colorize("&d/calerts help &b-&a Show help about this plugin")); + $sender->sendMessage(TextFormat::colorize("&d/calerts info &b-&a Show info about this plugin")); + $sender->sendMessage(TextFormat::colorize("&d/calerts reload &b-&a Reload the config")); + }else{ + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + } + return; + } +} diff --git a/src/CustomAlerts/CustomAlerts.php b/src/CustomAlerts/CustomAlerts.php new file mode 100644 index 0000000..a16fede --- /dev/null +++ b/src/CustomAlerts/CustomAlerts.php @@ -0,0 +1,511 @@ +getDataFolder()); + $this->saveDefaultConfig(); + $this->cfg = $this->getConfig()->getAll(); + $this->getServer()->getCommandMap()->register("customalerts", new Commands($this)); + $this->getServer()->getPluginManager()->registerEvents(new EventListener($this), $this); + $this->getScheduler()->scheduleRepeatingTask(new MotdTask($this), 20); + } + + /** + * Replace variables inside a string + * + * @param string $str + * @param array $vars + * + * @return string + */ + public function replaceVars($str, array $vars){ + foreach($vars as $key => $value){ + $str = str_replace("{" . $key . "}", $value, $str); + } + return $str; + } + + //API Functions + + /** + * Get CustomAlerts API + * + * @return CustomAlerts + */ + public static function getAPI(){ + return self::$instance; + } + + /** + * Get CustomAlerts version + * + * @return string + */ + public function getVersion(){ + return $this->getVersion(); + } + + /** + * Get CustomAlerts API version + * + * @return string + */ + public function getAPIVersion(){ + return self::API_VERSION; + } + + /** + * Check if motd is custom + * + * @return bool + */ + public function isMotdCustom() : bool { + return $this->cfg["Motd"]["custom"]; + } + + /** + * Get motd message + * + * @return string + */ + public function getMotdMessage(){ + return TextFormat::colorize($this->replaceVars($this->cfg["Motd"]["message"], array( + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + public function updateMotd(){ + $cevent = new CustomAlertsMotdUpdateEvent(); + if($this->isMotdCustom()){ + $cevent->setMessage($this->getMotdMessage()); + }else{ + $cevent->setMessage($this->getServer()->getMotd()); + } + $cevent->call(); + $this->getServer()->getNetwork()->setName($cevent->getMessage()); + } + + /** + * Check if outdated client message is custom + * + * @return bool + */ + public function isOutdatedClientMessageCustom() : bool { + return $this->cfg["OutdatedClient"]["custom"]; + } + + /** + * Get outdated client message + * + * @param Player + * + * @return string + */ + public function getOutdatedClientMessage(PlayerInfo $player){ + return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedClient"]["message"], array( + "PLAYER" => $player->getUsername(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if outdated server message is custom + * + * @return bool + */ + public function isOutdatedServerMessageCustom() : bool { + return $this->cfg["OutdatedServer"]["custom"]; + } + + /** + * Get outdated server message + * + * @param Player + * + * @return string + */ + public function getOutdatedServerMessage(PlayerInfo $player){ + return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedServer"]["message"], array( + "PLAYER" => $player->getUsername(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if whitelist message is custom + * + * @return bool + */ + public function isWhitelistMessageCustom() : bool { + return $this->cfg["WhitelistedServer"]["custom"]; + } + + /** + * Get whitelist message + * + * @param Player + * + * @return string + */ + public function getWhitelistMessage(PlayerInfo $player){ + return TextFormat::colorize($this->replaceVars($this->cfg["WhitelistedServer"]["message"], array( + "PLAYER" => $player->getUsername(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if full server message is custom + * + * @return bool + */ + public function isFullServerMessageCustom() : bool { + $cfg = $this->getConfig()->getAll(); + return $cfg["FullServer"]["custom"]; + } + + /** + * Get full server message + * + * @param Player $player + * + * @return string + */ + public function getFullServerMessage(PlayerInfo $player){ + return TextFormat::colorize($this->replaceVars($this->cfg["FullServer"]["message"], array( + "PLAYER" => $player->getUsername(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if first join message is enabled + * + * @return bool + */ + public function isFirstJoinMessageEnabled() : bool { + return $this->cfg["FirstJoin"]["enable"]; + } + + /** + * Get first join message + * + * @param Player $player + * + * @return string + */ + public function getFirstJoinMessage(Player $player){ + return TextFormat::colorize($this->replaceVars($this->cfg["FirstJoin"]["message"], array( + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if join message is custom + * + * @return bool + */ + public function isJoinMessageCustom() : bool { + return $this->cfg["Join"]["custom"]; + } + + /** + * Check if join message is hidden + * + * @return bool + */ + public function isJoinMessageHidden() : bool { + return $this->cfg["Join"]["hide"]; + } + + /** + * Get join message + * + * @param Player $player + * + * @return string + */ + public function getJoinMessage(Player $player){ + return TextFormat::colorize($this->replaceVars($this->cfg["Join"]["message"], array( + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if quit message is custom + * + * @return bool + */ + public function isQuitMessageCustom(){ + return $this->cfg["Quit"]["custom"]; + } + + /** + * Check if quit message is hidden + * + * @return bool + */ + public function isQuitMessageHidden(){ + return $this->cfg["Quit"]["hide"]; + } + + /** + * Get default quit message + * + * @param Player $player + * + * @return string + */ + public function getQuitMessage(Player $player){ + return TextFormat::colorize($this->replaceVars($this->cfg["Quit"]["message"], array( + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if world change message is enabled + * + * @return bool + */ + public function isWorldChangeMessageEnabled(){ + return $this->cfg["WorldChange"]["enable"]; + } + + /** + * Get world change message + * + * @param Player $player + * @param World $origin + * @param World $target + * + * @return string + */ + public function getWorldChangeMessage(Player $player, World $origin, World $target){ + return TextFormat::colorize($this->replaceVars($this->cfg["WorldChange"]["message"], array( + "ORIGIN" => $origin->getDisplayName(), + "TARGET" => $target->getDisplayName(), + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])))); + } + + /** + * Check if death messages are custom + * @return bool + */ + public function isDeathMessageCustom(EntityDamageEvent $cause = null){ + if(!$cause){ + return $this->cfg["Death"]["custom"]; + } + switch($cause->getCause()){ + case EntityDamageEvent::CAUSE_CONTACT: + return $this->cfg["Death"]["death-contact-message"]["custom"]; + case EntityDamageEvent::CAUSE_ENTITY_ATTACK: + return $this->cfg["Death"]["kill-message"]["custom"]; + case EntityDamageEvent::CAUSE_PROJECTILE: + return $this->cfg["Death"]["death-projectile-message"]["custom"]; + case EntityDamageEvent::CAUSE_SUFFOCATION: + return $this->cfg["Death"]["death-suffocation-message"]["custom"]; + case EntityDamageEvent::CAUSE_FALL: + return $this->cfg["Death"]["death-fall-message"]["custom"]; + case EntityDamageEvent::CAUSE_FIRE: + return $this->cfg["Death"]["death-fire-message"]["custom"]; + case EntityDamageEvent::CAUSE_FIRE_TICK: + return $this->cfg["Death"]["death-on-fire-message"]["custom"]; + case EntityDamageEvent::CAUSE_LAVA: + return $this->cfg["Death"]["death-lava-message"]["custom"]; + case EntityDamageEvent::CAUSE_DROWNING: + return $this->cfg["Death"]["death-drowning-message"]["custom"]; + case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: + case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: + return $this->cfg["Death"]["death-explosion-message"]["custom"]; + case EntityDamageEvent::CAUSE_VOID: + return $this->cfg["Death"]["death-void-message"]["custom"]; + case EntityDamageEvent::CAUSE_SUICIDE: + return $this->cfg["Death"]["death-suicide-message"]["custom"]; + case EntityDamageEvent::CAUSE_MAGIC: + return $this->cfg["Death"]["death-magic-message"]["custom"]; + default: + return $this->cfg["Death"]["custom"]; + } + } + + /** + * Check if death messages are hidden + * + * @param EntityDamageEvent $cause + * + * @return bool + */ + public function isDeathMessageHidden(EntityDamageEvent $cause = null){ + if(!$cause){ + return $this->cfg["Death"]["hide"]; + } + switch($cause->getCause()){ + case EntityDamageEvent::CAUSE_CONTACT: + return $this->cfg["Death"]["death-contact-message"]["hide"]; + case EntityDamageEvent::CAUSE_ENTITY_ATTACK: + return $this->cfg["Death"]["kill-message"]["hide"]; + case EntityDamageEvent::CAUSE_PROJECTILE: + return $this->cfg["Death"]["death-projectile-message"]["hide"]; + case EntityDamageEvent::CAUSE_SUFFOCATION: + return $this->cfg["Death"]["death-suffocation-message"]["hide"]; + case EntityDamageEvent::CAUSE_FALL: + return $this->cfg["Death"]["death-fall-message"]["hide"]; + case EntityDamageEvent::CAUSE_FIRE: + return $this->cfg["Death"]["death-fire-message"]["hide"]; + case EntityDamageEvent::CAUSE_FIRE_TICK: + return $this->cfg["Death"]["death-on-fire-message"]["hide"]; + case EntityDamageEvent::CAUSE_LAVA: + return $this->cfg["Death"]["death-lava-message"]["hide"]; + case EntityDamageEvent::CAUSE_DROWNING: + return $this->cfg["Death"]["death-drowning-message"]["hide"]; + case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: + case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: + return $this->cfg["Death"]["death-explosion-message"]["hide"]; + case EntityDamageEvent::CAUSE_VOID: + return $this->cfg["Death"]["death-void-message"]["hide"]; + case EntityDamageEvent::CAUSE_SUICIDE: + return $this->cfg["Death"]["death-suicide-message"]["hide"]; + case EntityDamageEvent::CAUSE_MAGIC: + return $this->cfg["Death"]["death-magic-message"]["hide"]; + default: + return $this->cfg["Death"]["hide"]; + } + } + + /** + * Get death message related to the specified cause + * + * @param Player $player + * @param EntityDamageEvent $cause + * + * @return string + */ + public function getDeathMessage(Player $player, EntityDamageEvent $cause = null){ + $array = array( + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])); + if(!$cause){ + $message = $this->cfg["Death"]["message"]; + }else{ + switch($cause->getCause()){ + case EntityDamageEvent::CAUSE_CONTACT: + $message = $this->cfg["Death"]["death-contact-message"]["message"]; + if($cause instanceof EntityDamageByBlockEvent){ + $array["BLOCK"] = $cause->getDamager()->getName(); + break; + } + $array["BLOCK"] = "Unknown"; + break; + case EntityDamageEvent::CAUSE_ENTITY_ATTACK: + $message = $this->cfg["Death"]["kill-message"]["message"]; + $killer = $cause->getDamager(); + if($killer instanceof Living){ + $array["KILLER"] = $killer->getName(); + break; + } + $array["KILLER"] = "Unknown"; + break; + case EntityDamageEvent::CAUSE_PROJECTILE: + $message = $this->cfg["Death"]["death-projectile-message"]["message"]; + $killer = $cause->getDamager(); + if($killer instanceof Living){ + $array["KILLER"] = $killer->getName(); + break; + } + $array["KILLER"] = "Unknown"; + break; + case EntityDamageEvent::CAUSE_SUFFOCATION: + $message = $this->cfg["Death"]["death-suffocation-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_FALL: + $message = $this->cfg["Death"]["death-fall-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_FIRE: + $message = $this->cfg["Death"]["death-fire-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_FIRE_TICK: + $message = $this->cfg["Death"]["death-on-fire-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_LAVA: + $message = $this->cfg["Death"]["death-lava-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_DROWNING: + $message = $this->cfg["Death"]["death-drowning-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: + case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: + $message = $this->cfg["Death"]["death-explosion-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_VOID: + $message = $this->cfg["Death"]["death-void-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_SUICIDE: + $message = $this->cfg["Death"]["death-suicide-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_MAGIC: + $message = $this->cfg["Death"]["death-magic-message"]["message"]; + break; + default: + $message = $this->cfg["Death"]["message"]; + break; + } + } + return TextFormat::colorize($this->replaceVars($message, $array)); + } +} diff --git a/src/CustomAlerts/EventListener.php b/src/CustomAlerts/EventListener.php new file mode 100644 index 0000000..15e75d2 --- /dev/null +++ b/src/CustomAlerts/EventListener.php @@ -0,0 +1,208 @@ +plugin = $plugin; + } + + /** + * @param DataPacketReceiveEvent $event + * + * @priority HIGHEST + */ + public function onReceivePacket(DataPacketReceiveEvent $event){ + $origin = $event->getOrigin(); + $player = $origin->getPlayer(); + $packet = $event->getPacket(); + if($packet instanceof LoginPacket){ + if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){ + //Outdated Client message + $cevent = new CustomAlertsOutdatedClientKickEvent($player); + if($this->plugin->isOutdatedClientMessageCustom()){ + $cevent->setMessage($this->plugin->getOutdatedClientMessage($player)); + } + $cevent->call(); + if($cevent->getMessage() != ""){ + $origin->disconnect($cevent->getMessage()); + $event->cancel(); + return; + } + }else if($packet->protocol > ProtocolInfo::CURRENT_PROTOCOL){ + //Outdated Server message + $cevent = new CustomAlertsOutdatedServerKickEvent($player); + if($this->plugin->isOutdatedServerMessageCustom()){ + $cevent->setMessage($this->plugin->getOutdatedServerMessage($player)); + } + $cevent->call(); + if($cevent->getMessage() != ""){ + $origin->disconnect($cevent->getMessage()); + $event->cancel(); + return; + } + } + } + } + + /** + * @param PlayerPreLoginEvent $event + * + * @priority HIGHEST + */ + public function onPlayerPreLogin(PlayerPreLoginEvent $event){ + $player = $event->getPlayerInfo(); + if(count($this->plugin->getServer()->getOnlinePlayers()) - 1 < $this->plugin->getServer()->getMaxPlayers()){ + //Whitelist Message + if(!$this->plugin->getServer()->isWhitelisted($player->getUsername())){ + $cevent = new CustomAlertsWhitelistKickEvent($player); + if($this->plugin->isWhitelistMessageCustom()){ + $cevent->setMessage($this->plugin->getWhitelistMessage($player)); + } + $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + if($cevent->getMessage() != ""){ + $player->close("", $cevent->getMessage()); + $event->setCancelled(true); + return; + } + } + }else{ + //Full Server Message + $cevent = new CustomAlertsFullServerKickEvent($player); + if($this->plugin->isFullServerMessageCustom()){ + $cevent->setMesssage($this->plugin->getFullServerMessage($player)); + } + $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + if($cevent->getMessage() != ""){ + $player->close("", $cevent->getMessage()); + $event->setCancelled(true); + return; + } + } + } + + /** + * @param PlayerJoinEvent $event + * + * @priority HIGHEST + */ + public function onPlayerJoin(PlayerJoinEvent $event){ + $player = $event->getPlayer(); + //Motd Update + $this->plugin->updateMotd(); + //Join Message + $cevent = new CustomAlertsJoinEvent($player); + if(!$player->hasPlayedBefore() && $this->plugin->isFirstJoinMessageEnabled()){ + $cevent->setMessage($this->plugin->getFirstJoinMessage($player)); + }else if($this->plugin->isJoinMessageHidden()){ + $cevent->setMessage(""); + }else if($this->plugin->isJoinMessageCustom()){ + $cevent->setMessage($this->plugin->getJoinMessage($player)); + }else{ + $cevent->setMessage($event->getJoinMessage()); + } + $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $event->setJoinMessage($cevent->getMessage()); + } + + /** + * @param PlayerQuitEvent $event + * + * @priority HIGHEST + */ + public function onPlayerQuit(PlayerQuitEvent $event){ + $player = $event->getPlayer(); + //Motd Update + $this->plugin->updateMotd(); + //Quit Message + $cevent = new CustomAlertsQuitEvent($player); + if($this->plugin->isQuitMessageHidden()){ + $cevent->setMessage(""); + }else if($this->plugin->isQuitMessageCustom()){ + $cevent->setMessage($this->plugin->getQuitMessage($player)); + }else{ + $cevent->setMessage($event->getQuitMessage()); + } + $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $event->setQuitMessage($cevent->getMessage()); + } + + /** + * @param EntityLevelChangeEvent $event + * + * @priority HIGHEST + */ + public function onWorldChange(EntityLevelChangeEvent $event){ + $entity = $event->getEntity(); + //Check if the Entity is a Player + if($entity instanceof Player){ + $player = $entity; + $origin = $event->getOrigin(); + $target = $event->getTarget(); + $cevent = new CustomAlertsWorldChangeEvent($player, $origin, $target); + if($this->plugin->isWorldChangeMessageEnabled()){ + $cevent->setMessage($this->plugin->getWorldChangeMessage($player, $origin, $target)); + }else{ + $cevent->setMessage(""); + } + $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + if($cevent->getMessage() != ""){ + Server::getInstance()->broadcastMessage($cevent->getMessage()); + } + } + } + + + /** + * @param PlayerDeathEvent $event + * + * @priority HIGHEST + */ + public function onPlayerDeath(PlayerDeathEvent $event){ + $player = $event->getEntity(); + if($player instanceof Player){ + $cause = $player->getLastDamageCause(); + $cevent = new CustomAlertsDeathEvent($player, $cause); + if($this->plugin->isDeathMessageHidden($cause)){ + $cevent->setMessage(""); + }else if($this->plugin->isDeathMessageCustom($cause)){ + $cevent->setMessage($this->plugin->getDeathMessage($player, $cause)); + }else{ + $cevent->setMessage($event->getDeathMessage()); + } + $this->plugin->getServer()->getPluginManager()->callEvent($cevent); + $event->setDeathMessage($cevent->getMessage()); + } + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsDeathEvent.php b/src/CustomAlerts/Events/CustomAlertsDeathEvent.php new file mode 100644 index 0000000..ed20e83 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsDeathEvent.php @@ -0,0 +1,55 @@ +player = $player; + $this->cause = $cause; + } + + /** + * Get death event player + * + * @return Player + */ + public function getPlayer() : Player { + return $this->player; + } + + /** + * Get death event cause + * + * @return EntityDamageEvent|null + */ + public function getCause() : ?EntityDamageEvent { + return $this->cause; + } + +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsEvent.php b/src/CustomAlerts/Events/CustomAlertsEvent.php new file mode 100644 index 0000000..62f4d61 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsEvent.php @@ -0,0 +1,42 @@ +message; + } + + /** + * Set event message + * + * @param string $message + */ + public function setMessage($message){ + $this->message = $message; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php b/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php new file mode 100644 index 0000000..3e82798 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get full server kick event player + * + * @return PlayerInfo + */ + public function getPlayerInfo() : PlayerInfo { + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsJoinEvent.php b/src/CustomAlerts/Events/CustomAlertsJoinEvent.php new file mode 100644 index 0000000..a95e542 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsJoinEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get join event player + * + * @return Player + */ + public function getPlayer() : Player { + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php b/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php new file mode 100644 index 0000000..1e74e7d --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php @@ -0,0 +1,22 @@ +player = $player; + } + + /** + * Get outdated client kick event player + * + * @return PlayerInfo + */ + public function getPlayer() : PlayerInfo { + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php b/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php new file mode 100644 index 0000000..dc5424a --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get outdated server kick event player + * + * @return PlayerInfo + */ + public function getPlayer() : PlayerInfo { + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsQuitEvent.php b/src/CustomAlerts/Events/CustomAlertsQuitEvent.php new file mode 100644 index 0000000..3ff85b8 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsQuitEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get quit event player + * + * @return Player + */ + public function getPlayer() : Player { + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php b/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php new file mode 100644 index 0000000..c848e7e --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get whitelist kick event player + * + * @return PlayerInfo + */ + public function getPlayer() : PlayerInfo { + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php b/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php new file mode 100644 index 0000000..1157814 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php @@ -0,0 +1,68 @@ +player = $player; + $this->origin = $origin; + $this->target = $target; + } + + /** + * Get world change event player + * + * @return Player + */ + public function getPlayer() : Player { + return $this->player; + } + + /** + * Get origin level + * + * @return World + */ + public function getOrigin() : World { + return $this->origin; + } + + /** + * Get target level + * + * @return World + */ + public function getTarget() : World { + return $this->target; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/MotdTask.php b/src/CustomAlerts/MotdTask.php new file mode 100644 index 0000000..7a88a61 --- /dev/null +++ b/src/CustomAlerts/MotdTask.php @@ -0,0 +1,31 @@ +plugin = $plugin; + } + + public function onRun(): void{ + CustomAlerts::getAPI()->updateMotd(); + } + + public function getPlugin(){ + return $this->plugin; + } +} From 068037cee210c7b2c0926059c54c8c77609ce823 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=E1=BB=8Dc=20Lam?= Date: Mon, 7 Jun 2021 16:31:29 +0700 Subject: [PATCH 4/5] Final fix. --- .../src/CustomAlerts/CustomAlerts.php | 2 +- plugin.yml | 22 - resources/config.yml | 89 --- src/CustomAlerts/Commands/Commands.php | 77 --- src/CustomAlerts/CustomAlerts.php | 511 ------------------ src/CustomAlerts/EventListener.php | 208 ------- .../Events/CustomAlertsDeathEvent.php | 55 -- src/CustomAlerts/Events/CustomAlertsEvent.php | 42 -- .../CustomAlertsFullServerKickEvent.php | 39 -- .../Events/CustomAlertsJoinEvent.php | 39 -- .../Events/CustomAlertsMotdUpdateEvent.php | 22 - .../CustomAlertsOutdatedClientKickEvent.php | 39 -- .../CustomAlertsOutdatedServerKickEvent.php | 39 -- .../Events/CustomAlertsQuitEvent.php | 39 -- .../Events/CustomAlertsWhitelistKickEvent.php | 39 -- .../Events/CustomAlertsWorldChangeEvent.php | 68 --- src/CustomAlerts/MotdTask.php | 31 -- 17 files changed, 1 insertion(+), 1360 deletions(-) delete mode 100644 plugin.yml delete mode 100644 resources/config.yml delete mode 100644 src/CustomAlerts/Commands/Commands.php delete mode 100644 src/CustomAlerts/CustomAlerts.php delete mode 100644 src/CustomAlerts/EventListener.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsDeathEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsJoinEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsQuitEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php delete mode 100644 src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php delete mode 100644 src/CustomAlerts/MotdTask.php diff --git a/CustomAlerts/src/CustomAlerts/CustomAlerts.php b/CustomAlerts/src/CustomAlerts/CustomAlerts.php index 47cff73..38d5ef6 100755 --- a/CustomAlerts/src/CustomAlerts/CustomAlerts.php +++ b/CustomAlerts/src/CustomAlerts/CustomAlerts.php @@ -116,7 +116,7 @@ public function getMotdMessage(){ } public function updateMotd(){ - $cevent = new CustomAlertsMotdUpdateEvent(); + $cevent = new CustomAlertsMotdUpdateEvent($this); if($this->isMotdCustom()){ $cevent->setMessage($this->getMotdMessage()); }else{ diff --git a/plugin.yml b/plugin.yml deleted file mode 100644 index f97fbed..0000000 --- a/plugin.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: CustomAlerts -main: CustomAlerts\CustomAlerts -version: 2.1 -api: [4.0.0] -load: STARTUP -author: EvolSoft -description: Customize or hide alerts (join/leave messages, whitelist messages, outdated server/client messages, etc...) plugin -website: https://www.evolsoft.tk - -permissions: - customalerts: - default: op - description: CustomAlerts permission tree. - customalerts.help: - default: op - description: let player read CustomAlerts commands help. - customalerts.info: - default: op - description: Let player read info about CustomAlerts. - customalerts.reload: - default: op - description: Let player reload CustomAlerts configuration. diff --git a/resources/config.yml b/resources/config.yml deleted file mode 100644 index 3fd2979..0000000 --- a/resources/config.yml +++ /dev/null @@ -1,89 +0,0 @@ ---- -datetime-format: "H:i:s" -Motd: - update-timeout: 1 - custom: true - message: "&e[{TIME}] &aWelcome to your server! &n&b[{TOTALPLAYERS}/{MAXPLAYERS}]" -OutdatedClient: - custom: true - message: "&cYour MCPE client is outdated!" -OutdatedServer: - custom: true - message: "&cOops! Server outdated!" -WhitelistedServer: - custom: true - message: "&c&oThis Server is whitelisted!" -FullServer: - custom: true - message: "&e{PLAYER}&b, The Server is full &c[{TOTALPLAYERS}/{MAXPLAYERS}]&b!\n&l&dTry to join later :)" -FirstJoin: - enable: true - message: "&2[{TIME}] &a{PLAYER}&d joined the game for the first time." -Join: - hide: false - custom: true - message: "&2[{TIME}] &a{PLAYER}&e joined the game." -Quit: - hide: true - custom: false - message: "&4[{TIME}] &c{PLAYER}&e has left the game" -WorldChange: - enable: true - message: "&2[{TIME}] &a{PLAYER}&e moved from &c{ORIGIN}&e to &a{TARGET}" -Death: - hide: false - custom: true - message: "&c{PLAYER} died" - death-contact-message: - hide: false - custom: true - message: "&cOops! {PLAYER} was killed by {BLOCK}" - kill-message: - hide: false - custom: true - message: "&9{PLAYER} &ewas killed by &c{KILLER}" - death-projectile-message: - hide: false - custom: true - message: "&c{PLAYER} was killed by {KILLER} by arrow" - death-suffocation-message: - hide: false - custom: true - message: "&c{PLAYER} suffocated" - death-fall-message: - hide: false - custom: true - message: "&c{PLAYER} fell from a high place" - death-fire-message: - hide: false - custom: true - message: "&c{PLAYER} went up in flames" - death-on-fire-message: - hide: false - custom: true - message: "&c{PLAYER} burned" - death-lava-message: - hide: false - custom: true - message: "&c{PLAYER} tried to swim in lava" - death-drowning-message: - hide: false - custom: true - message: "&c{PLAYER} drowned" - death-explosion-message: - hide: false - custom: true - message: "&c{PLAYER} exploded" - death-void-message: - hide: false - custom: true - message: "&c{PLAYER} fell into the void" - death-suicide-message: - hide: false - custom: true - message: "&c{PLAYER} committed suicide" - death-magic-message: - hide: false - custom: true - message: "&c{PLAYER} was killed by a spell" -... diff --git a/src/CustomAlerts/Commands/Commands.php b/src/CustomAlerts/Commands/Commands.php deleted file mode 100644 index b475041..0000000 --- a/src/CustomAlerts/Commands/Commands.php +++ /dev/null @@ -1,77 +0,0 @@ -plugin = $plugin; - $this->setPermission("customalerts.help"); - } - - public function execute(CommandSender $sender, string $commandLabel, array $args){ - if(isset($args[0])){ - $args[0] = strtolower($args[0]); - switch($args[0]){ - case "help": - goto help; - case "info": - if($sender->hasPermission("customalerts.info")){ - $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aCustomAlerts &dv" . $this->plugin->getDescription()->getVersion() . "&a developed by &dEvolSoft")); - $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aWebsite &d" . $this->plugin->getDescription()->getWebsite())); - break; - } - $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); - break; - case "reload": - if($sender->hasPermission("customalerts.reload")){ - $this->plugin->reloadConfig(); - $this->plugin->cfg = $this->plugin->getConfig()->getAll(); - $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aConfiguration Reloaded.")); - break; - } - $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); - break; - default: - if($sender->hasPermission("customalerts")){ - $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&cSubcommand &a" . $args[0] . " &cnot found. Use &a/calerts help &cto show available commands")); - break; - } - $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); - break; - } - return; - } - help: - if($sender->hasPermission("customalerts.help")){ - $sender->sendMessage(TextFormat::colorize("&b-- &aAvailable Commands &b--")); - $sender->sendMessage(TextFormat::colorize("&d/calerts help &b-&a Show help about this plugin")); - $sender->sendMessage(TextFormat::colorize("&d/calerts info &b-&a Show info about this plugin")); - $sender->sendMessage(TextFormat::colorize("&d/calerts reload &b-&a Reload the config")); - }else{ - $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); - } - return; - } -} diff --git a/src/CustomAlerts/CustomAlerts.php b/src/CustomAlerts/CustomAlerts.php deleted file mode 100644 index a16fede..0000000 --- a/src/CustomAlerts/CustomAlerts.php +++ /dev/null @@ -1,511 +0,0 @@ -getDataFolder()); - $this->saveDefaultConfig(); - $this->cfg = $this->getConfig()->getAll(); - $this->getServer()->getCommandMap()->register("customalerts", new Commands($this)); - $this->getServer()->getPluginManager()->registerEvents(new EventListener($this), $this); - $this->getScheduler()->scheduleRepeatingTask(new MotdTask($this), 20); - } - - /** - * Replace variables inside a string - * - * @param string $str - * @param array $vars - * - * @return string - */ - public function replaceVars($str, array $vars){ - foreach($vars as $key => $value){ - $str = str_replace("{" . $key . "}", $value, $str); - } - return $str; - } - - //API Functions - - /** - * Get CustomAlerts API - * - * @return CustomAlerts - */ - public static function getAPI(){ - return self::$instance; - } - - /** - * Get CustomAlerts version - * - * @return string - */ - public function getVersion(){ - return $this->getVersion(); - } - - /** - * Get CustomAlerts API version - * - * @return string - */ - public function getAPIVersion(){ - return self::API_VERSION; - } - - /** - * Check if motd is custom - * - * @return bool - */ - public function isMotdCustom() : bool { - return $this->cfg["Motd"]["custom"]; - } - - /** - * Get motd message - * - * @return string - */ - public function getMotdMessage(){ - return TextFormat::colorize($this->replaceVars($this->cfg["Motd"]["message"], array( - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - public function updateMotd(){ - $cevent = new CustomAlertsMotdUpdateEvent(); - if($this->isMotdCustom()){ - $cevent->setMessage($this->getMotdMessage()); - }else{ - $cevent->setMessage($this->getServer()->getMotd()); - } - $cevent->call(); - $this->getServer()->getNetwork()->setName($cevent->getMessage()); - } - - /** - * Check if outdated client message is custom - * - * @return bool - */ - public function isOutdatedClientMessageCustom() : bool { - return $this->cfg["OutdatedClient"]["custom"]; - } - - /** - * Get outdated client message - * - * @param Player - * - * @return string - */ - public function getOutdatedClientMessage(PlayerInfo $player){ - return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedClient"]["message"], array( - "PLAYER" => $player->getUsername(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if outdated server message is custom - * - * @return bool - */ - public function isOutdatedServerMessageCustom() : bool { - return $this->cfg["OutdatedServer"]["custom"]; - } - - /** - * Get outdated server message - * - * @param Player - * - * @return string - */ - public function getOutdatedServerMessage(PlayerInfo $player){ - return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedServer"]["message"], array( - "PLAYER" => $player->getUsername(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if whitelist message is custom - * - * @return bool - */ - public function isWhitelistMessageCustom() : bool { - return $this->cfg["WhitelistedServer"]["custom"]; - } - - /** - * Get whitelist message - * - * @param Player - * - * @return string - */ - public function getWhitelistMessage(PlayerInfo $player){ - return TextFormat::colorize($this->replaceVars($this->cfg["WhitelistedServer"]["message"], array( - "PLAYER" => $player->getUsername(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if full server message is custom - * - * @return bool - */ - public function isFullServerMessageCustom() : bool { - $cfg = $this->getConfig()->getAll(); - return $cfg["FullServer"]["custom"]; - } - - /** - * Get full server message - * - * @param Player $player - * - * @return string - */ - public function getFullServerMessage(PlayerInfo $player){ - return TextFormat::colorize($this->replaceVars($this->cfg["FullServer"]["message"], array( - "PLAYER" => $player->getUsername(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if first join message is enabled - * - * @return bool - */ - public function isFirstJoinMessageEnabled() : bool { - return $this->cfg["FirstJoin"]["enable"]; - } - - /** - * Get first join message - * - * @param Player $player - * - * @return string - */ - public function getFirstJoinMessage(Player $player){ - return TextFormat::colorize($this->replaceVars($this->cfg["FirstJoin"]["message"], array( - "PLAYER" => $player->getName(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if join message is custom - * - * @return bool - */ - public function isJoinMessageCustom() : bool { - return $this->cfg["Join"]["custom"]; - } - - /** - * Check if join message is hidden - * - * @return bool - */ - public function isJoinMessageHidden() : bool { - return $this->cfg["Join"]["hide"]; - } - - /** - * Get join message - * - * @param Player $player - * - * @return string - */ - public function getJoinMessage(Player $player){ - return TextFormat::colorize($this->replaceVars($this->cfg["Join"]["message"], array( - "PLAYER" => $player->getName(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if quit message is custom - * - * @return bool - */ - public function isQuitMessageCustom(){ - return $this->cfg["Quit"]["custom"]; - } - - /** - * Check if quit message is hidden - * - * @return bool - */ - public function isQuitMessageHidden(){ - return $this->cfg["Quit"]["hide"]; - } - - /** - * Get default quit message - * - * @param Player $player - * - * @return string - */ - public function getQuitMessage(Player $player){ - return TextFormat::colorize($this->replaceVars($this->cfg["Quit"]["message"], array( - "PLAYER" => $player->getName(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if world change message is enabled - * - * @return bool - */ - public function isWorldChangeMessageEnabled(){ - return $this->cfg["WorldChange"]["enable"]; - } - - /** - * Get world change message - * - * @param Player $player - * @param World $origin - * @param World $target - * - * @return string - */ - public function getWorldChangeMessage(Player $player, World $origin, World $target){ - return TextFormat::colorize($this->replaceVars($this->cfg["WorldChange"]["message"], array( - "ORIGIN" => $origin->getDisplayName(), - "TARGET" => $target->getDisplayName(), - "PLAYER" => $player->getName(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])))); - } - - /** - * Check if death messages are custom - * @return bool - */ - public function isDeathMessageCustom(EntityDamageEvent $cause = null){ - if(!$cause){ - return $this->cfg["Death"]["custom"]; - } - switch($cause->getCause()){ - case EntityDamageEvent::CAUSE_CONTACT: - return $this->cfg["Death"]["death-contact-message"]["custom"]; - case EntityDamageEvent::CAUSE_ENTITY_ATTACK: - return $this->cfg["Death"]["kill-message"]["custom"]; - case EntityDamageEvent::CAUSE_PROJECTILE: - return $this->cfg["Death"]["death-projectile-message"]["custom"]; - case EntityDamageEvent::CAUSE_SUFFOCATION: - return $this->cfg["Death"]["death-suffocation-message"]["custom"]; - case EntityDamageEvent::CAUSE_FALL: - return $this->cfg["Death"]["death-fall-message"]["custom"]; - case EntityDamageEvent::CAUSE_FIRE: - return $this->cfg["Death"]["death-fire-message"]["custom"]; - case EntityDamageEvent::CAUSE_FIRE_TICK: - return $this->cfg["Death"]["death-on-fire-message"]["custom"]; - case EntityDamageEvent::CAUSE_LAVA: - return $this->cfg["Death"]["death-lava-message"]["custom"]; - case EntityDamageEvent::CAUSE_DROWNING: - return $this->cfg["Death"]["death-drowning-message"]["custom"]; - case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: - case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: - return $this->cfg["Death"]["death-explosion-message"]["custom"]; - case EntityDamageEvent::CAUSE_VOID: - return $this->cfg["Death"]["death-void-message"]["custom"]; - case EntityDamageEvent::CAUSE_SUICIDE: - return $this->cfg["Death"]["death-suicide-message"]["custom"]; - case EntityDamageEvent::CAUSE_MAGIC: - return $this->cfg["Death"]["death-magic-message"]["custom"]; - default: - return $this->cfg["Death"]["custom"]; - } - } - - /** - * Check if death messages are hidden - * - * @param EntityDamageEvent $cause - * - * @return bool - */ - public function isDeathMessageHidden(EntityDamageEvent $cause = null){ - if(!$cause){ - return $this->cfg["Death"]["hide"]; - } - switch($cause->getCause()){ - case EntityDamageEvent::CAUSE_CONTACT: - return $this->cfg["Death"]["death-contact-message"]["hide"]; - case EntityDamageEvent::CAUSE_ENTITY_ATTACK: - return $this->cfg["Death"]["kill-message"]["hide"]; - case EntityDamageEvent::CAUSE_PROJECTILE: - return $this->cfg["Death"]["death-projectile-message"]["hide"]; - case EntityDamageEvent::CAUSE_SUFFOCATION: - return $this->cfg["Death"]["death-suffocation-message"]["hide"]; - case EntityDamageEvent::CAUSE_FALL: - return $this->cfg["Death"]["death-fall-message"]["hide"]; - case EntityDamageEvent::CAUSE_FIRE: - return $this->cfg["Death"]["death-fire-message"]["hide"]; - case EntityDamageEvent::CAUSE_FIRE_TICK: - return $this->cfg["Death"]["death-on-fire-message"]["hide"]; - case EntityDamageEvent::CAUSE_LAVA: - return $this->cfg["Death"]["death-lava-message"]["hide"]; - case EntityDamageEvent::CAUSE_DROWNING: - return $this->cfg["Death"]["death-drowning-message"]["hide"]; - case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: - case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: - return $this->cfg["Death"]["death-explosion-message"]["hide"]; - case EntityDamageEvent::CAUSE_VOID: - return $this->cfg["Death"]["death-void-message"]["hide"]; - case EntityDamageEvent::CAUSE_SUICIDE: - return $this->cfg["Death"]["death-suicide-message"]["hide"]; - case EntityDamageEvent::CAUSE_MAGIC: - return $this->cfg["Death"]["death-magic-message"]["hide"]; - default: - return $this->cfg["Death"]["hide"]; - } - } - - /** - * Get death message related to the specified cause - * - * @param Player $player - * @param EntityDamageEvent $cause - * - * @return string - */ - public function getDeathMessage(Player $player, EntityDamageEvent $cause = null){ - $array = array( - "PLAYER" => $player->getName(), - "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), - "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), - "TIME" => date($this->cfg["datetime-format"])); - if(!$cause){ - $message = $this->cfg["Death"]["message"]; - }else{ - switch($cause->getCause()){ - case EntityDamageEvent::CAUSE_CONTACT: - $message = $this->cfg["Death"]["death-contact-message"]["message"]; - if($cause instanceof EntityDamageByBlockEvent){ - $array["BLOCK"] = $cause->getDamager()->getName(); - break; - } - $array["BLOCK"] = "Unknown"; - break; - case EntityDamageEvent::CAUSE_ENTITY_ATTACK: - $message = $this->cfg["Death"]["kill-message"]["message"]; - $killer = $cause->getDamager(); - if($killer instanceof Living){ - $array["KILLER"] = $killer->getName(); - break; - } - $array["KILLER"] = "Unknown"; - break; - case EntityDamageEvent::CAUSE_PROJECTILE: - $message = $this->cfg["Death"]["death-projectile-message"]["message"]; - $killer = $cause->getDamager(); - if($killer instanceof Living){ - $array["KILLER"] = $killer->getName(); - break; - } - $array["KILLER"] = "Unknown"; - break; - case EntityDamageEvent::CAUSE_SUFFOCATION: - $message = $this->cfg["Death"]["death-suffocation-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_FALL: - $message = $this->cfg["Death"]["death-fall-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_FIRE: - $message = $this->cfg["Death"]["death-fire-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_FIRE_TICK: - $message = $this->cfg["Death"]["death-on-fire-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_LAVA: - $message = $this->cfg["Death"]["death-lava-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_DROWNING: - $message = $this->cfg["Death"]["death-drowning-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: - case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: - $message = $this->cfg["Death"]["death-explosion-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_VOID: - $message = $this->cfg["Death"]["death-void-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_SUICIDE: - $message = $this->cfg["Death"]["death-suicide-message"]["message"]; - break; - case EntityDamageEvent::CAUSE_MAGIC: - $message = $this->cfg["Death"]["death-magic-message"]["message"]; - break; - default: - $message = $this->cfg["Death"]["message"]; - break; - } - } - return TextFormat::colorize($this->replaceVars($message, $array)); - } -} diff --git a/src/CustomAlerts/EventListener.php b/src/CustomAlerts/EventListener.php deleted file mode 100644 index 15e75d2..0000000 --- a/src/CustomAlerts/EventListener.php +++ /dev/null @@ -1,208 +0,0 @@ -plugin = $plugin; - } - - /** - * @param DataPacketReceiveEvent $event - * - * @priority HIGHEST - */ - public function onReceivePacket(DataPacketReceiveEvent $event){ - $origin = $event->getOrigin(); - $player = $origin->getPlayer(); - $packet = $event->getPacket(); - if($packet instanceof LoginPacket){ - if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){ - //Outdated Client message - $cevent = new CustomAlertsOutdatedClientKickEvent($player); - if($this->plugin->isOutdatedClientMessageCustom()){ - $cevent->setMessage($this->plugin->getOutdatedClientMessage($player)); - } - $cevent->call(); - if($cevent->getMessage() != ""){ - $origin->disconnect($cevent->getMessage()); - $event->cancel(); - return; - } - }else if($packet->protocol > ProtocolInfo::CURRENT_PROTOCOL){ - //Outdated Server message - $cevent = new CustomAlertsOutdatedServerKickEvent($player); - if($this->plugin->isOutdatedServerMessageCustom()){ - $cevent->setMessage($this->plugin->getOutdatedServerMessage($player)); - } - $cevent->call(); - if($cevent->getMessage() != ""){ - $origin->disconnect($cevent->getMessage()); - $event->cancel(); - return; - } - } - } - } - - /** - * @param PlayerPreLoginEvent $event - * - * @priority HIGHEST - */ - public function onPlayerPreLogin(PlayerPreLoginEvent $event){ - $player = $event->getPlayerInfo(); - if(count($this->plugin->getServer()->getOnlinePlayers()) - 1 < $this->plugin->getServer()->getMaxPlayers()){ - //Whitelist Message - if(!$this->plugin->getServer()->isWhitelisted($player->getUsername())){ - $cevent = new CustomAlertsWhitelistKickEvent($player); - if($this->plugin->isWhitelistMessageCustom()){ - $cevent->setMessage($this->plugin->getWhitelistMessage($player)); - } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); - if($cevent->getMessage() != ""){ - $player->close("", $cevent->getMessage()); - $event->setCancelled(true); - return; - } - } - }else{ - //Full Server Message - $cevent = new CustomAlertsFullServerKickEvent($player); - if($this->plugin->isFullServerMessageCustom()){ - $cevent->setMesssage($this->plugin->getFullServerMessage($player)); - } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); - if($cevent->getMessage() != ""){ - $player->close("", $cevent->getMessage()); - $event->setCancelled(true); - return; - } - } - } - - /** - * @param PlayerJoinEvent $event - * - * @priority HIGHEST - */ - public function onPlayerJoin(PlayerJoinEvent $event){ - $player = $event->getPlayer(); - //Motd Update - $this->plugin->updateMotd(); - //Join Message - $cevent = new CustomAlertsJoinEvent($player); - if(!$player->hasPlayedBefore() && $this->plugin->isFirstJoinMessageEnabled()){ - $cevent->setMessage($this->plugin->getFirstJoinMessage($player)); - }else if($this->plugin->isJoinMessageHidden()){ - $cevent->setMessage(""); - }else if($this->plugin->isJoinMessageCustom()){ - $cevent->setMessage($this->plugin->getJoinMessage($player)); - }else{ - $cevent->setMessage($event->getJoinMessage()); - } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); - $event->setJoinMessage($cevent->getMessage()); - } - - /** - * @param PlayerQuitEvent $event - * - * @priority HIGHEST - */ - public function onPlayerQuit(PlayerQuitEvent $event){ - $player = $event->getPlayer(); - //Motd Update - $this->plugin->updateMotd(); - //Quit Message - $cevent = new CustomAlertsQuitEvent($player); - if($this->plugin->isQuitMessageHidden()){ - $cevent->setMessage(""); - }else if($this->plugin->isQuitMessageCustom()){ - $cevent->setMessage($this->plugin->getQuitMessage($player)); - }else{ - $cevent->setMessage($event->getQuitMessage()); - } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); - $event->setQuitMessage($cevent->getMessage()); - } - - /** - * @param EntityLevelChangeEvent $event - * - * @priority HIGHEST - */ - public function onWorldChange(EntityLevelChangeEvent $event){ - $entity = $event->getEntity(); - //Check if the Entity is a Player - if($entity instanceof Player){ - $player = $entity; - $origin = $event->getOrigin(); - $target = $event->getTarget(); - $cevent = new CustomAlertsWorldChangeEvent($player, $origin, $target); - if($this->plugin->isWorldChangeMessageEnabled()){ - $cevent->setMessage($this->plugin->getWorldChangeMessage($player, $origin, $target)); - }else{ - $cevent->setMessage(""); - } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); - if($cevent->getMessage() != ""){ - Server::getInstance()->broadcastMessage($cevent->getMessage()); - } - } - } - - - /** - * @param PlayerDeathEvent $event - * - * @priority HIGHEST - */ - public function onPlayerDeath(PlayerDeathEvent $event){ - $player = $event->getEntity(); - if($player instanceof Player){ - $cause = $player->getLastDamageCause(); - $cevent = new CustomAlertsDeathEvent($player, $cause); - if($this->plugin->isDeathMessageHidden($cause)){ - $cevent->setMessage(""); - }else if($this->plugin->isDeathMessageCustom($cause)){ - $cevent->setMessage($this->plugin->getDeathMessage($player, $cause)); - }else{ - $cevent->setMessage($event->getDeathMessage()); - } - $this->plugin->getServer()->getPluginManager()->callEvent($cevent); - $event->setDeathMessage($cevent->getMessage()); - } - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsDeathEvent.php b/src/CustomAlerts/Events/CustomAlertsDeathEvent.php deleted file mode 100644 index ed20e83..0000000 --- a/src/CustomAlerts/Events/CustomAlertsDeathEvent.php +++ /dev/null @@ -1,55 +0,0 @@ -player = $player; - $this->cause = $cause; - } - - /** - * Get death event player - * - * @return Player - */ - public function getPlayer() : Player { - return $this->player; - } - - /** - * Get death event cause - * - * @return EntityDamageEvent|null - */ - public function getCause() : ?EntityDamageEvent { - return $this->cause; - } - -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsEvent.php b/src/CustomAlerts/Events/CustomAlertsEvent.php deleted file mode 100644 index 62f4d61..0000000 --- a/src/CustomAlerts/Events/CustomAlertsEvent.php +++ /dev/null @@ -1,42 +0,0 @@ -message; - } - - /** - * Set event message - * - * @param string $message - */ - public function setMessage($message){ - $this->message = $message; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php b/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php deleted file mode 100644 index 3e82798..0000000 --- a/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php +++ /dev/null @@ -1,39 +0,0 @@ -player = $player; - } - - /** - * Get full server kick event player - * - * @return PlayerInfo - */ - public function getPlayerInfo() : PlayerInfo { - return $this->player; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsJoinEvent.php b/src/CustomAlerts/Events/CustomAlertsJoinEvent.php deleted file mode 100644 index a95e542..0000000 --- a/src/CustomAlerts/Events/CustomAlertsJoinEvent.php +++ /dev/null @@ -1,39 +0,0 @@ -player = $player; - } - - /** - * Get join event player - * - * @return Player - */ - public function getPlayer() : Player { - return $this->player; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php b/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php deleted file mode 100644 index 1e74e7d..0000000 --- a/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php +++ /dev/null @@ -1,22 +0,0 @@ -player = $player; - } - - /** - * Get outdated client kick event player - * - * @return PlayerInfo - */ - public function getPlayer() : PlayerInfo { - return $this->player; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php b/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php deleted file mode 100644 index dc5424a..0000000 --- a/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php +++ /dev/null @@ -1,39 +0,0 @@ -player = $player; - } - - /** - * Get outdated server kick event player - * - * @return PlayerInfo - */ - public function getPlayer() : PlayerInfo { - return $this->player; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsQuitEvent.php b/src/CustomAlerts/Events/CustomAlertsQuitEvent.php deleted file mode 100644 index 3ff85b8..0000000 --- a/src/CustomAlerts/Events/CustomAlertsQuitEvent.php +++ /dev/null @@ -1,39 +0,0 @@ -player = $player; - } - - /** - * Get quit event player - * - * @return Player - */ - public function getPlayer() : Player { - return $this->player; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php b/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php deleted file mode 100644 index c848e7e..0000000 --- a/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php +++ /dev/null @@ -1,39 +0,0 @@ -player = $player; - } - - /** - * Get whitelist kick event player - * - * @return PlayerInfo - */ - public function getPlayer() : PlayerInfo { - return $this->player; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php b/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php deleted file mode 100644 index 1157814..0000000 --- a/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php +++ /dev/null @@ -1,68 +0,0 @@ -player = $player; - $this->origin = $origin; - $this->target = $target; - } - - /** - * Get world change event player - * - * @return Player - */ - public function getPlayer() : Player { - return $this->player; - } - - /** - * Get origin level - * - * @return World - */ - public function getOrigin() : World { - return $this->origin; - } - - /** - * Get target level - * - * @return World - */ - public function getTarget() : World { - return $this->target; - } -} \ No newline at end of file diff --git a/src/CustomAlerts/MotdTask.php b/src/CustomAlerts/MotdTask.php deleted file mode 100644 index 7a88a61..0000000 --- a/src/CustomAlerts/MotdTask.php +++ /dev/null @@ -1,31 +0,0 @@ -plugin = $plugin; - } - - public function onRun(): void{ - CustomAlerts::getAPI()->updateMotd(); - } - - public function getPlugin(){ - return $this->plugin; - } -} From 5dc1dbcf79ab510c6696ffc2057e04f24ba8b399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=E1=BB=8Dc=20Lam?= <33188123+NgLamVN@users.noreply.github.com> Date: Fri, 21 Jan 2022 09:51:47 +0700 Subject: [PATCH 5/5] F f f f f --- plugin.yml | 22 + resources/config.yml | 89 ++++ src/CustomAlerts/Commands/Commands.php | 76 +++ src/CustomAlerts/CustomAlerts.php | 482 ++++++++++++++++++ src/CustomAlerts/EventListener.php | 206 ++++++++ .../Events/CustomAlertsDeathEvent.php | 55 ++ src/CustomAlerts/Events/CustomAlertsEvent.php | 42 ++ .../CustomAlertsFullServerKickEvent.php | 39 ++ .../Events/CustomAlertsJoinEvent.php | 39 ++ .../Events/CustomAlertsMotdUpdateEvent.php | 22 + .../CustomAlertsOutdatedClientKickEvent.php | 40 ++ .../CustomAlertsOutdatedServerKickEvent.php | 40 ++ .../Events/CustomAlertsQuitEvent.php | 39 ++ .../Events/CustomAlertsWhitelistKickEvent.php | 39 ++ .../Events/CustomAlertsWorldChangeEvent.php | 68 +++ src/CustomAlerts/MotdTask.php | 31 ++ 16 files changed, 1329 insertions(+) create mode 100644 plugin.yml create mode 100644 resources/config.yml create mode 100644 src/CustomAlerts/Commands/Commands.php create mode 100644 src/CustomAlerts/CustomAlerts.php create mode 100644 src/CustomAlerts/EventListener.php create mode 100644 src/CustomAlerts/Events/CustomAlertsDeathEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsJoinEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsQuitEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php create mode 100644 src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php create mode 100644 src/CustomAlerts/MotdTask.php diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 0000000..2762aa8 --- /dev/null +++ b/plugin.yml @@ -0,0 +1,22 @@ +name: CustomAlerts +main: CustomAlerts\CustomAlerts +version: 2.1 +api: [ 4.0.0 ] +load: STARTUP +author: EvolSoft +description: Customize or hide alerts (join/leave messages, whitelist messages, outdated server/client messages, etc...) plugin +website: https://www.evolsoft.tk + +permissions: + customalerts: + default: op + description: CustomAlerts permission tree. + customalerts.help: + default: op + description: let player read CustomAlerts commands help. + customalerts.info: + default: op + description: Let player read info about CustomAlerts. + customalerts.reload: + default: op + description: Let player reload CustomAlerts configuration. diff --git a/resources/config.yml b/resources/config.yml new file mode 100644 index 0000000..017f805 --- /dev/null +++ b/resources/config.yml @@ -0,0 +1,89 @@ +--- +datetime-format: "H:i:s" +Motd: + update-timeout: 1 + custom: true + message: "&e[{TIME}] &aWelcome to your server! &n&b[{TOTALPLAYERS}/{MAXPLAYERS}]" +OutdatedClient: + custom: true + message: "&cYour MCPE client is outdated!" +OutdatedServer: + custom: true + message: "&cOops! Server outdated!" +WhitelistedServer: + custom: true + message: "&c&oThis Server is whitelisted!" +FullServer: + custom: true + message: "&e{PLAYER}&b, The Server is full &c[{TOTALPLAYERS}/{MAXPLAYERS}]&b!\n&l&dTry to join later :)" +FirstJoin: + enable: true + message: "&2[{TIME}] &a{PLAYER}&d joined the game for the first time." +Join: + hide: false + custom: true + message: "&2[{TIME}] &a{PLAYER}&e joined the game." +Quit: + hide: true + custom: false + message: "&4[{TIME}] &c{PLAYER}&e has left the game" +WorldChange: + enable: true + message: "&2[{TIME}] &a{PLAYER}&e moved from &c{ORIGIN}&e to &a{TARGET}" +Death: + hide: false + custom: true + message: "&c{PLAYER} died" + death-contact-message: + hide: false + custom: true + message: "&cOops! {PLAYER} was killed by {BLOCK}" + kill-message: + hide: false + custom: true + message: "&9{PLAYER} &ewas killed by &c{KILLER}" + death-projectile-message: + hide: false + custom: true + message: "&c{PLAYER} was killed by {KILLER} by arrow" + death-suffocation-message: + hide: false + custom: true + message: "&c{PLAYER} suffocated" + death-fall-message: + hide: false + custom: true + message: "&c{PLAYER} fell from a high place" + death-fire-message: + hide: false + custom: true + message: "&c{PLAYER} went up in flames" + death-on-fire-message: + hide: false + custom: true + message: "&c{PLAYER} burned" + death-lava-message: + hide: false + custom: true + message: "&c{PLAYER} tried to swim in lava" + death-drowning-message: + hide: false + custom: true + message: "&c{PLAYER} drowned" + death-explosion-message: + hide: false + custom: true + message: "&c{PLAYER} exploded" + death-void-message: + hide: false + custom: true + message: "&c{PLAYER} fell into the void" + death-suicide-message: + hide: false + custom: true + message: "&c{PLAYER} committed suicide" + death-magic-message: + hide: false + custom: true + message: "&c{PLAYER} was killed by a spell" +... diff --git a/src/CustomAlerts/Commands/Commands.php b/src/CustomAlerts/Commands/Commands.php new file mode 100644 index 0000000..48e7a2a --- /dev/null +++ b/src/CustomAlerts/Commands/Commands.php @@ -0,0 +1,76 @@ +plugin = $plugin; + $this->setPermission("customalerts.help"); + } + + public function execute(CommandSender $sender, string $commandLabel, array $args){ + if(isset($args[0])){ + $args[0] = strtolower($args[0]); + switch($args[0]){ + case "help": + goto help; + case "info": + if($sender->hasPermission("customalerts.info")){ + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aCustomAlerts &dv" . $this->plugin->getDescription()->getVersion() . "&a developed by &dEvolSoft")); + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aWebsite &d" . $this->plugin->getDescription()->getWebsite())); + break; + } + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + break; + case "reload": + if($sender->hasPermission("customalerts.reload")){ + $this->plugin->reloadConfig(); + $this->plugin->cfg = $this->plugin->getConfig()->getAll(); + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&aConfiguration Reloaded.")); + break; + } + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + break; + default: + if($sender->hasPermission("customalerts")){ + $sender->sendMessage(TextFormat::colorize(CustomAlerts::PREFIX . "&cSubcommand &a" . $args[0] . " &cnot found. Use &a/calerts help &cto show available commands")); + break; + } + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + break; + } + return; + } + help: + if($sender->hasPermission("customalerts.help")){ + $sender->sendMessage(TextFormat::colorize("&b-- &aAvailable Commands &b--")); + $sender->sendMessage(TextFormat::colorize("&d/calerts help &b-&a Show help about this plugin")); + $sender->sendMessage(TextFormat::colorize("&d/calerts info &b-&a Show info about this plugin")); + $sender->sendMessage(TextFormat::colorize("&d/calerts reload &b-&a Reload the config")); + }else{ + $sender->sendMessage(TextFormat::colorize("&cYou don't have permissions to use this command")); + } + return; + } +} diff --git a/src/CustomAlerts/CustomAlerts.php b/src/CustomAlerts/CustomAlerts.php new file mode 100644 index 0000000..3e073b8 --- /dev/null +++ b/src/CustomAlerts/CustomAlerts.php @@ -0,0 +1,482 @@ +getDataFolder()); + $this->saveDefaultConfig(); + $this->cfg = $this->getConfig()->getAll(); + $this->getServer()->getCommandMap()->register("customalerts", new Commands($this)); + $this->getServer()->getPluginManager()->registerEvents(new EventListener($this), $this); + $this->getScheduler()->scheduleRepeatingTask(new MotdTask($this), 20); + } + + //API Functions + + /** + * Get CustomAlerts version + * + * @return string + */ + public function getVersion() : string{ + return $this->getVersion(); + } + + /** + * Get CustomAlerts API version + * + * @return string + */ + public function getAPIVersion() : string{ + return self::API_VERSION; + } + + public function updateMotd(){ + $cevent = new CustomAlertsMotdUpdateEvent($this); + if($this->isMotdCustom()){ + $cevent->setMessage($this->getMotdMessage()); + }else{ + $cevent->setMessage($this->getServer()->getMotd()); + } + $cevent->call(); + $this->getServer()->getNetwork()->setName($cevent->getMessage()); + } + + /** + * Check if motd is custom + * + * @return bool + */ + public function isMotdCustom() : bool{ + return $this->cfg["Motd"]["custom"]; + } + + /** + * Get motd message + * + * @return string + */ + public function getMotdMessage() : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["Motd"]["message"], [ + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Replace variables inside a string + * + * @param string $str + * @param array $vars + * + * @return string + */ + public function replaceVars(string $str, array $vars) : string{ + foreach($vars as $key => $value){ + $str = str_replace("{" . $key . "}", (string)$value, $str); + } + return $str; + } + + /** + * Check if outdated client message is custom + * + * @return bool + */ + public function isOutdatedClientMessageCustom() : bool{ + return $this->cfg["OutdatedClient"]["custom"]; + } + + /** + * Get outdated client message + * + * @param Player|null $player + * + * @return string + */ + public function getOutdatedClientMessage(?Player $player) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedClient"]["message"], [ + "PLAYER" => $player?$player->getName():"", + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if outdated server message is custom + * + * @return bool + */ + public function isOutdatedServerMessageCustom() : bool{ + return $this->cfg["OutdatedServer"]["custom"]; + } + + /** + * Get outdated server message + * + * @param Player|null $player + * + * @return string + */ + public function getOutdatedServerMessage(?Player $player) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["OutdatedServer"]["message"], [ + "PLAYER" => $player?$player->getName():"", + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if whitelist message is custom + * + * @return bool + */ + public function isWhitelistMessageCustom() : bool{ + return $this->cfg["WhitelistedServer"]["custom"]; + } + + /** + * Get whitelist message + * + * @param PlayerInfo $player + * + * @return string + */ + public function getWhitelistMessage(PlayerInfo $player) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["WhitelistedServer"]["message"], [ + "PLAYER" => $player->getUsername(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if full server message is custom + * + * @return bool + */ + public function isFullServerMessageCustom() : bool{ + $cfg = $this->getConfig()->getAll(); + return $cfg["FullServer"]["custom"]; + } + + /** + * Get full server message + * + * @param PlayerInfo $player + * + * @return string + */ + public function getFullServerMessage(PlayerInfo $player) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["FullServer"]["message"], [ + "PLAYER" => $player->getUsername(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if first join message is enabled + * + * @return bool + */ + public function isFirstJoinMessageEnabled() : bool{ + return $this->cfg["FirstJoin"]["enable"]; + } + + /** + * Get first join message + * + * @param Player $player + * + * @return string + */ + public function getFirstJoinMessage(Player $player) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["FirstJoin"]["message"], [ + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if join message is custom + * + * @return bool + */ + public function isJoinMessageCustom() : bool{ + return $this->cfg["Join"]["custom"]; + } + + /** + * Check if join message is hidden + * + * @return bool + */ + public function isJoinMessageHidden() : bool{ + return $this->cfg["Join"]["hide"]; + } + + /** + * Get join message + * + * @param Player $player + * + * @return string + */ + public function getJoinMessage(Player $player) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["Join"]["message"], [ + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if quit message is custom + * + * @return bool + */ + public function isQuitMessageCustom() : bool{ + return $this->cfg["Quit"]["custom"]; + } + + /** + * Check if quit message is hidden + * + * @return bool + */ + public function isQuitMessageHidden() : bool{ + return $this->cfg["Quit"]["hide"]; + } + + /** + * Get default quit message + * + * @param Player $player + * + * @return string + */ + public function getQuitMessage(Player $player) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["Quit"]["message"], [ + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if world change message is enabled + * + * @return bool + */ + public function isWorldChangeMessageEnabled() : bool{ + return $this->cfg["WorldChange"]["enable"]; + } + + /** + * Get world change message + * + * @param Player $player + * @param World $origin + * @param World $target + * + * @return string + */ + public function getWorldChangeMessage(Player $player, World $origin, World $target) : string{ + return TextFormat::colorize($this->replaceVars($this->cfg["WorldChange"]["message"], [ + "ORIGIN" => $origin->getDisplayName(), + "TARGET" => $target->getDisplayName(), + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])])); + } + + /** + * Check if death messages are custom + * + * @param EntityDamageEvent|null $cause + * + * @return bool + */ + public function isDeathMessageCustom(EntityDamageEvent $cause = null) : bool{ + if(!$cause){ + return $this->cfg["Death"]["custom"]; + } + return match ($cause->getCause()) { + EntityDamageEvent::CAUSE_CONTACT => $this->cfg["Death"]["death-contact-message"]["custom"], + EntityDamageEvent::CAUSE_ENTITY_ATTACK => $this->cfg["Death"]["kill-message"]["custom"], + EntityDamageEvent::CAUSE_PROJECTILE => $this->cfg["Death"]["death-projectile-message"]["custom"], + EntityDamageEvent::CAUSE_SUFFOCATION => $this->cfg["Death"]["death-suffocation-message"]["custom"], + EntityDamageEvent::CAUSE_FALL => $this->cfg["Death"]["death-fall-message"]["custom"], + EntityDamageEvent::CAUSE_FIRE => $this->cfg["Death"]["death-fire-message"]["custom"], + EntityDamageEvent::CAUSE_FIRE_TICK => $this->cfg["Death"]["death-on-fire-message"]["custom"], + EntityDamageEvent::CAUSE_LAVA => $this->cfg["Death"]["death-lava-message"]["custom"], + EntityDamageEvent::CAUSE_DROWNING => $this->cfg["Death"]["death-drowning-message"]["custom"], + EntityDamageEvent::CAUSE_ENTITY_EXPLOSION, EntityDamageEvent::CAUSE_BLOCK_EXPLOSION => $this->cfg["Death"]["death-explosion-message"]["custom"], + EntityDamageEvent::CAUSE_VOID => $this->cfg["Death"]["death-void-message"]["custom"], + EntityDamageEvent::CAUSE_SUICIDE => $this->cfg["Death"]["death-suicide-message"]["custom"], + EntityDamageEvent::CAUSE_MAGIC => $this->cfg["Death"]["death-magic-message"]["custom"], + default => $this->cfg["Death"]["custom"], + }; + } + + /** + * Check if death messages are hidden + * + * @param EntityDamageEvent|null $cause + * + * @return bool + */ + public function isDeathMessageHidden(EntityDamageEvent $cause = null) : bool{ + if(!$cause){ + return $this->cfg["Death"]["hide"]; + } + return match ($cause->getCause()) { + EntityDamageEvent::CAUSE_CONTACT => $this->cfg["Death"]["death-contact-message"]["hide"], + EntityDamageEvent::CAUSE_ENTITY_ATTACK => $this->cfg["Death"]["kill-message"]["hide"], + EntityDamageEvent::CAUSE_PROJECTILE => $this->cfg["Death"]["death-projectile-message"]["hide"], + EntityDamageEvent::CAUSE_SUFFOCATION => $this->cfg["Death"]["death-suffocation-message"]["hide"], + EntityDamageEvent::CAUSE_FALL => $this->cfg["Death"]["death-fall-message"]["hide"], + EntityDamageEvent::CAUSE_FIRE => $this->cfg["Death"]["death-fire-message"]["hide"], + EntityDamageEvent::CAUSE_FIRE_TICK => $this->cfg["Death"]["death-on-fire-message"]["hide"], + EntityDamageEvent::CAUSE_LAVA => $this->cfg["Death"]["death-lava-message"]["hide"], + EntityDamageEvent::CAUSE_DROWNING => $this->cfg["Death"]["death-drowning-message"]["hide"], + EntityDamageEvent::CAUSE_ENTITY_EXPLOSION, EntityDamageEvent::CAUSE_BLOCK_EXPLOSION => $this->cfg["Death"]["death-explosion-message"]["hide"], + EntityDamageEvent::CAUSE_VOID => $this->cfg["Death"]["death-void-message"]["hide"], + EntityDamageEvent::CAUSE_SUICIDE => $this->cfg["Death"]["death-suicide-message"]["hide"], + EntityDamageEvent::CAUSE_MAGIC => $this->cfg["Death"]["death-magic-message"]["hide"], + default => $this->cfg["Death"]["hide"], + }; + } + + /** + * Get death message related to the specified cause + * + * @param Player $player + * @param EntityDamageEvent|null $cause + * + * @return string + */ + public function getDeathMessage(Player $player, EntityDamageEvent $cause = null) : string{ + $array = [ + "PLAYER" => $player->getName(), + "MAXPLAYERS" => $this->getServer()->getMaxPlayers(), + "TOTALPLAYERS" => count($this->getServer()->getOnlinePlayers()), + "TIME" => date($this->cfg["datetime-format"])]; + if(!$cause){ + $message = $this->cfg["Death"]["message"]; + }else{ + switch($cause->getCause()){ + case EntityDamageEvent::CAUSE_CONTACT: + $message = $this->cfg["Death"]["death-contact-message"]["message"]; + if($cause instanceof EntityDamageByBlockEvent){ + $array["BLOCK"] = $cause->getDamager()->getName(); + break; + } + $array["BLOCK"] = "Unknown"; + break; + case EntityDamageEvent::CAUSE_ENTITY_ATTACK: + $message = $this->cfg["Death"]["kill-message"]["message"]; + $killer = $cause->getDamager(); + if($killer instanceof Living){ + $array["KILLER"] = $killer->getName(); + break; + } + $array["KILLER"] = "Unknown"; + break; + case EntityDamageEvent::CAUSE_PROJECTILE: + $message = $this->cfg["Death"]["death-projectile-message"]["message"]; + $killer = $cause->getDamager(); + if($killer instanceof Living){ + $array["KILLER"] = $killer->getName(); + break; + } + $array["KILLER"] = "Unknown"; + break; + case EntityDamageEvent::CAUSE_SUFFOCATION: + $message = $this->cfg["Death"]["death-suffocation-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_FALL: + $message = $this->cfg["Death"]["death-fall-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_FIRE: + $message = $this->cfg["Death"]["death-fire-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_FIRE_TICK: + $message = $this->cfg["Death"]["death-on-fire-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_LAVA: + $message = $this->cfg["Death"]["death-lava-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_DROWNING: + $message = $this->cfg["Death"]["death-drowning-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_ENTITY_EXPLOSION: + case EntityDamageEvent::CAUSE_BLOCK_EXPLOSION: + $message = $this->cfg["Death"]["death-explosion-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_VOID: + $message = $this->cfg["Death"]["death-void-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_SUICIDE: + $message = $this->cfg["Death"]["death-suicide-message"]["message"]; + break; + case EntityDamageEvent::CAUSE_MAGIC: + $message = $this->cfg["Death"]["death-magic-message"]["message"]; + break; + default: + $message = $this->cfg["Death"]["message"]; + break; + } + } + return TextFormat::colorize($this->replaceVars($message, $array)); + } +} diff --git a/src/CustomAlerts/EventListener.php b/src/CustomAlerts/EventListener.php new file mode 100644 index 0000000..bf5ebcd --- /dev/null +++ b/src/CustomAlerts/EventListener.php @@ -0,0 +1,206 @@ +plugin = $plugin; + } + + /** + * @param DataPacketReceiveEvent $event + * + * @priority HIGHEST + */ + public function onReceivePacket(DataPacketReceiveEvent $event){ + $origin = $event->getOrigin(); + $player = $origin->getPlayer(); + $packet = $event->getPacket(); + if($packet instanceof LoginPacket){ + if($packet->protocol < ProtocolInfo::CURRENT_PROTOCOL){ + //Outdated Client message + $cevent = new CustomAlertsOutdatedClientKickEvent($this->plugin, $player); + if($this->plugin->isOutdatedClientMessageCustom()){ + $cevent->setMessage($this->plugin->getOutdatedClientMessage($player)); + } + $cevent->call(); + if($cevent->getMessage() != ""){ + $origin->disconnect($cevent->getMessage()); + $event->cancel(); + } + }elseif($packet->protocol > ProtocolInfo::CURRENT_PROTOCOL){ + //Outdated Server message + $cevent = new CustomAlertsOutdatedServerKickEvent($this->plugin, $player); + if($this->plugin->isOutdatedServerMessageCustom()){ + $cevent->setMessage($this->plugin->getOutdatedServerMessage($player)); + } + $cevent->call(); + if($cevent->getMessage() != ""){ + $origin->disconnect($cevent->getMessage()); + $event->cancel(); + } + } + } + } + + /** + * @param PlayerPreLoginEvent $event + * + * @priority HIGHEST + */ + public function onPlayerPreLogin(PlayerPreLoginEvent $event){ + $player = $event->getPlayerInfo(); + if(count($this->plugin->getServer()->getOnlinePlayers()) - 1 < $this->plugin->getServer()->getMaxPlayers()){ + //Whitelist Message + if(!$this->plugin->getServer()->isWhitelisted($player->getUsername())){ + $cevent = new CustomAlertsWhitelistKickEvent($this->plugin, $player); + if($this->plugin->isWhitelistMessageCustom()){ + $cevent->setMessage($this->plugin->getWhitelistMessage($player)); + } + $cevent->call(); + if($cevent->getMessage() != ""){ + $event->setKickReason(0, $cevent->getMessage()); + } + } + }else{ + //Full Server Message + $cevent = new CustomAlertsFullServerKickEvent($this->plugin, $player); + if($this->plugin->isFullServerMessageCustom()){ + $cevent->setMessage($this->plugin->getFullServerMessage($player)); + } + $cevent->call(); + if($cevent->getMessage() != ""){ + $event->setKickReason(0, $cevent->getMessage()); + } + } + } + + /** + * @param PlayerJoinEvent $event + * + * @priority HIGHEST + */ + public function onPlayerJoin(PlayerJoinEvent $event){ + $player = $event->getPlayer(); + //Motd Update + $this->plugin->updateMotd(); + //Join Message + $cevent = new CustomAlertsJoinEvent($this->plugin, $player); + if(!$player->hasPlayedBefore() && $this->plugin->isFirstJoinMessageEnabled()){ + $cevent->setMessage($this->plugin->getFirstJoinMessage($player)); + }elseif($this->plugin->isJoinMessageHidden()){ + $cevent->setMessage(""); + }elseif($this->plugin->isJoinMessageCustom()){ + $cevent->setMessage($this->plugin->getJoinMessage($player)); + }else{ + $cevent->setMessage($event->getJoinMessage()); + } + $cevent->call(); + $event->setJoinMessage($cevent->getMessage()); + } + + /** + * @param PlayerQuitEvent $event + * + * @priority HIGHEST + */ + public function onPlayerQuit(PlayerQuitEvent $event){ + $player = $event->getPlayer(); + //Motd Update + $this->plugin->updateMotd(); + //Quit Message + $cevent = new CustomAlertsQuitEvent($this->plugin, $player); + if($this->plugin->isQuitMessageHidden()){ + $cevent->setMessage(""); + }elseif($this->plugin->isQuitMessageCustom()){ + $cevent->setMessage($this->plugin->getQuitMessage($player)); + }else{ + $cevent->setMessage($event->getQuitMessage()); + } + $cevent->call(); + $event->setQuitMessage($cevent->getMessage()); + } + + /** + * @param EntityTeleportEvent $event + * + * @priority HIGHEST + */ + public function onWorldChange(EntityTeleportEvent $event){ + if($event->getFrom()->getWorld() === $event->getTo()->getWorld()){ + return; + } + $entity = $event->getEntity(); + //Check if the Entity is a Player + if($entity instanceof Player){ + $player = $entity; + $origin = $event->getFrom()->getWorld(); + $target = $event->getTo()->getWorld(); + $cevent = new CustomAlertsWorldChangeEvent($this->plugin, $player, $origin, $target); + if($this->plugin->isWorldChangeMessageEnabled()){ + $cevent->setMessage($this->plugin->getWorldChangeMessage($player, $origin, $target)); + }else{ + $cevent->setMessage(""); + } + $cevent->call(); + if($cevent->getMessage() != ""){ + Server::getInstance()->broadcastMessage($cevent->getMessage()); + } + } + } + + + /** + * @param PlayerDeathEvent $event + * + * @priority HIGHEST + */ + public function onPlayerDeath(PlayerDeathEvent $event){ + $player = $event->getEntity(); + if($player instanceof Player){ + $cause = $player->getLastDamageCause(); + $cevent = new CustomAlertsDeathEvent($this->plugin, $player, $cause); + if($this->plugin->isDeathMessageHidden($cause)){ + $cevent->setMessage(""); + }elseif($this->plugin->isDeathMessageCustom($cause)){ + $cevent->setMessage($this->plugin->getDeathMessage($player, $cause)); + }else{ + $cevent->setMessage($event->getDeathMessage()); + } + $cevent->call(); + $event->setDeathMessage($cevent->getMessage()); + } + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsDeathEvent.php b/src/CustomAlerts/Events/CustomAlertsDeathEvent.php new file mode 100644 index 0000000..efd0569 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsDeathEvent.php @@ -0,0 +1,55 @@ +player = $player; + $this->cause = $cause; + } + + /** + * Get death event player + * + * @return Player + */ + public function getPlayer() : Player{ + return $this->player; + } + + /** + * Get death event cause + * + * @return EntityDamageEvent|null + */ + public function getCause() : ?EntityDamageEvent{ + return $this->cause; + } + +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsEvent.php b/src/CustomAlerts/Events/CustomAlertsEvent.php new file mode 100644 index 0000000..bc5f551 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsEvent.php @@ -0,0 +1,42 @@ +message; + } + + /** + * Set event message + * + * @param string $message + */ + public function setMessage($message){ + $this->message = $message; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php b/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php new file mode 100644 index 0000000..8b86545 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsFullServerKickEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get full server kick event player + * + * @return PlayerInfo + */ + public function getPlayerInfo() : PlayerInfo{ + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsJoinEvent.php b/src/CustomAlerts/Events/CustomAlertsJoinEvent.php new file mode 100644 index 0000000..fb51cab --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsJoinEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get join event player + * + * @return Player + */ + public function getPlayer() : Player{ + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php b/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php new file mode 100644 index 0000000..a8e1fa2 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsMotdUpdateEvent.php @@ -0,0 +1,22 @@ +player = $player; + } + + /** + * Get outdated client kick event player + * + * @return ?Player + */ + public function getPlayer() : ?Player{ + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php b/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php new file mode 100644 index 0000000..d278755 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php @@ -0,0 +1,40 @@ +player = $player; + } + + /** + * Get outdated server kick event player + * + * @return ?Player + */ + public function getPlayer() : ?Player{ + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsQuitEvent.php b/src/CustomAlerts/Events/CustomAlertsQuitEvent.php new file mode 100644 index 0000000..0c90d8d --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsQuitEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get quit event player + * + * @return Player + */ + public function getPlayer() : Player{ + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php b/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php new file mode 100644 index 0000000..6fcb99d --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsWhitelistKickEvent.php @@ -0,0 +1,39 @@ +player = $player; + } + + /** + * Get whitelist kick event player + * + * @return PlayerInfo + */ + public function getPlayer() : PlayerInfo{ + return $this->player; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php b/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php new file mode 100644 index 0000000..7e210b9 --- /dev/null +++ b/src/CustomAlerts/Events/CustomAlertsWorldChangeEvent.php @@ -0,0 +1,68 @@ +player = $player; + $this->origin = $origin; + $this->target = $target; + } + + /** + * Get world change event player + * + * @return Player + */ + public function getPlayer() : Player{ + return $this->player; + } + + /** + * Get origin level + * + * @return World + */ + public function getOrigin() : World{ + return $this->origin; + } + + /** + * Get target level + * + * @return World + */ + public function getTarget() : World{ + return $this->target; + } +} \ No newline at end of file diff --git a/src/CustomAlerts/MotdTask.php b/src/CustomAlerts/MotdTask.php new file mode 100644 index 0000000..45176ff --- /dev/null +++ b/src/CustomAlerts/MotdTask.php @@ -0,0 +1,31 @@ +plugin = $plugin; + } + + public function onRun() : void{ + CustomAlerts::getAPI()->updateMotd(); + } + + public function getPlugin(){ + return $this->plugin; + } +}