Last active
June 17, 2019 00:30
-
-
Save jasonw4331/d8c76d5c697c054b73be8871b7913656 to your computer and use it in GitHub Desktop.
Allows working dimensions to exist in PMMP
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 | |
| /** | |
| * @name Dimensions | |
| * @main jasonwynn10\Dimensions\Main | |
| * @version 0.1.0 | |
| * @api 3.0.0-ALPHA9 | |
| * @description A plugin script which allows working dimensions to exist in PMMP's PocketMine-MP | |
| * @author jasonwynn10 | |
| */ | |
| namespace jasonwynn10\Dimensions { | |
| use pocketmine\block\Block; | |
| use pocketmine\event\server\DataPacketReceiveEvent; | |
| use pocketmine\event\Listener; | |
| use pocketmine\network\mcpe\protocol\ChangeDimensionPacket; | |
| use pocketmine\network\mcpe\protocol\PlayerActionPacket; | |
| use pocketmine\network\mcpe\protocol\PlayStatusPacket; | |
| use pocketmine\network\mcpe\protocol\types\DimensionIds; | |
| use pocketmine\Player; | |
| use pocketmine\plugin\Plugin; | |
| use pocketmine\plugin\PluginBase; | |
| use pocketmine\scheduler\PluginTask; | |
| class Main extends PluginBase implements Listener { | |
| public function onEnable() { | |
| $this->getServer()->getPluginManager()->registerEvents($this, $this); | |
| } | |
| public function onPacket(DataPacketReceiveEvent $ev) { | |
| $packet = $ev->getPacket(); | |
| if($packet->pid() === PlayerActionPacket::NETWORK_ID) { | |
| /** @var PlayerActionPacket $packet */ | |
| if($packet->action === PlayerActionPacket::ACTION_DIMENSION_CHANGE_REQUEST) { | |
| $blockId = $ev->getPlayer()->getLevel()->getBlock($ev->getPlayer()->asVector3())->getId(); | |
| if($blockId === Block::PORTAL) { | |
| if(!isset($ev->getPlayer()->dimension) or $ev->getPlayer()->dimension !== DimensionIds::NETHER) { | |
| $ev->getPlayer()->dimension = DimensionIds::NETHER; | |
| $pk = new ChangeDimensionPacket(); | |
| $pk->dimension = DimensionIds::NETHER; | |
| $pk->position = $ev->getPlayer()->asPosition(); | |
| $ev->getPlayer()->dataPacket($pk); | |
| //TODO: other players should not be able to see entities across dimensions | |
| $this->getServer()->getScheduler()->scheduleDelayedTask(new class($this, $ev->getPlayer()->getName()) extends PluginTask { | |
| public function __construct(Plugin $owner, string $player) { | |
| parent::__construct($owner); | |
| $this->player = $player; | |
| } | |
| public function onRun(int $currentTick) { | |
| /** @var Player|null $player */ | |
| $player = $this->getOwner()->getServer()->getplayer($this->player); | |
| $pk = new PlayStatusPacket(); | |
| $pk->status = PlayStatusPacket::PLAYER_SPAWN; | |
| $pk->protocol = 130; | |
| $player->getPlayer()->dataPacket($pk); | |
| } | |
| }, 10); // send after .5 seconds | |
| }else{ | |
| $ev->getPlayer()->dimension = 0; | |
| $pk = new ChangeDimensionPacket(); | |
| $pk->dimension = 0; | |
| $pk->position = $ev->getPlayer()->asPosition(); | |
| $ev->getPlayer()->dataPacket($pk); | |
| //TODO: other players should not be able to see entities across dimensions | |
| $this->getServer()->getScheduler()->scheduleDelayedTask(new class($this, $ev->getPlayer()->getName()) extends PluginTask { | |
| public function __construct(Plugin $owner, string $player) { | |
| parent::__construct($owner); | |
| $this->player = $player; | |
| } | |
| public function onRun(int $currentTick) { | |
| /** @var Player|null $player */ | |
| $player = $this->getOwner()->getServer()->getplayer($this->player); | |
| $pk = new PlayStatusPacket(); | |
| $pk->status = PlayStatusPacket::PLAYER_SPAWN; | |
| $pk->protocol = 130; | |
| $player->getPlayer()->dataPacket($pk); | |
| } | |
| }, 10); // send after .5 seconds | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } |
Join a nether portal
Author
It's supposed to match vanilla, but the code is made for API 3 alpha9
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
how?