Skip to content

Instantly share code, notes, and snippets.

@PJZ9n
Last active April 26, 2020 15:36
Show Gist options
  • Save PJZ9n/4a67fe8f5a810616d3b1b9bc4a17e458 to your computer and use it in GitHub Desktop.
Save PJZ9n/4a67fe8f5a810616d3b1b9bc4a17e458 to your computer and use it in GitHub Desktop.
PMMPでPluginCommandを使うときの例
<?php
declare(strict_types=1);
namespace sample;
use pocketmine\command\Command;
use pocketmine\command\CommandExecutor;
use pocketmine\command\CommandSender;
use pocketmine\command\PluginCommand;
use pocketmine\permission\Permission;
use pocketmine\permission\PermissionManager;
use pocketmine\Player;
use pocketmine\plugin\Plugin;
use pocketmine\plugin\PluginBase;
use pocketmine\utils\TextFormat;
class Main extends PluginBase
{
public function onEnable(): void
{
//パーミッション
$permission = new Permission(
"sample.command.what",//プラグイン名.command.コマンド名 などがおすすめ
"whatコマンドの権限です。",
Permission::DEFAULT_OP//参考: https://github.com/pmmp/PocketMine-MP/blob/stable/src/pocketmine/permission/Permission.php#L38-L41
);
PermissionManager::getInstance()->addPermission($permission);//パーミッションを登録する
//コマンド
$this->getServer()->getCommandMap()->register("プラグイン名", new WhatCommand("コマンド名(ここではwhat)", $this));//コマンドを登録する
}
}
class WhatCommand extends PluginCommand implements CommandExecutor
{
public function __construct(string $name, Plugin $owner)
{
parent::__construct($name, $owner);
$this->setDescription("what?!と言います");//説明
$this->setUsage("/what [red:blue:help]");//使用方法: ~~で出るメッセージ
$this->setPermission("sample.command.what");//登録したパーミッション(25行目)
$this->setExecutor($this);
}
public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool
{
//コマンドが実行された時の処理
//return falseでfalseを返すと、使用方法が送信される。return trueでtrueを返すと、なにも送信されない。
//権限を持っているかの確認は、PMMP側で自動的に行われます。
//プレイヤーかどうか確認
if (!$sender instanceof Player) {
//プレイヤーではなかった場合
$sender->sendMessage(TextFormat::RED . "あなたはプレイヤーではないので、このコマンドを実行できません。");
return true;//正常に処理が完了したので、trueを返して処理を終了する。
}
//コマンドの書式が合っているか検証
if (count($args) < 1) {
//パラメータの数が1未満だった場合(ここでは/whatだけだった場合)
return false;//使用方法が間違っているので、falseを返して処理を終了する。使用方法が自動で送信される。
}
//コマンドのパラメータによって分岐する
switch ($args[0]) {//0(1)番目の値によって処理(/what >ここ<の部分)
case "red":// /what red だった場合
$sender->chat(TextFormat::RED . "What?!?!?!?!?!");
return true;//正常に処理が完了したので、trueを返して処理を終了する。
case "blue":// /what blue だった場合
$sender->chat(TextFormat::BLUE . "What?!?!?!?!?!");
return true;//正常に処理が完了したので、trueを返して処理を終了する。
case "help":// /what help だった場合
//使用方法の表示だけで十分な場合もあるので、help等を実装する必要があるかは場合による。
$sender->sendMessage("-- /whatコマンドのヘルプ --");
$sender->sendMessage("/what red - " . TextFormat::RED . "What?!?!?!?!?!" . TextFormat::RESET . "と発言する");
$sender->sendMessage("/what blue - " . TextFormat::BLUE . "What?!?!?!?!?!" . TextFormat::RESET . "と発言する");
$sender->sendMessage("/help - /whatコマンドのヘルプを表示する");
return true;//正常に処理が完了したので、trueを返して処理を終了する。
}
return false;//最後には必ずreturn falseを置いておく。
//ここでonCommand()関数の処理は終了
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment