Skip to content

Instantly share code, notes, and snippets.

@PJZ9n
Created July 29, 2019 02:50
Show Gist options
  • Save PJZ9n/487e8644b1b54408271986729c2316f9 to your computer and use it in GitHub Desktop.
Save PJZ9n/487e8644b1b54408271986729c2316f9 to your computer and use it in GitHub Desktop.
<?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