Ejemplo n.º 1
0
 public function launch(Player $player)
 {
     $dir = $player->getDirectionVector();
     $frontPos = $player->add($dir->multiply(1.1));
     $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $frontPos->x), new Double("", $frontPos->y + $player->getEyeHeight()), new Double("", $frontPos->z)]), "Motion" => new Enum("Motion", [new Double("", $dir->x), new Double("", $dir->y), new Double("", $dir->z)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])]);
     $f = $this->f;
     $launched = Entity::createEntity($this->getEntityName(), $player->chunk, $nbt);
     $launched->setMotion($launched->getMotion()->multiply($f));
     if ($launched instanceof Projectile) {
         $player->server->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($launched));
         if ($projectileEv->isCancelled()) {
             $launched->kill();
         } else {
             $launched->spawnToAll();
             $player->level->addSound(new LaunchSound($player), $player->getViewers());
         }
     } else {
         $launched->spawnToAll();
     }
 }
Ejemplo n.º 2
0
 public function onActivate(Item $item, Player $player = null)
 {
     //fix for usage in Level->addSound, possible memory leak
     if ($player instanceof Player) {
         $players = $player->getViewers();
     } else {
         $players = null;
     }
     //fix for possible memory leak, limited addSound call
     if ($this->soundAdded == true) {
         return true;
     }
     switch ($this->downSideId) {
         case self::GLASS:
         case self::GLOWSTONE:
             $this->getLevel()->addSound(new NoteblockSound($this, NoteblockSound::INSTRUMENT_CLICK, $this->getStrength()), $players);
             $this->soundAdded = true;
             break;
         case self::SAND:
         case self::GRAVEL:
             $this->getLevel()->addSound(new NoteblockSound($this, NoteblockSound::INSTRUMENT_TABOUR, $this->getStrength()), $players);
             $this->soundAdded = true;
             break;
         case self::WOOD:
             $this->getLevel()->addSound(new NoteblockSound($this, NoteblockSound::INSTRUMENT_BASS, $this->getStrength()), $players);
             $this->soundAdded = true;
             break;
         case self::STONE:
             $this->getLevel()->addSound(new NoteblockSound($this, NoteblockSound::INSTRUMENT_BASS_DRUM, $this->getStrength()), $players);
             $this->soundAdded = true;
             break;
         default:
             $this->getLevel()->addSound(new NoteblockSound($this, NoteblockSound::INSTRUMENT_PIANO, $this->getStrength()), $players);
             $this->soundAdded = true;
             break;
     }
     return true;
 }
 public function removePlayerIventory(Player $bp)
 {
     if ($bp != null) {
         $bp->getInventory()->setBoots(new Item(0));
         $bp->getInventory()->setChestplate(new Item(0));
         $bp->getInventory()->setHelmet(new Item(0));
         $bp->getInventory()->setLeggings(new Item(0));
         $bp->getInventory()->sendArmorContents($bp->getViewers());
         $bp->getInventory()->sendContents($bp);
         $bp->getInventory()->clearAll();
     }
 }
Ejemplo n.º 4
0
 public function setGamemode(Player $player, $gm)
 {
     if ($gm < 0 or $gm > 3 or $player->gamemode === $gm) {
         return \false;
     }
     $player->getServer()->getPluginManager()->callEvent($ev = new PlayerGameModeChangeEvent($player, (int) $gm));
     if ($ev->isCancelled()) {
         return false;
     }
     if (($player->gamemode & 0x1) === ($gm & 0x1)) {
         $player->gamemode = $gm;
         $player->sendMessage(TextFormat::DARK_AQUA . "게임모드가 변경되었습니다, " . Server::getGamemodeString($player->getGamemode()) . ".\n");
     } else {
         $player->gamemode = $gm;
         $player->sendMessage(TextFormat::DARK_AQUA . "게임모드가 변경되었습니다, " . Server::getGamemodeString($player->getGamemode()) . ".\n");
         $player->getInventory()->clearAll();
         $player->getInventory()->sendContents($player->getViewers());
         $player->getInventory()->sendHeldItem($player->getViewers());
     }
     $player->namedtag->playerGameType = new Int("playerGameType", $player->gamemode);
     $player->sendMessage(TextFormat::DARK_AQUA . "새 게임모드 적용을 위해 서버에서 킥처리됩니다.");
     $this->getServer()->getScheduler()->scheduleDelayedTask(new CallbackTask([$this, "Kick"], [$player]), 50);
     return true;
 }
Ejemplo n.º 5
0
 /**
  * Send Mods
  *
  * @param StatueModel $statue        	
  * @param Player $p        	
  * @internal param unknown $modId
  */
 public function spawnMods(StatueModel $statue, Player $p)
 {
     $pk = new AddEntityPacket();
     $pk->eid = $statue->eid;
     $pk->type = $statue->networkId;
     $pk->x = $statue->position->x;
     $pk->y = $statue->position->y;
     $pk->z = $statue->position->z;
     $pk->yaw = 0;
     $pk->pitch = 30;
     $pk->metadata = array();
     $p->dataPacket($pk);
     Server::broadcastPacket($p->getViewers(), $pk);
     $pk = new SetEntityMotionPacket();
     $pk->entities = [[$statue->eid, 0, 290, 0]];
     $p->dataPacket($pk);
     Server::broadcastPacket($p->getViewers(), $pk);
     $p->addEntityMotion($statue->eid, 64, 290, 0);
 }