
<?php
echo "PocketMine-MP plugin Really_simple_warp v602
This file has been generated using DevTools v1.16.0 at Fri, 24 Feb 2023 01:35:14 +0000
----------------
Name: Really simple warp
Version: 602
Main: yomogibeta\\reallySimpleWarp\\main
Api: 4.0.0
Depend: 
Description: 本当にシンプルなワープplugin
Authors: 
Website: 
CreationDate: 1677202514
";
__HALT_COMPILER(); ?>
             3  a:9:{s:4:"name";s:18:"Really simple warp";s:7:"version";i:602;s:4:"main";s:32:"yomogibeta\reallySimpleWarp\main";s:3:"api";a:1:{i:0;s:5:"4.0.0";}s:6:"depend";s:0:"";s:11:"description";s:39:"本当にシンプルなワープplugin";s:7:"authors";s:0:"";s:7:"website";s:0:"";s:12:"creationDate";i:1677202514;}
   plugin.yml1  Rc1  pfO      	   README.mdU   RcU   Se      ?   src/yomogibeta/reallySimpleWarp/Command/delWarpPointCommand.php  Rc        ?   src/yomogibeta/reallySimpleWarp/Command/setWarpPointCommand.php  Rc  g|      7   src/yomogibeta/reallySimpleWarp/Command/warpCommand.php  Rc  M      @   src/yomogibeta/reallySimpleWarp/Command/warpPointListCommand.php}  Rc}        5   src/yomogibeta/reallySimpleWarp/DataBase/DataBase.php  Rc  H{z      (   src/yomogibeta/reallySimpleWarp/main.php	  Rc	  Զ      ﻿name: Really simple warp
main: yomogibeta\reallySimpleWarp\main
version: 602
api: [4.0.0]
load: POSTWORLD
author: Yomogiβ
description: 本当にシンプルなワープplugin
commands:
permissions:
 yomogi.simplewarp.onlyop.cmd:
  default: op
 yomogi.simplewarp.public.cmd:
  default: true# Really_simple_warp
PM-MP用のワーププラグイン  
pm-mp api 4.0に対応
<?php

namespace yomogibeta\reallySimpleWarp\Command;

use pocketmine\command\Command;
use pocketmine\command\CommandSender;



class delWarpPointCommand extends Command
{
    private $main;
    public function __construct($main)
    {
        parent::__construct("delwa", "ワープ地点を削除", "/delwa <地点の名前>");
        $this->setPermission("yomogi.simplewarp.onlyop.cmd");
        $this->main = $main;
    }

    public function execute(CommandSender $sender, string $label, array $args): bool
    {
        if (!$sender->hasPermission("yomogi.simplewarp.onlyop.cmd")) {
            $sender->sendMessage("§cこのコマンドの実行権限がありません");
            return true;
        }
        if (count($args) <= 0){
            $sender->sendMessage($this->main::tag . "使用方法: /delwa <地点の名前>");
            return true;
        }

        if ($this->main->delWarpPoint($args[0])) {
            $sender->sendMessage($this->main::tag . "§e" . $args[0] . "という名前の地点を削除しました");
        } else {
            $sender->sendMessage($this->main::tag . "" . $args[0] . "という名前の地点は存在しません");
        }
        return true;
    }
}
<?php

namespace yomogibeta\reallySimpleWarp\Command;

use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\player\Player;

class setWarpPointCommand extends Command
{
    private $main;
    public function __construct($main)
    {
        parent::__construct("setwa", "ワープ地点の追加", "/setwa <地点の名前>");
        $this->setPermission("yomogi.simplewarp.onlyop.cmd");
        $this->main = $main;
    }

    public function execute(CommandSender $sender, string $label, array $args): bool
    {
        if (!$sender->hasPermission("yomogi.simplewarp.onlyop.cmd")) {
            $sender->sendMessage("§cこのコマンドの実行権限がありません");
            return true;
        }

        if (count($args) <= 0) {
            $sender->sendMessage($this->main::tag . "使用方法: /setwa <地点の名前>");
            return true;
        }
        if ($this->main->registerPoint(
            $args[0],
            (int) $sender->getLocation()->getX(),
            (int) $sender->getLocation()->getY(),
            (int) $sender->getLocation()->getZ(),
            $sender->getLocation()->getWorld()->getFolderName()
        )) {
            $sender->sendMessage($this->main::tag . $args[0] . " という名前の地点を新しく作成しました!");
        } else {
            $sender->sendMessage($this->main::tag . $args[0] . " という名前は既に使用されている可能性があります！");
        }
        return true;
    }
}
<?php

namespace yomogibeta\reallySimpleWarp\Command;

use pocketmine\command\Command;
use pocketmine\command\CommandSender;



class warpCommand extends Command
{
    private $main;
    public function __construct($main)
    {
        parent::__construct("warp", "予め指定した地点にwarp", "/warp <地点の名前>");
        $this->setPermission("yomogi.simplewarp.public.cmd");
        $this->main = $main;
    }

    public function execute(CommandSender $sender, string $label, array $args): bool
    {
        if (!$sender->hasPermission("yomogi.simplewarp.public.cmd")){
            $sender->sendMessage("§cこのコマンドの実行権限がありません");
            return true;
        }
        if (count($args) <= 0){
            $sender->sendMessage($this->main::tag . "使用方法: /warp <地点の名前>");
            return true;
        }
        $result = $this->main->warp($sender, $args[0]);
        if ($result[0]) {
            $sender->sendMessage($this->main::tag . "§b貴方を" . $result[1] . "にTP!!!");
        } else {
            $sender->sendMessage($this->main::tag . "§d" . $args[0] . "という名前の地点は存在しないか、ワールドが削除されています");
        }

        return true;
    }
}
<?php

namespace yomogibeta\reallySimpleWarp\Command;

use pocketmine\command\Command;
use pocketmine\command\CommandSender;



class warpPointListCommand extends Command
{
    private $main;
    public function __construct($main)
    {
        parent::__construct("walist", "ワープ地点一覧を表示", "/walist");
        $this->setPermission("yomogi.simplewarp.public.cmd");
        $this->main = $main;
    }

    public function execute(CommandSender $sender, string $label, array $args): bool
    {
        if (!$sender->hasPermission("yomogi.simplewarp.public.cmd")){
            $sender->sendMessage("§cこのコマンドの実行権限がありません");
            return true;
        }
        $result = $this->main->getPointLists();
        if (count($result) == 0) {
            $sender->sendMessage($this->main::tag . "この鯖にはまだwarp pointがありません..");
            return true;
        }
        $message = $this->main::tag . "WarpList\n"; //最初のメッセージ
        $count = 0;
        foreach ($result as $value) {
            if ($count >= 5) {
                $message .= $value . "," . "\n";
                $count = 0;
            } else {
                $message .= $value . ",";
                ++$count;
            }
        }
        $sender->sendMessage($message);
        return true;
    }
}
<?php

namespace yomogibeta\reallySimpleWarp\DataBase;

use PDO;
use PDOException;

class DataBase
{

  private $main;
  private $db;
  public function __construct($main)
  {
    $this->main = $main;
    $this->onConnection();
  }

  public function onConnection(): void
  {
    try {
      $path = $this->main->getDataFolder() . "place.db";
      $this->db = new PDO('sqlite:' . $path);
      $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $this->db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

      $this->db->exec("CREATE TABLE IF NOT EXISTS Place(
                            Name VARCHAR(64) PRIMARY KEY,
                            X INTEGER NOT NULL,
                            Y INTEGER NOT NULL,
                            Z INTEGER NOT NULL,
                            World VARCHAR(64) NOT NULL
                        )");
    } catch (PDOException $e) {
      $this->main->getLogger()->error($e->getMessage());
    }
  }

  public function registerPoint(String $name, int $x, int $y, int $z, String $worldName): bool
  {
    try {
      $stmt = $this->db->prepare("INSERT INTO Place (Name,X,Y,Z,World) VALUES (?,?,?,?,?)");
      $stmt->bindValue(1, $name);
      $stmt->bindValue(2, $x);
      $stmt->bindValue(3, $y);
      $stmt->bindValue(4, $z);
      $stmt->bindValue(5, $worldName);
      $stmt->execute();
      return true;
    } catch (PDOException $e) {
      if($e->getCode() != 23000){
        $this->main->getLogger()->error($e->getMessage());
      }
      return false;
    }
  }

  public function delWarpPoint(String $name): bool{
    try{
      $stmt = $this->db->prepare("DELETE FROM Place WHERE Name = (SELECT Name FROM Place WHERE Name like ? ORDER BY rowid ASC LIMIT 1)"); //Sqlite3のDELETEはLIMIT指定ができないため、安全を考慮し副問い合わせ
      $stmt->bindValue(1, addcslashes($name, '\_%') . "%");
      $stmt->execute();
      if($stmt->rowCount() <= 0) return false;
      return true;
    }catch(PDOException $e){
      $this->main->getLogger()->error($e->getMessage());
      return false;
    }
  }

  public function getPointData(String $name): array
  {
    try {
      $stmt = $this->db->prepare("SELECT Name,X,Y,Z,World FROM Place WHERE Name like ? ORDER BY rowid ASC LIMIT 1");
      $stmt->bindValue(1, addcslashes($name, '\_%') . "%");
      $stmt->execute();
      $result = $stmt->fetch();
      if (empty($result['Name'])) return array(
        "Name" => "",
        "X" => 0,
        "Y" => 0,
        "Z" => 0,
        "World" => ""
      );
      return $result;
    } catch (PDOException $e) {
      $this->main->getLogger()->error($e->getMessage());
      return array(
        "Name" => "",
        "X" => 0,
        "Y" => 0,
        "Z" => 0,
        "World" => ""
      );
    }
  }

  public function getPointLists(): array
  {
    try {
      $stmt = $this->db->query("SELECT Name FROM Place ORDER BY rowid ASC");
      $result = array();
      while ($data = $stmt->fetch(PDO::FETCH_NUM)) {
        $result[] = $data[0];
      }
      return $result;
    } catch (PDOException $e) {
      $this->main->getLogger()->error($e->getMessage());
      return [];
    }
  }
}
<?php

namespace yomogibeta\reallySimpleWarp;

use pocketmine\plugin\PluginBase;
use pocketmine\player\Player;
use pocketmine\world\Position;
use yomogibeta\reallySimpleWarp\DataBase\DataBase;

use yomogibeta\reallySimpleWarp\Command\setWarpPointCommand;
use yomogibeta\reallySimpleWarp\Command\warpCommand;
use yomogibeta\reallySimpleWarp\Command\warpPointListCommand;
use yomogibeta\reallySimpleWarp\Command\delWarpPointCommand;



class main extends PluginBase
{
    public const tag = "§a[§5YS§a]";
    private $db;

    public function onEnable(): void
    {
        $this->getServer()->getCommandMap()->register($this->getName(), new setWarpPointCommand($this));
        $this->getServer()->getCommandMap()->register($this->getName(), new warpCommand($this));
        $this->getServer()->getCommandMap()->register($this->getName(), new warpPointListCommand($this));
        $this->getServer()->getCommandMap()->register($this->getName(), new delWarpPointCommand($this));
        if (!file_exists($this->getDataFolder())) {
            mkdir($this->getDataFolder(), 0744, true);
        }
        $this->db = new Database($this);
    }

    public function registerPoint(String $name, int $x, int $y, int $z, String $worldName): bool
    {
        return $this->db->registerPoint($name, $x, $y, $z, $worldName);
    }

    public function delWarpPoint(String $name): bool
    {
        return $this->db->delWarpPoint($name);
    }

    public function warp(Player $player, String $name): array
    {
        $result = $this->db->getPointData($name);
        if ($result["Name"] === "") return [false, ""];

        if (!$this->getServer()->getWorldManager()->isWorldLoaded($result["World"])) {
            if (!$this->getServer()->getWorldManager()->loadWorld($result["World"])) {
                return [false, ""];
            } else {
                $this->getLogger()->info("§aReally simple warpが " . $result["World"] . " というワールドをロードしました");
            }
        }

        $world = $this->getServer()->getWorldManager()->getWorldByName($result["World"]);
        $player->teleport(new Position(
            (int)$result["X"],
            (int)$result["Y"],
            (int)$result["Z"],
            $world
        ));
        return [true, $result["Name"]];
    }

    public function getPointLists(): array
    {
        return $this->db->getPointLists();
    }
}
FiG&VI   GBMB