From a68b589a2b1931d7a6e193aca42900822b740373 Mon Sep 17 00:00:00 2001 From: Alejandro Liu Date: Sat, 2 Jul 2016 09:15:24 +0200 Subject: [PATCH] 1.0.0 --- LICENSE | 339 ++++++++++++++++++++++++++++++++++++++ README.md | 83 +++++++++- media/ManyWorlds-icon.png | Bin 0 -> 44993 bytes plugin.yml | 30 ++++ src/ManyWorlds/Main.php | 217 ++++++++++++++++++++++++ 5 files changed, 667 insertions(+), 2 deletions(-) create mode 100644 LICENSE create mode 100644 media/ManyWorlds-icon.png create mode 100644 plugin.yml create mode 100644 src/ManyWorlds/Main.php diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d7f1051 --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/README.md b/README.md index a55dc49..1508763 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,81 @@ -# ManyWorlds -PocketMine-MP plugin for manipulating worlds +ManyWorlds +========== + +* Summary: Basic commands for MultiWorld functionality +* Dependency Plugins: n/a +* PocketMine-MP version: 1.4 - API 1.10.0 +* OptionalPlugins: n/a +* Categories: World Editing and Management, Teleportation +* Plugin Access: Commands, Manages Worlds +* WebSite: [github](https://github.com/alejandroliu/pocketmine-plugins/tree/master/ManyWorlds) + + +A very basic Plugin implementing Multiworld functionality. + +Basic Usage: + +* /mw tp *level* [player] +* /mw create *level* [seed [flat|normal [preset]]] +* /mw load *level* +* /mw ls [level] + +Documentation +------------- + +This plugin is a world manager that allows you to generate and load +worlds as well as teleport between worlds. + +### Commands: + +* mw tp *level* [player] + Teleports `player` to `level`. If no `player` is specified, it + teleports the current user. +* mw create *level* [seed] [flat|normal] [preset] + Creates a world named `level`. You can optionally specify a `seed` + as number, the generator (`flat` or `normal`) and a `preset` string. +* mw load *level* + Loads `level` directly. +* mw ls [level] + If `level` is not specified, it will list all available worlds. If + `level` is specified, it will provide details on that `level`. + +### Permission Nodes: + +* mw.cmd.tp - Allows users to travel to other worlds +* mw.cmd.tp.others - Allows users to make others travel to other worlds +* mw.cmd.world.create - Allows users to create worlds +* mw.cmd.world.load - Allows users to load worlds + +FAQ +--- + +* Q: Creating a world using `generator` doesn't work. +* A: PocketMine-MP has a bug in the `Server->generateLevel` method + where specifying a `generator` is called incorrectly. + + +Changes +------- + +* 1.0.0 : Initial release + +Copyright +--------- + + ManyWorlds + 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 . + diff --git a/media/ManyWorlds-icon.png b/media/ManyWorlds-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..edf01bf277ab07d656f8b5381fe84797e9551dde GIT binary patch literal 44993 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 Ycfqd4uaviZnE(I)07*qoM6N<$f|GbF#sB~S literal 0 HcmV?d00001 diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 0000000..2f5e50d --- /dev/null +++ b/plugin.yml @@ -0,0 +1,30 @@ +main: ManyWorlds\Main +api: 1.10.0 +load: POSTWORLD + +name: ManyWorlds +description: Manage Multiple Worlds +version: 1.0.0 +author: aliuly + +commands: + mw: + description: Manage worlds + usage: "/mw " + +permissions: + mw.cmd.tp: + default: op + description: "Allows users to travel to other worlds" + mw.cmd.tp.others: + default: op + description: "Allows users to make others travel to other worlds" + mw.cmd.world.create: + default: op + description: "Allows users to create worlds" + mw.cmd.world.load: + default: op + description: "Allows users to load worlds" + mw.cmd.world.ls: + default: op + description: "Allows users to list worlds" \ No newline at end of file diff --git a/src/ManyWorlds/Main.php b/src/ManyWorlds/Main.php new file mode 100644 index 0000000..18bd2a7 --- /dev/null +++ b/src/ManyWorlds/Main.php @@ -0,0 +1,217 @@ +getLogger()->info("ManyWorlds Loaded!"); + } + public function onCommand(CommandSender $sender, Command $cmd, $label, array $args) { + switch($cmd->getName()) { + case "mw": + if(isset($args[0])) { + $scmd = strtolower($args[0]); + switch ($scmd) { + case "tp": + return $this->mwTeleportCommand($sender,$args); + case "create": + return $this->mwWorldCreateCommand($sender,$args); + case "load": + case "ld": + return $this->mwWorldLoadCommand($sender,$args); + case "ls": + case "list": + return $this->mwWorldListCommand($sender,$args); + default: + $sender->sendMessage("Unknown sub command: $args[0]"); + return true; + } + } else { + $sender->sendMessage("Must specify sub command"); + return true; + } + break; + } + return false; + } + private function mwAutoLoad(CommandSender $c,$level) { + if (!$this->getServer()->isLevelLoaded($level)) { + if(!$this->checkPermission($c, "mw.cmd.world.load")) { + $c->sendMessage("[MW] $level is not loaded."); + return false; + } + if(!$this->getServer()->isLevelGenerated($level)) { + $c->sendMessage("[MW] No level with the name $level exists!"); + return false; + } + $c->sendMessage("[MW] Loading $level..."); + $this->getServer()->loadLevel($level); + } + return true; + } + + private function mwTeleportCommand(CommandSender $sender,array $args) { + if (!isset($args[1])) { + $sender->sendMessage("[MW] must specify level"); + return true; + } + + $level = $args[1]; + + if (isset($args[2])) { + // Teleport others + $player = $this->getServer()->getPlayer($args[2]); + if($this->checkPermission($sender, "universe.cmd.tp.others")) { + if ($player->isOnline()) { + if($player->getLevel() == $this->getServer()->getLevelByName($level)) { + $sender->sendMessage("[MW] " . $player . " is already in " . $level . "!"); + } else { + if ($this->mwAutoLoad($sender,$level)) { + $player->sendMessage("[MW] Teleporting you to " . $level . " at\n" . $sender->getName() . "'s request..."); + $world = $this->getServer()->getLevelByName($level); + $player->teleport($world->getSafeSpawn()); + $sender->sendMessage("[MW] " . $player . " has been teleported to " . $level . "!"); + } else { + $sender->sendMessage("[MW] Unable to teleport " . $player . " as\nlevel " . $level . " is not loaded!"); + } + } + } else { + $sender->sendMessage("[MW] ".$player." is offline!"); + } + } else { + return $this->permissionFail($sender); + } + } else { + // Teleport self + if ($sender instanceof Player) { + if ($this->checkPermission($sender,"mw.cmd.tp")) { + if(!($sender->getLevel() == $this->getServer()->getLevelByName($level))) { + if($this->mwAutoLoad($sender,$level)) { + $sender->sendMessage("[MW] Teleporting you to level " . $level . "..."); + $world = $this->getServer()->getLevelByName($level); + $sender->teleport($world->getSpawnLocation()); + $this->getServer()->broadcastMessage("[MW] ".$sender->getName()." teleported to $level"); + } else { + $sender->sendMessage("[MW] Unable to teleport you to " . $level . " as it\nis not loaded!"); + } + } else { + $sender->sendMessage("[Universe] You are already in " . $level . "!"); + } + } else { + return $this->permissionFail($sender); + } + } else { + $sender->sendMessage("[MW] This command may only be used in-game"); + } + } + return true; + } + private function mwWorldCreateCommand(CommandSender $sender, array $args) { + if(!isset($args[1])) { + $sender->sendMessage("[MW] Usage: create level seed generator options"); + return true; + } + if(!$this->checkPermission($sender, "mw.cmd.world.create")) { + return $this->permissionFail($sender); + } + $level = $args[1]; + if($this->getServer()->isLevelGenerated($level)) { + $sender->sendMessage("[MW] A world with the name " . $level . " already exists!"); + return true; + } + $seed = null; + $generator = null; + $options = []; + if(isset($args[2])) $seed = intval($args[2]); + if(isset($args[3])) { + $generator = Generator::getGenerator($args[3]); + } + if(isset($args[4])) $options = ["preset" => $args[4] ]; + $this->getServer()->broadcastMessage("[MW] Creating level " . $level . "... (Expect Lag)"); + $this->getServer()->generateLevel($level, $seed, $generator, $options); + $this->getServer()->loadLevel($level); + return true; + } + private function mwWorldLoadCommand(CommandSender $sender, array $args) { + if(!isset($args[1])) { + $sender->sendMessage("[MW] Must specify level name"); + return true; + } + $level = $args[1]; + if (!$this->mwAutoLoad($sender,$level)) { + $sender->sendMessage("[MW] Unable to load $level"); + } + return true; + } + private function mwWorldListCommand(CommandSender $sender, array $args) { + if(!$this->checkPermission($sender, "mw.cmd.world.ls")) { + return $this->permissionFail($sender); + } + if (isset($args[1])) { + $level = $args[1]; + if (!$this->mwAutoLoad($sender,$level)) { + $sender->sendMessage("[MW] Unable to load $level"); + return true; + } + $level = $this->getServer()->getLevelByName($level); + if (!$level) { + $sender->sendMessage("[MW] $level not loaded"); + return true; + } + //==== provider + $provider = $level->getProvider(); + $sender->sendMessage("Provider: ". get_class($provider)); + $sender->sendMessage("Path: ".$provider->getPath()); + $sender->sendMessage("Name: ".$provider->getName()); + $sender->sendMessage("Seed: ".$provider->getSeed()); + $sender->sendMessage("Generator: ".$provider->getGenerator()); + $sender->sendMessage("Generator Options: ".print_r($provider->getGeneratorOptions(),true));; + $spawn = $provider->getSpawn(); + $sender->sendMessage("Spawn: ".$spawn->getX().",".$spawn->getY().",".$spawn->getZ()); + return true; + } + + $dir = $this->getServer()->getDataPath(). "worlds"; + if (!is_dir($dir)) { + $sender->sendMessage("[MW] Missing path $dir"); + return true; + } + $dh = opendir($dir); + if (!$dh) return true; + while (($file = readdir($dh)) !== false) { + if ($file == '.' || $file == '..') continue; + if ($this->getServer()->isLevelLoaded($file)) { + $sender->sendMessage("- $file (loaded)"); + continue; + } + if ($this->getServer()->isLevelGenerated($file)) { + $sender->sendMessage("- $file"); + continue; + } + } + closedir($dh); + return true; + } + private function checkPermission(CommandSender $sender, $permission) { + if($sender->hasPermission($permission)) return true; + return false; + } + private function permissionFail(CommandSender $sender) { + $sender->sendMessage("You do not have permission to do that."); + return true; + } + public function onDisable() { + $this->getLogger()->info("ManyWorlds Unloaded!"); + } +}