Created
July 29, 2019 02:50
-
-
Save PJZ9n/487e8644b1b54408271986729c2316f9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| namespace CmdSignPlugin; | |
| //Events | |
| use pocketmine\event\block\BlockBreakEvent; | |
| use pocketmine\event\block\BlockPlaceEvent; | |
| use pocketmine\event\block\SignChangeEvent; | |
| use pocketmine\event\entity\EntityInventoryChangeEvent; | |
| use pocketmine\event\player\PlayerAchievementAwardedEvent; | |
| use pocketmine\event\player\PlayerChatEvent; | |
| use pocketmine\event\player\PlayerCommandPreprocessEvent; | |
| use pocketmine\event\player\PlayerDeathEvent; | |
| use pocketmine\event\player\PlayerGameModeChangeEvent; | |
| use pocketmine\event\player\PlayerInteractEvent; | |
| use pocketmine\event\player\PlayerJoinEvent; | |
| use pocketmine\event\player\PlayerKickEvent; | |
| use pocketmine\event\player\PlayerLoginEvent; | |
| use pocketmine\event\player\PlayerMoveEvent; | |
| use pocketmine\event\player\PlayerQuitEvent; | |
| use pocketmine\event\server\DataPacketReceiveEvent; | |
| //Packet | |
| //use pocketmine\item\Sign; | |
| use pocketmine\item\Item; | |
| use pocketmine\level\Position; | |
| use pocketmine\math\Vector3; | |
| use pocketmine\nbt\NBT; | |
| use pocketmine\network\mcpe\protocol\ModalFormResponsePacket; | |
| //Base | |
| use pocketmine\plugin\PluginBase; | |
| //EventUse | |
| use pocketmine\event\Listener; | |
| use pocketmine\event\Cancellable; | |
| //Task | |
| use pocketmine\scheduler\PluginTask; | |
| use pocketmine\scheduler\Task; | |
| use pocketmine\scheduler; | |
| use RuinPray\ui\elements\Dropdown; | |
| use RuinPray\ui\elements\Slider; | |
| use CmdSignPlugin\CallbackTask; | |
| //Server | |
| use pocketmine\Player; | |
| use pocketmine\Server; | |
| //Utils | |
| use pocketmine\tile\Tile; | |
| use pocketmine\tile\Sign; | |
| use pocketmine\utils\Config; | |
| //Command | |
| use pocketmine\command\command; | |
| use pocketmine\command\CommandSender; | |
| use pocketmine\command\CommandExecutor; | |
| use pocketmine\command\ConsoleCommandSender; | |
| //API | |
| use RuinPray\ui\elements\Label; | |
| use RuinPray\ui\UI; | |
| use RuinPray\ui\elements\Input; | |
| use RuinPray\ui\elements\StepSlider; | |
| use pocketmine\network\mcpe\protocol\ModalFormRequestPacket; | |
| class main extends PluginBase implements Listener{ | |
| public $state; | |
| public $delay; | |
| public function onEnable(){ | |
| $this->pluginname = "CmdSignPlugin"; | |
| $this->message_tag = "§r§b§l[ CMD ]§r "; | |
| $this->getLogger()->notice($this->pluginname."が有効化されました。"); | |
| $this->getServer()->getPluginManager()->registerEvents($this, $this); | |
| $this->permission = $this->getServer()->getPluginManager()->getPlugin("PermissionPlugin"); | |
| if($this->permission === NULL){ | |
| $this->getLogger()->info("PermissionPluginを読み込めませんでした。"); | |
| $this->getLogger()->info("サーバーを停止します。"); | |
| $this->getServer()->shutdown(); | |
| }else{ | |
| $this->getLogger()->info("PermissionPluginを読み込みました"); | |
| } | |
| } | |
| public function onSignChange(SignChangeEvent $event){ | |
| $player = $event->getPlayer(); | |
| $name = $player->getName(); | |
| $data = $event->getLines(); | |
| if($data[0] == "cmd_1"){ | |
| //全対象 | |
| $event->setLines(["[COMMAND]", $data[1], "/".$data[2], $data[3]]); | |
| }else if($data[0] == "cmd_2"){ | |
| //確認 | |
| $event->setLines(["[CONFIRM]", $data[1], "/".$data[2], $data[3]]); | |
| } | |
| } | |
| public function onTouch(PlayerInteractEvent $event){ | |
| $player = $event->getPlayer(); | |
| $name = $player->getName(); | |
| $pos = new Vector3($event->getBlock()->getX(), $event->getBlock()->getY(), $event->getBlock()->getZ()); | |
| $sign = $event->getBlock()->getLevel()->getTile($pos); | |
| if($sign instanceof Sign){ | |
| if($sign->getLine(0) == "[COMMAND]"){ | |
| $cmd = $sign->getLine(2).$sign->getLine(3); | |
| if(!isset($this->delay[$name])){ | |
| $this->delay[$name] = true; | |
| $this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "unLockTask"], [$name]), 8 * 1); | |
| if($this->permission->getPermission($player, $cmd)){ | |
| $this->getServer()->getCommandMap()->dispatch($player, ltrim($cmd, "/")); | |
| }else{ | |
| $player->sendMessage("§r§d§l[ PERMISSION ]§r このコマンドを実行する権限がありません。"); | |
| } | |
| }else{ | |
| //$player->sendMessage($this->message_tag."コマンド[".$cmd."]を実行する場合はもう一度実行してください。"); | |
| } | |
| }else if($sign->getLine(0) == "[CONFIRM]"){ | |
| $cmd = $sign->getLine(2).$sign->getLine(3); | |
| if(!isset($this->state[$name])){ | |
| $player->sendMessage($this->message_tag."コマンド[".$cmd."]を実行する場合はもう一度実行してください。"); | |
| $this->state[$name] = true; | |
| $this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "resetTask"], [$name, true]), 20 * 3); | |
| }else{ | |
| $this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "resetTask"], [$name, false]), 1); | |
| if(!isset($this->delay[$name])){ | |
| $this->delay[$name] = true; | |
| $this->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "unLockTask"], [$name]), 8 * 1); | |
| if($this->permission->getPermission($player, $cmd)){ | |
| $this->getServer()->getCommandMap()->dispatch($player, ltrim($cmd, "/")); | |
| }else{ | |
| $player->sendMessage("§r§d§l[ PERMISSION ]§r このコマンドを実行する権限がありません。"); | |
| } | |
| }else{ | |
| //$player->sendMessage($this->message_tag."コマンド[".$cmd."]を実行する場合はもう一度実行してください。"); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| public function resetTask(string $name, bool $bool){ | |
| if($bool && isset($this->state[$name])){ | |
| $this->getServer()->getPlayer($name)->sendMessage($this->message_tag."一定時間内に実行されなかったためキャンセルされました。"); | |
| } | |
| unset($this->state[$name]); | |
| } | |
| public function unLockTask(string $name){ | |
| unset($this->delay[$name]); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment