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..38d5ef6 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); } @@ -115,13 +116,13 @@ public function getMotdMessage(){ } public function updateMotd(){ - $cevent = new CustomAlertsMotdUpdateEvent(); + $cevent = new CustomAlertsMotdUpdateEvent($this); if($this->isMotdCustom()){ $cevent->setMessage($this->getMotdMessage()); }else{ $cevent->setMessage($this->getServer()->getMotd()); } - $this->getServer()->getPluginManager()->callEvent($cevent); + $cevent->call(); $this->getServer()->getNetwork()->setName($cevent->getMessage()); } @@ -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..b3dd99f 100755 --- a/CustomAlerts/src/CustomAlerts/EventListener.php +++ b/CustomAlerts/src/CustomAlerts/EventListener.php @@ -10,7 +10,7 @@ namespace CustomAlerts; -use pocketmine\event\entity\EntityLevelChangeEvent; +use pocketmine\event\entity\EntityTeleportEvent; use pocketmine\event\Listener; use pocketmine\event\player\PlayerDeathEvent; use pocketmine\event\player\PlayerJoinEvent; @@ -19,7 +19,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 +32,9 @@ use CustomAlerts\Events\CustomAlertsWorldChangeEvent; class EventListener implements Listener { - + + private CustomAlerts $plugin; + public function __construct(CustomAlerts $plugin){ $this->plugin = $plugin; } @@ -43,31 +45,32 @@ 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){ //Outdated Client message - $cevent = new CustomAlertsOutdatedClientKickEvent($player); + $cevent = new CustomAlertsOutdatedClientKickEvent($this->plugin, $player); 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){ //Outdated Server message - $cevent = new CustomAlertsOutdatedServerKickEvent($player); + $cevent = new CustomAlertsOutdatedServerKickEvent($this->plugin, $player); 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,31 +83,29 @@ 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())){ - $cevent = new CustomAlertsWhitelistKickEvent($player); + if(!$this->plugin->getServer()->isWhitelisted($player->getUsername())){ + $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; } } @@ -120,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()){ @@ -130,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()); } @@ -144,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()){ @@ -152,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()); } @@ -191,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)){ @@ -199,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/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..13139e1 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedClientKickEvent.php @@ -10,7 +10,8 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\Player; +use pocketmine\plugin\Plugin; class CustomAlertsOutdatedClientKickEvent extends CustomAlertsEvent { @@ -22,7 +23,8 @@ class CustomAlertsOutdatedClientKickEvent 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/CustomAlertsOutdatedServerKickEvent.php b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php index 749e25f..47b7614 100644 --- a/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php +++ b/CustomAlerts/src/CustomAlerts/Events/CustomAlertsOutdatedServerKickEvent.php @@ -10,7 +10,8 @@ namespace CustomAlerts\Events; -use pocketmine\Player; +use pocketmine\player\Player; +use pocketmine\plugin\Plugin; class CustomAlertsOutdatedServerKickEvent extends CustomAlertsEvent { @@ -22,7 +23,8 @@ class CustomAlertsOutdatedServerKickEvent 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/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(); } 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 diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..8463946 Binary files /dev/null and b/icon.png differ 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; + } +}