From 196c42d6c142210bcd267e3cc26d1fc1ad76b9cd Mon Sep 17 00:00:00 2001 From: alejandroliu Date: Fri, 26 Aug 2016 14:55:14 +0200 Subject: [PATCH] Importing 1.0.0 --- README.md | 115 +++++++++++++++++- media/SignWarp-icon.png | Bin 0 -> 17263 bytes plugin.yml | 22 ++++ src/alejandroliu/SignWarp/Main.php | 183 +++++++++++++++++++++++++++++ 4 files changed, 318 insertions(+), 2 deletions(-) create mode 100644 media/SignWarp-icon.png create mode 100644 plugin.yml create mode 100644 src/alejandroliu/SignWarp/Main.php diff --git a/README.md b/README.md index 703779e..504c13b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,113 @@ -# SignWarp -PocketMine-MP plugin for teleportation +SignWarp +======== + +* Summary: Warp between places using signs +* Dependency Plugins: n/a +* PocketMine-MP version: 1.4 - API 1.10.0 +* OptionalPlugins: ManyWorlds +* Categories: Teleportation +* Plugin Access: Commands, Tile Entities, Items/Blocks +* WebSite: [github](https://github.com/alejandroliu/pocketmine-plugins/tree/master/SignWarp) + +Overview +-------- + +A very basic Plugin implementing simple _Sign_ based warps. + +Basic Usage: + +Place a Sign with the following text: + + [SWARP] + x y z + +Where `x`, `y` and `z` are numbers containing the target warp +coordinates. + +Or for a warp between worlds: + + [WORLD] + world_name + x y z + +Where `world_name` is the world to warp to, and *optionally* the +`x`, `y` and `z` warp location. + +Documentation +------------- + +This plugin implements _warps_ through the placement of _signs_. You +need to create a sign with the text: + + [SWARP] + x y z + +`x`, `y` and `z` are integers containing the target coordinates for +this warp. + +To activate a _warp_ the player must touch a sign. That will teleport +the player to the new location described by the `x`, `y`, `z` +coordinates. + +The third and four lines of the sign are ignored and can be used to +describe the _warp_. + +To teleport between worlds, the sign text should look like: + + [WORLD] + world_name + x y z + +`world_name` is the target world to teleport to. `x`, `y`, `z` is the +target location. If not specified it defaults to the `spawn` world. + +The fourth line of the sign is ignored and can be contain any +descriptive text. + +To help identify potential _warp_ targets, the command `xyz` is +provided. Entering `/xyz` in-game will display the current +coordinates of the player. + +### Permission Nodes: + +* signwarp.cmd.xyz - Allows the user to show current x,y,z coordinates +* signwarp.place.sign - Allow user to create warp signs +* signwarp.touch.sign - Allow user to use warp signs + +TODO +---- + +* Add support for MultipleWorlds: + * to spawn point + * to a specific x,y,z coordinate + +Changes +------- + +* 1.1.0 : + * Added support for multiple worlds + * Added permissions for teleporting +* 1.0.0 : First release + +Copyright +========= + + SignWarp + Copyright (C) 2015 Alejandro Liu + All Rights Reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +128 70 128 +X:-100 Y:69 Z:1072 diff --git a/media/SignWarp-icon.png b/media/SignWarp-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5adf64e8f7ad5355ca69c9ae54aa9072b989eb46 GIT binary patch literal 17263 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 literal 0 HcmV?d00001 diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 0000000..ad56e86 --- /dev/null +++ b/plugin.yml @@ -0,0 +1,22 @@ +name: SignWarp +api: 1.10.0 +version: 1.0.0 +load: POSTWORLD +main: alejandroliu\SignWarp\Main +author: aliuly + +commands: + xyz: + description: Return x,y,z coordinates + usage: "/xyz" + +permissions: + signwarp.place.sign: + default: op + description: "Allow user to create warp" + signwarp.touch.sign: + default: true + description: "Allow user to use warp" + signwarp.cmd.xyz: + default: true + description: "Shows current x,y,z coordinates" diff --git a/src/alejandroliu/SignWarp/Main.php b/src/alejandroliu/SignWarp/Main.php new file mode 100644 index 0000000..e2550bf --- /dev/null +++ b/src/alejandroliu/SignWarp/Main.php @@ -0,0 +1,183 @@ +getLogger()->info("x=$x y=$y z=$z"); + + if ($x <= self::MIN_COORD || $z <= self::MIN_COORD) return false; + if ($x >= self::MAX_COORD || $z >= self::MAX_COORD) return false; + if ($y <= self::MIN_HEIGHT || $y >= self::MAX_HEIGHT) return false; + $vec = [$x,$y,$z]; + return true; + } + public function onEnable(){ + $this->getServer()->getPluginManager()->registerEvents($this, $this); + } + + private function shortWarp(PlayerInteractEvent $event,$sign){ + if(empty($sign[1])){ + $event->getPlayer()->sendMessage("[SignWarp] Missing coordinates"); + return; + } + $mv = []; + if (!$this->check_coords($sign[1],$mv)) { + $event->getPlayer()->sendMessage("[SignWarp] Invalid coordinates ".$sign[1]); + return; + } + if(!$event->getPlayer()->hasPermission("signwarp.touch.sign")) { + $event->getPlayer()->sendMessage("Nothing happens..."); + return; + } + list($x,$y,$z) = $mv; + $event->getPlayer()->sendMessage("Warping to $x,$y,$z..."); + $event->getPlayer()->teleport(new Vector3($x,$y,$z)); + Server::getInstance()->broadcastMessage($event->getPlayer()->getName()." teleported!"); + } + private function longWarp(PlayerInteractEvent $event,$sign){ + if(empty($sign[1])){ + $event->getPlayer()->sendMessage("[SignWarp] Missing world name"); + return; + } + if (!$this->getServer()->isLevelGenerated($sign[1])) { + $event->getPlayer()->sendMessage("[SignWarp] World \"".$sign[1]."\" does not exist!"); + return; + } + if(!$event->getPlayer()->hasPermission("signwarp.touch.sign")) { + $event->getPlayer()->sendMessage("Nothing happens..."); + return; + } + $level = $sign[1]; + if (!$this->getServer()->isLevelLoaded($level)) { + $event->getPlayer()->sendMessage("[SignWarp] Preparing world \"$level\""); + if (!$this->getServer()->loadLevel($level)) { + $event->getPlayer()->sendMessage("[SignWarp] Unable to load World \"$level\""); + return; + } + } + $mv = []; + if ($this->check_coords($sign[2],$mv)) { + list($x,$y,$z) = $mv; + $mv = new Vector3($x,$y,$z); + } else { + $mv = null; + } + $event->getPlayer()->sendMessage("Teleporting..."); + $world = $this->getServer()->getLevelByName($level); + $event->getPlayer()->teleport($world->getSafeSpawn($mv)); + $this->getServer()->broadcastMessage($event->getPlayer()->getName()." teleported to $level"); + } + + public function playerBlockTouch(PlayerInteractEvent $event){ + if($event->getBlock()->getID() == 323 || $event->getBlock()->getID() == 63 || $event->getBlock()->getID() == 68){ + $sign = $event->getPlayer()->getLevel()->getTile($event->getBlock()); + if(!($sign instanceof Sign)){ + return; + } + $sign = $sign->getText(); + if($sign[0]== self::SHORT_WARP){ + $this->shortWarp($event,$sign); + } elseif ($sign[0]== self::LONG_WARP){ + $this->longWarp($event,$sign); + } + } + } + private function breakSign(SignChangeEvent $event,$msg) { + $event->getPlayer()->sendMessage("[SignWarp] $msg"); + $event->setLine(0,"[BROKEN]"); + return false; + } + + private function validateLongWarp(SignChangeEvent $event,$sign) { + if(!$event->getPlayer()->hasPermission("signwarp.place.sign")) + return $this->breakSign($event,"You are not allow to make Warp sign"); + if(empty($sign[1]) === true) + return $this->breakSign($event,"World name not set"); + if (!$this->getServer()->isLevelGenerated($sign[1])) + return $this->breakSign($event,"World \"".$sign[1]."\" does not exist!"); + $event->getPlayer()->sendMessage("[SignWarp] Portal to world \"".$sign[1]."\" created!"); + return true; + } + private function validateShortWarp(SignChangeEvent $event,$sign) { + if(!$event->getPlayer()->isOp()) + return $this->breakSign($event,"You are not allow to make Warp sign"); + if(empty($sign[1]) === true) + return $this->breakSign($event,"World name not set"); + $mv = array(); + if (!$this->check_coords($sign[1],$mv)) + return $this->breakSign($event,"Invalid coordinates ".$sign[1]); + + $event->getPlayer()->sendMessage("[SignWarp] Warp to ".implode(',',$mv)." created"); + return true; + } + + public function tileupdate(SignChangeEvent $event){ + if($event->getBlock()->getID() == 323 || $event->getBlock()->getID() == 63 || $event->getBlock()->getID() == 68){ + $sign = $event->getPlayer()->getLevel()->getTile($event->getBlock()); + if(!($sign instanceof Sign)){ + return true; + } + $sign = $event->getLines(); + if($sign[0]==self::SHORT_WARP){ + return $this->validateShortWarp($event,$sign); + } elseif($sign[0]==self::LONG_WARP){ + return $this->validateLongWarp($event,$sign); + } + } + return true; + } + + public function onCommand(CommandSender $sender,Command $cmd,$label, array $args) { + switch ($cmd->getName()) { + case "xyz": + if ($sender instanceof Player) { + if ($sender->hasPermission("signwarp.cmd.xyz")) { + $pos = $sender->getPosition(); + $sender->sendMessage("You are at ".intval($pos->getX()).",".intval($pos->getY()).",".intval($pos->getZ())); + } else { + $sender->sendMessage("[SignWarp] You do not have permission to do that."); + } + } else { + $sender->sendMessage("[SignWarp] This command may only be used in-game"); + } + return true; + } + return false; + } + +}