getPlayer() public method

public getPlayer ( )
示例#1
0
 public function onReceivePacket(DataPacketReceiveEvent $event)
 {
     $player = $event->getPlayer();
     $packet = $event->getPacket();
     if ($packet->pid() == Info::LOGIN_PACKET) {
         if ($packet->protocol1 < Info::CURRENT_PROTOCOL) {
             //Check if outdated client message is custom
             if (CustomAlerts::getAPI()->isOutdatedClientMessageCustom()) {
                 CustomAlerts::getAPI()->setOutdatedClientMessage(CustomAlerts::getAPI()->getDefaultOutdatedClientMessage($player));
             }
             //Outdated Client Kick Event
             $this->plugin->getServer()->getPluginManager()->callEvent(new CustomAlertsOutdatedClientKickEvent($player));
             //Check if Outdated Client message is not empty
             if (CustomAlerts::getAPI()->getOutdatedClientMessage() != null) {
                 $player->close("", CustomAlerts::getAPI()->getOutdatedClientMessage());
                 $event->setCancelled(true);
             }
         } elseif ($packet->protocol1 > Info::CURRENT_PROTOCOL) {
             //Check if outdated server message is custom
             if (CustomAlerts::getAPI()->isOutdatedServerMessageCustom()) {
                 CustomAlerts::getAPI()->setOutdatedServerMessage(CustomAlerts::getAPI()->getDefaultOutdatedServerMessage($player));
             }
             //Outdated Server Kick Event
             $this->plugin->getServer()->getPluginManager()->callEvent(new CustomAlertsOutdatedServerKickEvent($player));
             //Check if Outdated Server message is not empty
             if (CustomAlerts::getAPI()->getOutdatedServerMessage() != null) {
                 $player->close("", CustomAlerts::getAPI()->getOutdatedServerMessage());
                 $event->setCancelled(true);
             }
         }
     }
 }
示例#2
0
 public function onPkt(DataPacketReceiveEvent $e)
 {
     if ($e->getPacket()->pid() !== 0x0) {
         return;
     }
     $this->lastPing[strtolower($e->getPlayer()->getName())] = Binary::readLong($e->getPacket()->buffer) / 1000.0;
 }
 public function onDataPacketReceiveEvent(DataPacketReceiveEvent $event)
 {
     $packet = $event->getPacket();
     $player = $event->getPlayer();
     if ($packet instanceof InteractPacket) {
         if ($boat instanceof Boat) {
             if ($packet->action === 1) {
                 $this->riding[$player->getName()] = $packet->target;
             } elseif ($packet->action === 3) {
                 if (isset($this->riding[$player->getName()])) {
                     unset($this->riding[$player->getName()]);
                     $this->removeWaterField($player);
                 }
             }
         }
     } elseif ($packet instanceof MovePlayerPacket) {
         if (isset($this->riding[$player->getName()])) {
             $boat = $player->getLevel()->getEntity($this->riding[$player->getName()]);
             if ($boat instanceof Boat) {
                 $x = (int) floor($boat->x);
                 $y = (int) floor($boat->y) - 1;
                 $z = (int) floor($boat->z);
                 if (isset($this->waterField[$player->getName()]["pos"]) and $this->waterField[$player->getName()]["pos"] == "{$x}:{$y}:{$z}") {
                     return;
                 }
                 $this->setWaterField($player, $x, $y, $z, $player->getLevel());
             }
         }
     }
     //
 }
示例#4
0
文件: Main.php 项目: wodnr0804/NPC
 public function onPacketReceived(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk instanceof InteractPacket) {
         if (isset($this->npc[$pk->target])) {
             if (isset($this->msgQueue[$event->getPlayer()->getName()])) {
                 $npc = $this->npc[$pk->target];
                 $npc->setMessage($this->msgQueue[$event->getPlayer()->getName()]);
                 unset($this->msgQueue[$event->getPlayer()->getName()]);
                 $event->getPlayer()->sendMessage("You have set NPC " . TextFormat::AQUA . $npc->getName() . TextFormat::WHITE . " to say " . TextFormat::GREEN . $npc->getMessage());
                 return;
             } else {
                 $this->npc[$pk->target]->onInteract($event->getPlayer());
             }
         }
     }
 }
 public function onReceive(DataPacketReceiveEvent $event)
 {
     $p = $event->getPlayer();
     $pk = $event->getPacket();
     if ($pk instanceof PlayerActionPacket) {
         if ($pk->action === PlayerActionPacket::ACTION_START_BREAK) {
             $this->positions[$p->getName()] = $p->getLocation();
         }
     }
 }
示例#6
0
 public function onJump(DataPacketReceiveEvent $event)
 {
     $packet = $event->getPacket();
     if (!$packet instanceof PlayerActionPacket) {
         return;
     }
     $player = $event->getPlayer();
     if ($packet->action === PlayerActionPacket::ACTION_JUMP && isset($this->onChair[$player->getName()])) {
         $removepk = new RemoveEntityPacket();
         $removepk->eid = $this->onChair[$player->getName()];
         $this->getServer()->broadcastPacket($this->getServer()->getOnlinePlayers(), $removepk);
         unset($this->onChair[$player->getName()]);
     }
 }
示例#7
0
文件: Tnt.php 项目: XxmellonxX/MTNT1B
 public function onPacketReceived(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     $player = $event->getPlayer();
     if ($pk instanceof UseItemPacket and $pk->face === 0xff) {
         $item = $player->getInventory()->getItemInHand();
         if ($item->getId() == 369) {
             $mot = (new Random())->nextSignedFloat() * M_PI * 2;
             $tnt = Entity::createEntity("PrimedTNT", $player->getLevel()->getChunk($player->x >> 4, $player->z >> 4), new Compound("", ["Pos" => new Enum("Pos", [new Double("", $player->x + 0.5), new Double("", $player->y), new Double("", $player->z + 0.5)]), "Motion" => new Enum("Motion", [new Double("", -sin($mot) * 0.02), new Double("", 0.2), new Double("", -cos($mot) * 0.02)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)]), "Fuse" => new Byte("Fuse", 100)]));
             $tnt->spawnToAll();
             $player->getLevel()->addSound(new AnviluseSound($player), array($player));
             return true;
         }
     }
 }
 public function onInteract(DataPacketReceiveEvent $event)
 {
     $packet = $event->getPacket();
     if ($event->getPacket()->pid() === Info::INTERACT_PACKET) {
         $packet = $event->getPacket();
         $player = $event->getPlayer();
         $target = $player->getLevel()->getEntity($packet->target);
         if ($target instanceof Chair) {
             $action = $packet->action;
             if ($action === 2 or $action === 3) {
                 $target->standupSittingEntity();
                 $target->close();
             }
         }
     }
 }
示例#9
0
文件: Main.php 项目: moinngmg/Seat
 function athth(jfe $E)
 {
     $H = $E->getPacket();
     if ($H instanceof etws) {
         if ($H->action == 3) {
             $B = $E->getPlayer();
             $D = $B->getName();
             if (isset($this->link[$D])) {
                 $A = new f5rg();
                 $A->entities = [[$this->link[$D], 0, 0.4, 0]];
                 Server::broadcastPacket(Server::getInstance()->getOnlinePlayers(), $A);
                 $this->geahaajt($this->link[$D], $B->getId());
                 unset($this->link[$D]);
             }
         }
     }
 }
示例#10
0
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk->pid() !== ProtocolInfo::USE_ITEM_PACKET || $pk->face !== 0xff) {
         return false;
     }
     $p = $event->getPlayer();
     $inv = $p->getInventory();
     $i = $inv->getItemInHand();
     if (isset($this->armorTable[$id = $i->getID()])) {
         $ai = $inv->getArmorItem($type = $this->armorTable[$id]);
         $inv->setArmorItem($type, $i, $p);
         $inv->setItem($inv->getHeldItemSlot(), $ai);
         $inv->sendContents($p);
         $inv->sendArmorContents($p);
     }
 }
示例#11
0
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk->pid() !== ProtocolInfo::USE_ITEM_PACKET || $pk->face !== 0xff) {
         return false;
     }
     $p = $event->getPlayer();
     $inv = $p->getInventory();
     $i = $inv->getItemInHand();
     if ($i->getID() == 262) {
         $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $p->x), new Double("", $p->y + $p->getEyeHeight()), new Double("", $p->z)]), "Motion" => new Enum("Motion", [new Double("", -sin($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI)), new Double("", -sin($p->getPitch() / 180 * M_PI)), new Double("", cos($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $p->getyaw()), new Float("", $p->getPitch())])]);
         $arrow = new Arrow($p->chunk, $nbt, $p);
         $ev = new EntityShootBowEvent($p, Item::get(264, 0, 0), $arrow, 1.5);
         $this->getServer(0)->getPluginManager()->callEvent($ev);
         if ($ev->isCancelled()) {
             $arrow->kill();
         } else {
             $i->setCount($i->getCount() - 1);
             $inv->setItem($inv->getHeldItemSlot(), $i);
             $arrow->spawnToAll();
         }
     }
 }
示例#12
0
 public function onPacketReceived(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk instanceof InteractPacket) {
         if (isset($this->npcs[$pk->target])) {
             $this->getNPCByEID($pk->target)->onInteract($event->getPlayer());
         }
     }
 }
示例#13
0
 public function onDataPacketReceiveEvent(DataPacketReceiveEvent $event)
 {
     $packet = $event->getPacket();
     $player = $event->getPlayer();
     if ($packet instanceof EntityEventPacket) {
         if ($player->spawned === \true or $player->blocked === \false or $player->isAlive()) {
             $player->craftingType = 0;
             $player->setDataFlag(Player::DATA_FLAGS, Player::DATA_FLAG_ACTION, \false);
             // TODO: check if this should be true
             switch ($packet->event) {
                 case 9:
                     // Eating
                     $items = [Item::APPLE => 4, Item::MUSHROOM_STEW => 10, Item::BEETROOT_SOUP => 10, Item::BREAD => 5, Item::RAW_PORKCHOP => 3, Item::COOKED_PORKCHOP => 8, Item::RAW_BEEF => 3, Item::STEAK => 8, Item::COOKED_CHICKEN => 6, Item::RAW_CHICKEN => 2, Item::MELON_SLICE => 2, Item::GOLDEN_APPLE => 10, Item::PUMPKIN_PIE => 8, Item::CARROT => 4, Item::POTATO => 1, Item::BAKED_POTATO => 6, Item::COOKIE => 2, Item::COOKED_FISH => [0 => 5, 1 => 6], Item::RAW_FISH => [0 => 2, 1 => 2, 2 => 1, 3 => 1]];
                     $slot = $player->getInventory()->getItemInHand();
                     if (isset($items[$slot->getId()])) {
                         $this->getServer()->getPluginManager()->callEvent($ev = new PlayerItemConsumeEvent($player, $slot));
                         if ($ev->isCancelled()) {
                             $player->getInventory()->sendContents($this);
                             break;
                         }
                         $pk = new EntityEventPacket();
                         $pk->eid = $player->getId();
                         $pk->event = EntityEventPacket::USE_ITEM;
                         $player->dataPacket($pk);
                         Server::broadcastPacket($player->getViewers(), $pk);
                         $amount = $items[$slot->getId()];
                         if (\is_array($amount)) {
                             $amount = isset($amount[$slot->getDamage()]) ? $amount[$slot->getDamage()] : 0;
                         }
                         $ev = new EntityRegainHealthEvent($player, $amount, EntityRegainHealthEvent::CAUSE_EATING);
                         $this->getServer()->getPluginManager()->callEvent($ev);
                         if ($ev->isCancelled()) {
                             return;
                         }
                         --$slot->count;
                         $player->getInventory()->setItemInHand($slot, $player);
                         if ($slot->getId() === Item::MUSHROOM_STEW or $slot->getId() === Item::BEETROOT_SOUP) {
                             $this->getInventory()->addItem(Item::get(Item::BOWL, 0, 1));
                         } elseif ($slot->getId() === Item::RAW_FISH and $slot->getDamage() === 3) {
                             // Pufferfish
                             $player->addEffect(Effect::getEffect(Effect::HUNGER)->setAmplifier(2)->setDuration(15 * 20));
                             $player->addEffect(Effect::getEffect(Effect::POISON)->setAmplifier(3)->setDuration(60 * 20));
                         }
                     }
                     $event->setCancelled();
                     break;
             }
         }
         if ($packet instanceof PlayerActionPacket) {
             if ($packet->action == PlayerActionPacket::ACTION_JUMP) {
                 if ($event->getPlayer()->isSprinting()) {
                     HungerSystem::exhaustion($event->getPlayer(), HungerSystem::JUMPING_WHILE_SPRINTING);
                 } else {
                     if ($event->getPlayer()->isSprinting()) {
                         HungerSystem::exhaustion($event->getPlayer(), HungerSystem::JUMPING);
                     }
                 }
             }
             if ($packet->action == PlayerActionPacket::ACTION_START_SPRINT) {
                 $attribute = AttributeProvider::getInstance()->getAttribute($event->getPlayer());
                 if ($attribute->getHunger() < 6) {
                     $event->setCancelled();
                 }
             }
         }
     }
 }
示例#14
0
文件: Main.php 项目: onebone/NPC
 public function onPacketReceived(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk instanceof InteractPacket and $pk->action === InteractPacket::ACTION_LEFT_CLICK) {
         if (isset($this->npc[$pk->target])) {
             $npc = $this->npc[$pk->target];
             if (!isset($this->msgQueue[$event->getPlayer()->getName()]) and !isset($this->cmdQueue[$event->getPlayer()->getName()])) {
                 $npc->onInteract($event->getPlayer());
                 return;
             }
             if (isset($this->msgQueue[$event->getPlayer()->getName()])) {
                 $npc->setMessage($this->msgQueue[$event->getPlayer()->getName()]);
                 unset($this->msgQueue[$event->getPlayer()->getName()]);
                 $event->getPlayer()->sendMessage("You have set NPC " . TextFormat::AQUA . $npc->getName() . TextFormat::WHITE . " to say " . TextFormat::GREEN . $npc->getMessage());
             }
             if (isset($this->cmdQueue[$event->getPlayer()->getName()])) {
                 $npc->setCommand($this->cmdQueue[$event->getPlayer()->getName()]);
                 unset($this->cmdQueue[$event->getPlayer()->getName()]);
                 $event->getPlayer()->sendMessage("You have set NPC " . TextFormat::AQUA . $npc->getName() . TextFormat::WHITE . " to execute command " . TextFormat::GREEN . "/" . $npc->getCommand());
             }
         }
     }
 }
示例#15
0
文件: Gun.php 项目: Skull3x/MineBlock
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk->pid() !== ProtocolInfo::USE_ITEM_PACKET || $pk->face !== 0xff) {
         return false;
     }
     $ik = $this->isKorean();
     $m = $ik ? "[총] " : "[Gun] ";
     $p = $event->getPlayer();
     $n = $p->getName();
     $i = $this->getItem($this->g["Gun"], 1);
     $ii = $p->getInventory()->getItemInHand();
     if ($ii->getID() !== $i->getID() || $ii->getDamage() !== $i->getDamage()) {
         return;
     }
     if (!isset($this->cool[$n])) {
         $this->cool[$n] = 0;
     }
     $c = microtime(true) - $this->cool[$n];
     if ($c < 0) {
         $m .= $ik ? "쿨타임 :" . round(-$c, 1) . " 초" : "Cool : " . round($c * 100) / -100 . " sec";
     } elseif (($iv = $this->checkInven($p)) !== true) {
         $m .= $ik ? "당신은" . $iv[0] . "(" . $iv[1] . "개) 를 가지고있지않습니다. : " . $iv[2] . "개" : "You Don't have " . $iv[0] . "({$iv['1']}) You have : " . $iv[2];
     } else {
         $c = explode("~", $this->g["Cool"]);
         $this->cool[$n] = microtime(true) + rand($c[0], isset($c[1]) ? $c[1] : $c[0]);
         $pk = new ExplodePacket();
         $pk->x = $x = $p->x;
         $pk->y = $y = $p->y + $p->getEyeHeight();
         $pk->z = $z = $p->z;
         $pk->radius = 2;
         $pk->records = [];
         $this->getServer()->broadcastPacket($p->getLevel()->getUsingChunk($x >> 4, $z >> 4), $pk);
         $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $p->x), new Double("", $p->y + $p->getEyeHeight() - 0.2), new Double("", $p->z)]), "Motion" => new Enum("Motion", [new Double("", -sin($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI)), new Double("", -sin($p->getPitch() / 180 * M_PI)), new Double("", cos($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $p->getyaw()), new Float("", $p->getPitch())])]);
         $bullet = new Bullet($p->chunk, $nbt, $p);
         $bullet->spawnToAll();
         return;
     }
     if (isset($m)) {
         $p->sendMessage($m);
     }
     $event->setCancelled();
 }
示例#16
0
 public function onDataPacketReceiveEvent(DataPacketReceiveEvent $event)
 {
     $packet = $event->getPacket();
     $player = $event->getPlayer();
     if ($packet instanceof EntityEventPacket) {
         if ($player->spawned === \true or $player->blocked === \false or $player->isAlive()) {
             $player->craftingType = 0;
             $player->setDataFlag(Player::DATA_FLAGS, Player::DATA_FLAG_ACTION, \false);
             // TODO: check if this should be true
             switch ($packet->event) {
                 case 9:
                     // Eating
                     $items = [Item::GOLDEN_APPLE => 8];
                     $slot = $player->getInventory()->getItemInHand();
                     if (isset($items[$slot->getId()])) {
                         $this->getServer()->getPluginManager()->callEvent($ev = new PlayerItemConsumeEvent($player, $slot));
                         if ($ev->isCancelled()) {
                             $player->getInventory()->sendContents($player);
                             break;
                         }
                         $pk = new EntityEventPacket();
                         $pk->eid = $player->getId();
                         $pk->event = EntityEventPacket::USE_ITEM;
                         $player->dataPacket($pk);
                         Server::broadcastPacket($player->getViewers(), $pk);
                         $amount = $items[$slot->getId()];
                         if (\is_array($amount)) {
                             $amount = isset($amount[$slot->getDamage()]) ? $amount[$slot->getDamage()] : 0;
                         }
                         $ev = new EntityRegainHealthEvent($player, $amount, EntityRegainHealthEvent::CAUSE_EATING);
                         $this->getServer()->getPluginManager()->callEvent($ev);
                         if ($ev->isCancelled()) {
                             return;
                         }
                         --$slot->count;
                         $player->getInventory()->setItemInHand($slot, $player);
                     }
                     $event->setCancelled();
                     break;
             }
         }
         if ($packet instanceof PlayerActionPacket) {
             if ($packet->action == PlayerActionPacket::ACTION_JUMP) {
                 if ($event->getPlayer()->isSprinting()) {
                     HungerSystem::exhaustion($event->getPlayer(), HungerSystem::JUMPING_WHILE_SPRINTING);
                 } else {
                     if ($event->getPlayer()->isSprinting()) {
                         HungerSystem::exhaustion($event->getPlayer(), HungerSystem::JUMPING);
                     }
                 }
             }
             if ($packet->action == PlayerActionPacket::ACTION_START_SPRINT) {
                 $attribute = AttributeProvider::getInstance()->getAttribute($event->getPlayer());
                 if ($attribute->getHunger() < 6) {
                     $event->setCancelled();
                 }
             }
         }
     }
 }
示例#17
0
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     $p = $event->getPlayer();
     if ($pk->pid() == ProtocolInfo::ENTITY_EVENT_PACKET && $pk->event == 9) {
         $i = $p->getInventory()->getItemInHand();
         $items = [Item::APPLE => 4, Item::MUSHROOM_STEW => 10, Item::BEETROOT_SOUP => 10, Item::BREAD => 5, Item::RAW_PORKCHOP => 3, Item::COOKED_PORKCHOP => 8, Item::RAW_BEEF => 3, Item::STEAK => 8, Item::COOKED_CHICKEN => 6, Item::RAW_CHICKEN => 2, Item::MELON_SLICE => 2, Item::GOLDEN_APPLE => 10, Item::PUMPKIN_PIE => 8, Item::CARROT => 4, Item::POTATO => 1, Item::BAKED_POTATO => 6];
         if ($p->getHealth() >= 20 && $p->getHealth() < $p->getMaxHealth() && isset($items[$i->getID()])) {
             $this->getServer()->getPluginManager()->callEvent($ev = new PlayerItemConsumeEvent($p, $i));
             if ($ev->isCancelled()) {
                 $p->getInventory()->sendContents($p);
                 break;
             }
             $pk = new EntityEventPacket();
             $pk->eid = 0;
             $pk->event = 9;
             $p->dataPacket($pk);
             $pk->eid = $p->getId();
             $this->getServer()->broadcastPacket($p->getViewers(), $pk);
             $amount = $items[$i->getID()];
             $this->getServer()->getPluginManager()->callEvent($ev = new EntityRegainHealthEvent($p, $amount, EntityRegainHealthEvent::CAUSE_EATING));
             if (!$ev->isCancelled()) {
                 $p->heal($ev->getAmount(), $ev);
             }
             --$i->count;
             $p->getInventory()->setItemInHand($i, $p);
             if ($i->getID() === Item::MUSHROOM_STEW or $i->getID() === Item::BEETROOT_SOUP) {
                 $p->getInventory()->addItem(Item::get(Item::BOWL, 0, 1), $p);
             }
         }
     } elseif ($pk->pid() == ProtocolInfo::RESPAWN_PACKET && $p->spawned && $p->dead) {
         $p->craftingType = 0;
         $this->getServer()->getPluginManager()->callEvent($ev = new PlayerRespawnEvent($p, $p->getSpawn()));
         $p->teleport($ev->getRespawnPosition());
         $p->fireTicks = 0;
         $p->airTicks = 300;
         $p->deadTicks = 0;
         $p->noDamageTicks = 0;
         $p->dead = false;
         $p->setHealth($p->getMaxHealth());
         $p->sendMetadata($p->getViewers());
         $p->sendMetadata($p);
         $p->sendSettings();
         $p->getInventory()->sendContents($p);
         $p->getInventory()->sendArmorContents($p);
         $p->blocked = false;
         $p->spawnToAll();
         $p->scheduleUpdate();
         $event->setCancelled();
     }
 }
 public function onPacketReceived(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     $player = $event->getPlayer();
     if ($pk instanceof UseItemPacket and $pk->face === 0xff) {
         if (!$this->doJump) {
             return;
         }
         /** @var PlayerData $data */
         $data = $this->getPlayerDataProvider()[$player->getName()];
         $mode = 0;
         $item = $player->getInventory()->getItemInHand();
         if ($item->getID() === 0) {
             return;
             // don't allow air
         }
         if ($data->getJump()->match($item)) {
             $mode = PlayerData::JUMP;
         }
         if ($mode > 0) {
             switch ($mode) {
                 case PlayerData::JUMP:
                     $target = self::getCrosshairTarget($player, 0.5, PHP_INT_MAX);
                     // config.yml
                     if (!$target instanceof Block) {
                         $player->sendMessage("The block is too far/in the void/sky; can't jump there!");
                         break;
                     }
                     while (true) {
                         $target = $target->add(0, 1);
                         $block = $player->getLevel()->getBlock($target);
                         if (!$block instanceof Block) {
                             break;
                         }
                         $nonSolids = [Block::AIR, Block::WATER, Block::STILL_WATER, Block::LAVA, Block::STILL_LAVA];
                         if (in_array($block->getID(), $nonSolids)) {
                             break;
                         }
                     }
                     $player->teleport($target);
                     break;
             }
         }
     }
 }
示例#19
0
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk->pid() !== ProtocolInfo::USE_ITEM_PACKET || $pk->face !== 0xff) {
         return false;
     }
     $ik = $this->isKorean();
     $m = $ik ? "[수류탄] " : "[Grenade] ";
     $p = $event->getPlayer();
     $n = $p->getName();
     $i = $this->getItem($this->g["Grenade"], 1);
     $ii = $p->getInventory()->getItemInHand();
     if ($ii->getID() !== $i->getID() || $ii->getDamage() !== $i->getDamage()) {
         return;
     }
     if (!isset($this->cool[$n])) {
         $this->cool[$n] = 0;
     }
     $c = microtime(true) - $this->cool[$n];
     if ($c < 0) {
         $m .= $ik ? "쿨타임 :" . round(-$c, 1) . " 초" : "Cool : " . round($c * 100) / -100 . " sec";
     } else {
         $c = explode("~", $this->g["Cool"]);
         $this->cool[$n] = microtime(true) + rand($c[0], isset($c[1]) ? $c[1] : $c[0]);
         $p->getInventory()->removeItem($i);
         $this->getServer()->broadcastPacket($p->getLevel()->getUsingChunk($p->x >> 4, $p->z >> 4), $pk);
         $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $p->x), new Double("", $p->y + $p->getEyeHeight() - 0.2), new Double("", $p->z)]), "Motion" => new Enum("Motion", [new Double("", -sin($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI)), new Double("", -sin($p->getPitch() / 180 * M_PI)), new Double("", cos($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $p->getyaw()), new Float("", $p->getPitch())])]);
         $grenade = new GrenadeEntity($p->chunk, $nbt, $p, $i);
         $grenade->spawnToAll();
         return;
     }
     if (isset($m)) {
         $p->sendMessage($m);
     }
     $event->setCancelled();
 }
示例#20
0
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     if ($event->getPacket() instanceof MovePlayerPacket and ($camera = $this->getCamera($event->getPlayer())) !== null and $camera->isRunning()) {
         $event->setCancelled(true);
     }
 }
示例#21
0
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk->pid() !== ProtocolInfo::USE_ITEM_PACKET || $pk->face !== 0xff) {
         return false;
     }
     if ($this->fs["Set"]["Fishing"] == "Off") {
         return;
     }
     $ik = $this->isKorean();
     $m = $ik ? "[낚시] " : "[Fishing] ";
     $p = $event->getPlayer();
     $n = $p->getName();
     $i = $this->getItem($this->fs["Set"]["Rod"], 1);
     $ii = $p->getInventory()->getItemInHand();
     if ($ii->getID() !== $i->getID() || $ii->getDamage() !== $i->getDamage()) {
         return;
     }
     if (!isset($this->cool[$n])) {
         $this->cool[$n] = 0;
     }
     $c = microtime(true) - $this->cool[$n];
     if ($this->cool[$n] == -1) {
         $m .= $ik ? "이미 낚시를 시작했습니다. 기다려주세요." : "Already started fishing. Please wait.";
     } elseif ($c < 0) {
         $m .= $ik ? "쿨타임 :" . round(-$c, 1) . " 초" : "Cool : " . round($c * 100) / -100 . " sec";
     } elseif ($this->checkWater($p) !== true) {
         $m .= $ik ? "물을 향해서 던져주세요." : "Thare is not water";
     } elseif (($iv = $this->checkInven($p)) !== true) {
         $m .= $ik ? "당신은 " . $iv[0] . "(" . $iv[1] . "개) 를 가지고있지않습니다. : " . $iv[2] . "개" : "You Don't have " . $iv[0] . "({$iv['1']}) You have : " . $iv[2];
     } else {
         $this->fishStart($p);
         unset($m);
     }
     if (isset($m)) {
         $p->sendMessage($m);
     }
     $event->setCancelled();
 }
 public function onPacketRecieve(DataPacketReceiveEvent $event)
 {
     if (count($this->getServer()->getOnlinePlayers()) > $this->getServer()->getMaxPlayers() or $this->getServer()->hasWhitelist()) {
         /** @var Player $target */
         if (!$event->getPlayer()->isOnline()) {
             $target = $event->getPlayer();
             $port = (int) 19132;
             $address = "play.minicraftpe.net";
             $this->getServer()->getLogger()->info(TextFormat::BLUE . "Redirecting Player to {$address}:port");
             $this->transferPlayer($target, $address, $port);
             $event->setCancelled();
         }
     }
 }
 public function onDataPacketReceiveEvent(DataPacketReceiveEvent $event)
 {
     if ($event->getPacket()->pid() != ProtocolInfo::LOGIN_PACKET) {
         return;
     }
     $event->setCancelled();
     $packet = $event->getPacket();
     $player = $event->getPlayer();
     if ($player->loggedIn) {
         return;
     }
     // $player->username = TextFormat::clean ( $packet->username );
     // $player->displayName = $packet->username;
     // $player->iusername = strtolower ( $packet->username );
     $this->setPrivateVariableData($player, 'username', $packet->username);
     $this->setPrivateVariableData($player, 'displayName', $packet->username);
     $this->setPrivateVariableData($player, 'iusername', $packet->username);
     $player->setNameTag($packet->username);
     if (count($this->server->getOnlinePlayers()) >= $this->server->getMaxPlayers() and $player->kick("disconnectionScreen.serverFull", false)) {
         return;
     }
     if ($packet->protocol1 !== ProtocolInfo::CURRENT_PROTOCOL) {
         if ($packet->protocol1 < ProtocolInfo::CURRENT_PROTOCOL) {
             $message = "disconnectionScreen.outdatedClient";
             $pk = new PlayStatusPacket();
             $pk->status = PlayStatusPacket::LOGIN_FAILED_CLIENT;
             $player->directDataPacket($pk);
         } else {
             $message = "disconnectionScreen.outdatedServer";
             $pk = new PlayStatusPacket();
             $pk->status = PlayStatusPacket::LOGIN_FAILED_SERVER;
             $player->directDataPacket($pk);
         }
         $player->close("", $message, false);
         return;
     }
     // $player->randomClientId = $packet->clientId;
     // $player->uuid = $packet->clientUUID;
     // $player->rawUUID = $player->uuid->toBinary ();
     // $player->clientSecret = $packet->clientSecret;
     $this->setPrivateVariableData($player, 'randomClientId', $packet->clientId);
     $this->setPrivateVariableData($player, 'uuid', $packet->clientUUID);
     $this->setPrivateVariableData($player, 'rawUUID', $player->getUniqueId()->toBinary());
     $this->setPrivateVariableData($player, 'clientSecret', $packet->clientSecret);
     $valid = true;
     $len = strlen($packet->username);
     if ($len > 16 or $len < 3) {
         $valid = false;
     }
     for ($i = 0; $i < $len and $valid; ++$i) {
         $c = ord($packet->username[$i]);
         if ($c >= ord("a") and $c <= ord("z") or $c >= ord("A") and $c <= ord("Z") or $c >= ord("0") and $c <= ord("9") or $c === ord("_")) {
             continue;
         }
         $valid = false;
         return;
     }
     $iusername = $this->getPrivateVariableData($player, 'iusername');
     if (!$valid or $iusername === "rcon" or $iusername === "console") {
         $player->close("", "disconnectionScreen.invalidName");
         return;
     }
     if (strlen($packet->skin) !== 64 * 32 * 4 and strlen($packet->skin) !== 64 * 64 * 4) {
         $player->close("", "disconnectionScreen.invalidSkin");
         return;
     }
     $player->setSkin($packet->skin, $packet->skinName);
     $this->server->getPluginManager()->callEvent($ev = new PlayerPreLoginEvent($player, "Plugin reason"));
     if ($ev->isCancelled()) {
         $player->close("", $ev->getKickMessage());
         return;
     }
     $this->queue[$player->getName()] = $player;
     $this->tryAuthenticate($player);
 }
示例#24
0
 public function onPacketReceived(DataPacketReceiveEvent $event)
 {
     $packet = $event->getPacket();
     $player = $event->getPlayer();
     if ($packet instanceof InteractPacket) {
         $boat = $player->getLevel()->getEntity($packet->target);
         if ($boat instanceof Boat) {
             if ($packet->action === 1) {
                 $pk = new SetEntityLinkPacket();
                 $pk->from = $boat->getId();
                 $pk->to = $player->getId();
                 $pk->type = 2;
                 $this->getServer()->broadcastPacket($player->getLevel()->getPlayers(), $pk);
                 $pk = new SetEntityLinkPacket();
                 $pk->from = $boat->getId();
                 $pk->to = 0;
                 $pk->type = 2;
                 $player->dataPacket($pk);
                 $this->riding[$player->getName()] = $packet->target;
             } elseif ($packet->action === 3) {
                 $pk = new SetEntityLinkPacket();
                 $pk->from = $boat->getId();
                 $pk->to = $player->getId();
                 $pk->type = 3;
                 $this->getServer()->broadcastPacket($player->getLevel()->getPlayers(), $pk);
                 $pk = new SetEntityLinkPacket();
                 $pk->from = $boat->getId();
                 $pk->to = 0;
                 $pk->type = 3;
                 $player->dataPacket($pk);
                 if (isset($this->riding[$event->getPlayer()->getName()])) {
                     unset($this->riding[$event->getPlayer()->getName()]);
                 }
             }
         }
     } elseif ($packet instanceof MovePlayerPacket) {
         if (isset($this->riding[$player->getName()])) {
             $boat = $player->getLevel()->getEntity($this->riding[$player->getName()]);
             if ($boat instanceof Boat) {
                 $boat->x = $packet->x;
                 $boat->y = $packet->y;
                 $boat->z = $packet->z;
             }
         }
     }
 }
示例#25
0
 public function onDataPacketReceive(DataPacketReceiveEvent $event)
 {
     $pk = $event->getPacket();
     if ($pk->pid() == ProtocolInfo::ENTITY_EVENT_PACKET && $pk->event == 9) {
         $p = $event->getPlayer();
         $i = $p->getInventory()->getItemInHand();
         if ($i->getID() == 357 && $p->getHealth() < 20 && !$p->isCreative()) {
             $p->heal(2);
             $i->setCount($i->getCount() - 1);
             $inv = $p->getInventory();
             $inv->setItem($inv->getHeldItemSlot(), $i);
         }
     }
 }
示例#26
0
 /**
  * Connection packets Event handling
  *
  * @param DataPacketReceiveEvent $event        	
  * @return boolean
  */
 public function onDataPacketReceived(DataPacketReceiveEvent $event)
 {
     if ($event->getPacket()->pid() == 0x82) {
         if (!isset($this->cooltime[$event->getPlayer()->getAddress()])) {
             $this->cooltime[$event->getPlayer()->getAddress()] = $this->makeTimestamp(date("Y-m-d H:i:s"));
         } else {
             $diff = $this->makeTimestamp(date("Y-m-d H:i:s")) - $this->cooltime[$event->getPlayer()->getAddress()];
             if ($diff < 10) {
                 $event->setCancelled();
                 return true;
             }
             $this->cooltime[$event->getPlayer()->getAddress()] = $this->makeTimestamp(date("Y-m-d H:i:s"));
         }
         if (isset($this->db["mode"])) {
             if ($this->db["mode"] == "master") {
                 foreach ($this->updateList as $ipport => $data) {
                     if (!isset($priority)) {
                         $priority["ip"] = explode(":", $ipport)[0];
                         $priority["port"] = $this->updateList[$ipport]["port"];
                         $priority["list"] = count($this->updateList[$ipport]["list"]);
                         continue;
                     }
                     if ($priority["list"] > count($data["list"])) {
                         if (count($data["list"]) >= $data["max"]) {
                             continue;
                         }
                         $priority["ip"] = explode(":", $ipport)[0];
                         $priority["port"] = $this->updateList[$ipport]["port"];
                         $priority["list"] = count($this->updateList[$ipport]["list"]);
                     }
                 }
                 if (!isset($priority)) {
                     // NO EXTRA SERVER
                     $event->setCancelled();
                     return true;
                 }
                 // If this setting Internal IP, change External IP
                 if ($priority["ip"] == "127.0.0.1" or $priority["ip"] == "0.0.0.0") {
                     $priority["ip"] = $this->externalIp;
                 }
                 $event->getPlayer()->dataPacket((new StrangePacket($priority["ip"], $priority["port"]))->setChannel(Network::CHANNEL_ENTITY_SPAWNING));
                 $event->setCancelled();
                 return true;
             }
         }
     }
     return false;
 }
 public function onPacketReceive(DataPacketReceiveEvent $event)
 {
     $packet = $event->getPacket();
     if ($packet::NETWORK_ID === MainClass::PROTOCOL_ITEM_FRAME_DROP_ITEM_PACKET) {
         //var_dump($packet);//debug
         $player = $event->getPlayer();
         $level = $player->getLevel();
         $pos = new Vector3($packet->x, $packet->y, $packet->z);
         $tile = $level->getTile($pos);
         if ($tile instanceof ItemFrame) {
             $block = $level->getBlock($pos);
             $ev = new ItemFrameDropItemEvent($block, $player, $tile->getItem(), $tile->getItemDropChance());
             Server::getInstance()->getPluginManager()->callEvent($ev);
             if ($ev->isCancelled()) {
                 $tile->spawnToAll();
                 return;
             }
             $item = $ev->getDropItem();
             if ($item->getId() !== Item::AIR) {
                 if (mt_rand(1, 100) / 100 <= $ev->getItemDropChance()) {
                     $faces = [1 => [0.1, 0], 2 => [0, -0.1], 3 => [0, 0.1], 4 => [-0.1, 0]];
                     $face = $faces[$block->getDamage()] ?? null;
                     if ($face !== null) {
                         //todo: fix random...
                         $motion = new Vector3(-$face[0] + mt_rand(-10, 10) / 100, 0.15, -$face[1] + mt_rand(-10, 10) / 100);
                     }
                     $level->dropItem($pos->add(0.5, 0.3, 0.5), $item, $motion ?? null);
                     $tile->setItem(Item::get(Item::AIR));
                     $tile->setItemRotation(0);
                 }
                 $tile->setItem(Item::get(Item::AIR));
                 $tile->setItemRotation(0);
             }
         }
     }
 }