Skip to content

Instantly share code, notes, and snippets.

@jasonw4331
Last active June 17, 2019 00:30
Show Gist options
  • Select an option

  • Save jasonw4331/d8c76d5c697c054b73be8871b7913656 to your computer and use it in GitHub Desktop.

Select an option

Save jasonw4331/d8c76d5c697c054b73be8871b7913656 to your computer and use it in GitHub Desktop.
Allows working dimensions to exist in PMMP
<?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
}
}
}
}
}
}
}
@witalijx
Copy link
Copy Markdown

witalijx commented Nov 4, 2018

how?

@Wertzui123
Copy link
Copy Markdown

Join a nether portal

@jasonw4331
Copy link
Copy Markdown
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