예제 #1
5
파일: burstMode.php 프로젝트: EmreTr1/rtr
 public function burstArrow(Player $player)
 {
     if ($player->getInventory()->getItemInHand()->getId() === Item::BOW) {
         $bow = $player->getInventory()->getItemInHand();
         $nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $player->x), new Double("", $player->y + $player->getEyeHeight()), new Double("", $player->z)]), "Motion" => new Enum("Motion", [new Double("", -\sin($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI)), new Double("", -\sin($player->pitch / 180 * M_PI)), new Double("", \cos($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $player->yaw), new Float("", $player->pitch)])]);
         $ev = new EntityShootBowEvent($player, $bow, Entity::createEntity("Arrow", $player->chunk, $nbt, $player), 1.5);
         $this->getServer()->getPluginManager()->callEvent($ev);
         if ($ev->isCancelled()) {
             $ev->getProjectile()->kill();
         } else {
             $ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce()));
             if ($ev->getProjectile() instanceof Projectile) {
                 $this->getServer()->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($ev->getProjectile()));
                 if ($projectileEv->isCancelled()) {
                     $ev->getProjectile()->kill();
                 } else {
                     $this->object_hash[spl_object_hash($ev->getProjectile())] = 1;
                     $ev->getProjectile()->spawnToAll();
                 }
             } else {
                 $this->object_hash[spl_object_hash($ev->getProjectile())] = 1;
                 $ev->getProjectile()->spawnToAll();
             }
         }
     }
 }
예제 #2
4
 public function onActivate(Item $item, Player $player = null)
 {
     $tile = $this->getLevel()->getTile($this);
     if (!$tile instanceof ItemFrameTile) {
         $nbt = new CompoundTag("", [new StringTag("id", Tile::ITEM_FRAME), new IntTag("x", $this->x), new IntTag("y", $this->y), new IntTag("z", $this->z), new ByteTag("ItemRotation", 0), new FloatTag("ItemDropChance", 1.0)]);
         Tile::createTile(Tile::ITEM_FRAME, $this->getLevel()->getChunk($this->x >> 4, $this->z >> 4), $nbt);
     }
     $tile = $this->getLevel()->getTile($this);
     if (!$tile instanceof ItemFrameTile) {
         return false;
     }
     if ($tile->getItem()->getId() === 0) {
         $tile->setItem(Item::get($item->getId(), $item->getDamage(), 1));
         if ($player instanceof Player) {
             if ($player->isSurvival()) {
                 $count = $item->getCount();
                 if (--$count <= 0) {
                     $player->getInventory()->setItemInHand(Item::get(Item::AIR));
                     return true;
                 }
                 $item->setCount($count);
                 $player->getInventory()->setItemInHand($item);
             }
         }
     } else {
         $itemRot = $tile->getItemRotation();
         if ($itemRot === 7) {
             $itemRot = 0;
         } else {
             $itemRot++;
         }
         $tile->setItemRotation($itemRot);
     }
     return true;
 }
예제 #3
0
 private function handle($cmd, $args, Player $player, CommandSender $issuer)
 {
     switch ($cmd) {
         case "getping":
             $issuer->sendMessage("Ping of " . $player->getName() . ": unknown ms");
             return true;
         case "seearmor":
             $issuer->sendMessage("Armor of " . $player->getName() . ":");
             $issuer->sendMessage("Helmet: " . $this->formatItem($player->getInventory()->getArmorItem(0)));
             $issuer->sendMessage("Chestplate: " . $this->formatItem($player->getInventory()->getArmorItem(1)));
             $issuer->sendMessage("Leggings: " . $this->formatItem($player->getInventory()->getArmorItem(2)));
             $issuer->sendMessage("Boots: " . $this->formatItem($player->getInventory()->getArmorItem(3)));
             return true;
         case "seegm":
             $issuer->sendMessage("Gamemode of " . $player->getName() . ": " . $this->formatGamemode($player->getGamemode()));
             return true;
         case "getpos":
             $issuer->sendMessage($player->getName() . " is at (" . TextFormat::YELLOW . $player->x . ", " . TextFormat::GREEN . $player->y . ", " . TextFormat::AQUA . $player->z . ") in world " . TextFormat::RED . $player->getLevel()->getName() . ".");
             return true;
         case "setarmor":
             // TODO
             break;
         case "rmarmor":
             // TODO
             break;
         case "sessions":
             // TODO
             break;
     }
     return false;
 }
예제 #4
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     if ($target->isTransparent() === false and $face > 1 and $block->isSolid() === false) {
         $faces = [2 => 0, 3 => 2, 4 => 1, 5 => 3];
         $motives = [["Kebab", 1, 1], ["Aztec", 1, 1], ["Alban", 1, 1], ["Aztec2", 1, 1], ["Bomb", 1, 1], ["Plant", 1, 1], ["Wasteland", 1, 1], ["Wanderer", 1, 2], ["Graham", 1, 2], ["Pool", 2, 1], ["Courbet", 2, 1], ["Sunset", 2, 1], ["Sea", 2, 1], ["Creebet", 2, 1], ["Match", 2, 2], ["Bust", 2, 2], ["Stage", 2, 2], ["Void", 2, 2], ["SkullAndRoses", 2, 2], ["Fighters", 4, 2], ["Skeleton", 4, 3], ["DonkeyKong", 4, 3], ["Pointer", 4, 4], ["Pigscene", 4, 4], ["Flaming Skull", 4, 4]];
         $motive = $motives[mt_rand(0, count($motives) - 1)];
         $data = ["x" => $target->x, "y" => $target->y + 0.4, "z" => $target->z, "yaw" => $faces[$face] * 90, "Motive" => $motive[0]];
         $nbt = new CompoundTag("", ["Motive" => new StringTag("Motive", $data["Motive"]), "Pos" => new EnumTag("Pos", [new DoubleTag("", $data["x"]), new DoubleTag("", $data["y"]), new DoubleTag("", $data["z"])]), "Motion" => new EnumTag("Motion", [new DoubleTag("", 0), new DoubleTag("", 0), new DoubleTag("", 0)]), "Rotation" => new EnumTag("Rotation", [new FloatTag("", $data["yaw"]), new FloatTag("", 0)])]);
         $painting = new PaintingEntity($player->getLevel()->getChunk($block->getX() >> 4, $block->getZ() >> 4), $nbt);
         $painting->spawnToAll();
         if ($player->isSurvival()) {
             $item = $player->getInventory()->getItemInHand();
             $count = $item->getCount();
             if (--$count <= 0) {
                 $player->getInventory()->setItemInHand(Item::get(Item::AIR));
                 return;
             }
             $item->setCount($count);
             $player->getInventory()->setItemInHand($item);
         }
         //TODO
         //$e = $server->api->entity->add($level, ENTITY_OBJECT, OBJECT_PAINTING, $data);
         //$e->spawnToAll();
         /*if(($player->gamemode & 0x01) === 0x00){
         			$player->removeItem(Item::get($this->getId(), $this->getDamage(), 1));
         		}*/
         return true;
     }
     return false;
 }
예제 #5
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     if ($player === null or $player->isSurvival() !== true) {
         return false;
     }
     if ($target->getId() === Block::STILL_WATER or $target->getId() === Block::WATER) {
         $player->getServer()->getPluginManager()->callEvent($ev = new PlayerGlassBottleEvent($player, $target, $this));
         if ($ev->isCancelled()) {
             return false;
         } else {
             if ($this->count <= 1) {
                 $player->getInventory()->setItemInHand(Item::get(Item::POTION, 0, 1));
                 return true;
             } else {
                 $this->count--;
                 $player->getInventory()->setItemInHand($this);
             }
             if ($player->getInventory()->canAddItem(Item::get(Item::POTION, 0, 1)) === true) {
                 $player->getInventory()->AddItem(Item::get(Item::POTION, 0, 1));
             } else {
                 $motion = $player->getDirectionVector()->multiply(0.4);
                 $position = clone $player->getPosition();
                 $player->getLevel()->dropItem($position->add(0, 0.5, 0), Item::get(Item::POTION, 0, 1), $motion, 40);
             }
             return true;
         }
     }
     return false;
 }
예제 #6
0
 public function giveCraftingTable(Player $player)
 {
     foreach ($player->getInventory()->getContents() as $item) {
         if ($item->getId() === Item::CRAFTING_TABLE) {
             return;
         }
     }
     $player->getInventory()->addItem(Item::get(Item::CRAFTING_TABLE));
 }
예제 #7
0
 public function restorePlayer(Player $player)
 {
     if (isset($this->players[$player->getName()])) {
         $get = $this->players[$player->getName()];
         $player->setGamemode($get["gamemode"]);
         $player->getInventory()->setContents(unserialize($get["inventory"]));
         $player->getInventory()->setArmorContents(unserialize($get["armor"]));
         $player->teleport(unserialize($get["spawn"]));
         unset($this->players[$player->getName()]);
     }
 }
예제 #8
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $realPos = $block->getSide($face);
     $boat = Entity::createEntity("Boat", $player->getLevel()->getChunk($realPos->x >> 4, $realPos->z >> 4), new Compound("", ["Pos" => new Enum("Pos", [new Double("", $realPos->x), new Double("", $realPos->y), new Double("", $realPos->z)]), "Motion" => new Enum("Motion", [new Double("", 0), new Double("", 0), new Double("", 0)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])]));
     $boat->spawnToAll();
     --$this->count;
     if ($this->count <= 0) {
         $player->getInventory()->setItemInHand(Item::get(Item::AIR));
         return true;
     }
     $player->getInventory()->setItemInHand($this);
     return true;
 }
예제 #9
0
파일: Boat.php 프로젝트: AmieXD/mts-plugin1
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $realPos = $block->getSide($face);
     $boat = new BoatEntity($player->getLevel()->getChunk($realPos->getX() >> 4, $realPos->getZ() >> 4), new Compound("", ["Pos" => new Enum("Pos", [new Double("", $realPos->getX()), new Double("", $realPos->getY()), new Double("", $realPos->getZ())]), "Motion" => new Enum("Motion", [new Double("", 0), new Double("", 0), new Double("", 0)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])]));
     $boat->spawnToAll();
     $item = $player->getInventory()->getItemInHand();
     $count = $item->getCount();
     if (--$count <= 0) {
         $player->getInventory()->setItemInHand(Item::get(Item::AIR));
         return;
     }
     $item->setCount($count);
     $player->getInventory()->setItemInHand($item);
     return true;
 }
예제 #10
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $targetBlock = Block::get($this->meta);
     if ($targetBlock instanceof Air) {
         if ($target instanceof Liquid and $target->getDamage() === 0) {
             $result = clone $this;
             $result->setDamage($target->getId());
             $player->getServer()->getPluginManager()->callEvent($ev = new PlayerBucketFillEvent($player, $block, $face, $this, $result));
             if (!$ev->isCancelled()) {
                 $player->getLevel()->setBlock($target, new Air(), true, true);
                 if ($player->isSurvival()) {
                     $player->getInventory()->setItemInHand($ev->getItem());
                 }
                 return true;
             } else {
                 $player->getInventory()->sendContents($player);
             }
         }
     } elseif ($targetBlock instanceof Liquid) {
         $result = clone $this;
         $result->setDamage(0);
         $player->getServer()->getPluginManager()->callEvent($ev = new PlayerBucketFillEvent($player, $block, $face, $this, $result));
         if (!$ev->isCancelled()) {
             $player->getLevel()->setBlock($block, $targetBlock, true, true);
             if ($player->isSurvival()) {
                 $player->getInventory()->setItemInHand($ev->getItem());
             }
             return true;
         } else {
             $player->getInventory()->sendContents($player);
         }
     }
     return false;
 }
예제 #11
0
 public function onActivate(Item $item, Player $player = null)
 {
     $tile = $this->getLevel()->getTile($this);
     if ($tile instanceof FlowerPotTile) {
         if ($tile->getFlowerPotItem() === Item::AIR) {
             switch ($item->getId()) {
                 case Item::TALL_GRASS:
                     if ($item->getDamage() === 1) {
                         break;
                     }
                 case Item::SAPLING:
                 case Item::DEAD_BUSH:
                 case Item::DANDELION:
                 case Item::RED_FLOWER:
                 case Item::BROWN_MUSHROOM:
                 case Item::RED_MUSHROOM:
                 case Item::CACTUS:
                     $tile->setFlowerPotData($item->getId(), $item->getDamage());
                     $this->setDamage($item->getId());
                     $this->getLevel()->setBlock($this, $this, true, false);
                     if ($player->isSurvival()) {
                         $item->setCount($item->getCount() - 1);
                         $player->getInventory()->setItemInHand($item->getCount() > 0 ? $item : Item::get(Item::AIR));
                     }
                     return true;
                     break;
             }
         }
     }
     return false;
 }
예제 #12
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     if ($block->getId() === self::AIR and $target instanceof Solid) {
         $level->setBlock($block, new Fire(), true);
         if (($player->gamemode & 0x1) === 0 and $this->useOn($block)) {
             if ($this->getDamage() >= $this->getMaxDurability()) {
                 $player->getInventory()->setItemInHand(new Item(Item::AIR, 0, 0));
             } else {
                 $this->meta++;
                 $player->getInventory()->setItemInHand($this);
             }
         }
         return true;
     }
     return false;
 }
예제 #13
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $minecart = new MinecartEntity($player->getLevel()->getChunk($block->getX() >> 4, $block->getZ() >> 4), new CompoundTag("", ["Pos" => new ListTag("Pos", [new DoubleTag("", $block->getX()), new DoubleTag("", $block->getY() + 0.8), new DoubleTag("", $block->getZ())]), "Motion" => new ListTag("Motion", [new DoubleTag("", 0), new DoubleTag("", 0), new DoubleTag("", 0)]), "Rotation" => new ListTag("Rotation", [new FloatTag("", 0), new FloatTag("", 0)])]));
     $minecart->spawnToAll();
     if ($player->isSurvival()) {
         $item = $player->getInventory()->getItemInHand();
         $count = $item->getCount();
         if (--$count <= 0) {
             $player->getInventory()->setItemInHand(Item::get(Item::AIR));
             return true;
         }
         $item->setCount($count);
         $player->getInventory()->setItemInHand($item);
     }
     return true;
 }
예제 #14
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $blockTemp = $level->getBlock($block->add(0, -1, 0));
     //if($blockTemp->getId() != self::RAIL and $blockTemp->getId() != self::POWERED_RAIL) return;
     $minecart = new MinecartEntity($player->getLevel()->getChunk($block->getX() >> 4, $block->getZ() >> 4), new Compound("", ["Pos" => new Enum("Pos", [new Double("", $block->getX()), new Double("", $block->getY() + 1), new Double("", $block->getZ())]), "Motion" => new Enum("Motion", [new Double("", 0), new Double("", 0), new Double("", 0)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])]));
     $minecart->spawnToAll();
     if ($player->isSurvival()) {
         $item = $player->getInventory()->getItemInHand();
         $count = $item->getCount();
         if (--$count <= 0) {
             $player->getInventory()->setItemInHand(Item::get(Item::AIR));
             return;
         }
         $item->setCount($count);
         $player->getInventory()->setItemInHand($item);
     }
     return true;
 }
예제 #15
0
 /**
  * Count amount of items
  * @param Player $target
  * @param Item $item
  * @return int
  */
 public static function countInvItem(Player $target, Item $item)
 {
     $k = 0;
     foreach ($target->getInventory()->getContents() as $slot => &$inv) {
         if ($inv->getId() == $item->getId()) {
             $k += $inv->getCount();
         }
     }
     return $k;
 }
예제 #16
0
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $realPos = $block->getSide(Vector3::SIDE_UP);
     if (!$block instanceof RailBlock) {
         return false;
     }
     $cart = new MinecartEntity($player->getLevel()->getChunk($realPos->getX() >> 4, $realPos->getZ() >> 4), new Compound("", ["Pos" => new Enum("Pos", [new Double("", $realPos->getX()), new Double("", $realPos->getY()), new Double("", $realPos->getZ())]), "Motion" => new Enum("Motion", [new Double("", 0), new Double("", 0), new Double("", 0)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])]));
     $cart->spawnToAll();
     if ($player->isSurvival()) {
         $item = $player->getInventory()->getItemInHand();
         $count = $item->getCount();
         if (--$count <= 0) {
             $player->getInventory()->setItemInHand(Item::get(Item::AIR));
             return;
         }
         $item->setCount($count);
         $player->getInventory()->setItemInHand($item);
     }
     return true;
 }
예제 #17
0
 public function load(Player $p)
 {
     $inv = $p->getInventory();
     $inv->clearAll();
     $inv->setContents($this->contents);
     $inv->setArmorContents($this->armor);
     for ($i = 0; $i < 9; $i++) {
         $inv->setHotbarSlotIndex($this->hotbar[$i], $i);
     }
     $inv->sendContents($p);
     $p->setHealth($this->health);
 }
예제 #18
0
 public static function fillUpChest(Block $chest, Player $player)
 {
     if ($chest->getId() == Item::CHEST || $chest->getId()) {
         if ($player->gamemode == Player::CREATIVE) {
             $player->sendMessage("[HG] You are in creative Mode");
             return;
         }
         if (!$player->isOp()) {
             $pk = new ContainerSetContentPacket();
             $pk->windowid = $player->getWindowId($player->getInventory());
             // ContainerSetContentPacket::SPECIAL_INVENTORY;
             for ($i = 1; $i < 5; $i++) {
                 $pk->slots[] = HungerGameKit::randomItems();
             }
             $player->dataPacket($pk->setChannel(Network::CHANNEL_WORLD_EVENTS));
             if ($player->getInventory() != null) {
                 $player->getInventory()->sendContents($player);
             }
             // $player->sendMessage ( "[HG] openning chest" );
         }
     }
 }
 public function onRun(array $args, Player $player)
 {
     $cd = false;
     $mode = 0;
     // 0 for set hand, 1 for view, 2 for removal
     while (isset($args[0])) {
         $arg = array_shift($args);
         switch ($arg) {
             case "cd":
             case "check-damage":
                 $cd = true;
                 break;
             case "v":
             case "view":
                 $mode = 1;
                 break;
             case "del":
             case "delete":
             case "rm":
             case "remove":
                 $mode = 2;
                 break;
         }
     }
     switch ($mode) {
         case 0:
             $item = $player->getInventory()->getItemInHand();
             if ($item instanceof Air) {
                 return "You cannot use air (hand) as your tool! Use '//{$this->getName()} rm' to delete the tool.";
             }
             $provider = $this->getMain()->getPlayerDataProvider();
             /** @var PlayerData $data */
             $data = $provider[strtolower($player->getName())];
             $id = $item->getID();
             $damage = $cd ? $item->getDamage() : PlayerData::ALLOW_ANY;
             $data->setTool($this->id, new SelectedTool($id, $damage, $this->getDefaultID(), $this->getDefaultDamage()));
             return "Your {$this->name} item is now {$id}" . (is_int($damage) ? ":{$damage}" : " (no damage value specified") . ".";
         case 1:
             /** @var PlayerData $data */
             $data = $this->getMain()->getPlayerDataProvider()[strtolower($player->getName())];
             $tool = $data->getTool($this->id);
             $id = $tool->getRawID();
             $damage = $tool->getRawDamage();
             return "Your {$this->name} item is {$id}" . (is_int($damage) ? ":{$damage}" : " (no damage value specified") . ".";
         default:
             /** @var PlayerData $data */
             $data = $this->getMain()->getPlayerDataProvider()[strtolower($player->getName())];
             $data->setTool($this->id, new SelectedTool(0, PlayerData::ALLOW_ANY, $this->getDefaultID(), $this->getDefaultDamage()));
             return "Your {$this->name} item has been removed.";
     }
 }
예제 #20
0
 public function giveRandomItem(Player $player)
 {
     $inventory = $player->getInventory();
     $repeat = mt_rand(1, 3);
     for ($i = 0; $i < $repeat; $i++) {
         $itemid = $this->plugin->itemlist["item"][mt_rand(0, count($this->plugin->itemlist["item"]) - 1)];
         if ($itemid == 262) {
             $count = mt_rand(3, 10);
         } else {
             $count = 1;
         }
         $inventory->addItem(Item::get($itemid, 0, $count));
     }
 }
예제 #21
0
파일: Bucket.php 프로젝트: iTXTech/Genisys
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $targetBlock = Block::get($this->meta);
     if ($targetBlock instanceof Air) {
         if ($target instanceof Liquid and $target->getDamage() === 0) {
             $result = clone $this;
             $id = $target->getId();
             if ($id == self::STILL_WATER) {
                 $id = self::WATER;
             }
             if ($id == self::STILL_LAVA) {
                 $id = self::LAVA;
             }
             $result->setDamage($id);
             $player->getServer()->getPluginManager()->callEvent($ev = new PlayerBucketFillEvent($player, $block, $face, $this, $result));
             if (!$ev->isCancelled()) {
                 $player->getLevel()->setBlock($target, new Air(), true, true);
                 if ($player->isSurvival()) {
                     $player->getInventory()->setItemInHand($ev->getItem());
                 }
                 return true;
             } else {
                 $player->getInventory()->sendContents($player);
             }
         }
     } elseif ($targetBlock instanceof Liquid) {
         $result = clone $this;
         $result->setDamage(0);
         $player->getServer()->getPluginManager()->callEvent($ev = new PlayerBucketEmptyEvent($player, $block, $face, $this, $result));
         if (!$ev->isCancelled()) {
             //Only disallow water placement in the Nether, allow other liquids to be placed
             //In vanilla, water buckets are emptied when used in the Nether, but no water placed.
             if (!($player->getLevel()->getDimension() === Level::DIMENSION_NETHER and $targetBlock->getID() === self::WATER)) {
                 $player->getLevel()->setBlock($block, $targetBlock, true, true);
             }
             if ($player->isSurvival()) {
                 $player->getInventory()->setItemInHand($ev->getItem());
             }
             return true;
         } else {
             $player->getInventory()->sendContents($player);
         }
     }
     return false;
 }
예제 #22
0
파일: Kit.php 프로젝트: Nader6/AdvancedKits
 private function addTo(Player $player)
 {
     $items = $this->getItems();
     $inv = $player->getInventory();
     foreach ($items as $type => $item) {
         if (is_int($type)) {
             $inv->addItem($item);
         } elseif ($type === "helmet") {
             $inv->setHelmet($item);
         } elseif ($type === "chestplate") {
             $inv->setChestplate($item);
         } elseif ($type === "leggings") {
             $inv->setLeggings($item);
         } elseif ($type === "boots") {
             $inv->setBoots($item);
         }
     }
     $this->coolDowns[strtolower($player)] = $this->getCoolDownMinutes();
     $this->ak->hasKit[strtolower($player->getName())] = true;
 }
예제 #23
0
파일: TreeChopper.php 프로젝트: EmreTr1/rtr
 public function treeDetect(Block $block, Player $player, $isdrop = true)
 {
     if ($block->getId() == Block::LOG or $block->getId() == Block::LEAVE) {
         $drops = $block->getDrops($player->getInventory()->getItemInHand());
         if ($isdrop == true) {
             foreach ($drops as $drop) {
                 if ($drop[2] > 0) {
                     $player->getInventory()->addItem(Item::get(...$drop));
                 }
             }
         }
         $block->getLevel()->setBlock($block, new Air(), false, false);
     }
     $id = $block->getLevel()->getBlockIdAt($block->x, $block->y - 1, $block->z);
     if ($id == Block::LOG or $id == Block::LEAVE) {
         $this->treeDetect($block->getLevel()->getBlock($block->add(0, -1, 0)), $player);
     }
     $id = $block->getLevel()->getBlockIdAt($block->x, $block->y + 1, $block->z);
     if ($id == Block::LOG or $id == Block::LEAVE) {
         $this->treeDetect($block->getLevel()->getBlock($block->add(0, 1, 0)), $player);
     }
     $id = $block->getLevel()->getBlockIdAt($block->x, $block->y, $block->z - 1);
     if ($id == Block::LOG or $id == Block::LEAVE) {
         $this->treeDetect($block->getLevel()->getBlock($block->add(0, 0, -1)), $player);
     }
     $id = $block->getLevel()->getBlockIdAt($block->x, $block->y, $block->z + 1);
     if ($id == Block::LOG or $id == Block::LEAVE) {
         $this->treeDetect($block->getLevel()->getBlock($block->add(0, 0, 1)), $player);
     }
     $id = $block->getLevel()->getBlockIdAt($block->x - 1, $block->y, $block->z);
     if ($id == Block::LOG or $id == Block::LEAVE) {
         $this->treeDetect($block->getLevel()->getBlock($block->add(-1, 0, 0)), $player);
     }
     $id = $block->getLevel()->getBlockIdAt($block->x + 1, $block->y, $block->z);
     if ($id == Block::LOG or $id == Block::LEAVE) {
         $this->treeDetect($block->getLevel()->getBlock($block->add(1, 0, 0)), $player);
     }
 }
예제 #24
0
 private function loadInventory(Player $player, Level $level)
 {
     $n = trim(strtolower($player->getName()));
     if ($n === "") {
         return false;
     }
     $d = substr($n, 0, 1);
     $path = $this->getDataFolder() . $d . "/" . $n . ".yml";
     if (!is_file($path)) {
         return false;
     }
     $cfg = new Config($path, Config::YAML);
     $yaml = $cfg->getAll();
     $ln = trim(strtolower($level->getName()));
     if (!isset($yaml[$ln])) {
         return false;
     }
     foreach ($yaml[$ln] as $slot => $t) {
         list($id, $dam, $cnt) = explode(":", $t);
         $item = Item::get($id, $dam, $cnt);
         $player->getInventory()->setItem($slot, $item);
     }
     return true;
 }
예제 #25
0
파일: Main.php 프로젝트: ecoron/VoteReward
 public function give(Player $p, $s)
 {
     if ($s == "0") {
         $p->sendMessage("You haven't voted yet!\n" . $this->url . "\nVote now for cool rewards!");
     } else {
         if ($s == "1") {
             $query = new QueryTask("http://minecraftpocket-servers.com/api/?action=post&object=votes&element=claim&key=" . $this->key . "&username="******"{PLAYER}", $p->getName(), $i));
             }
         } else {
             if ($s == "2") {
                 $p->sendMessage("You've already voted today! Come back tomorrow to vote again.");
             } else {
                 $this->getLogger()->warning(TextFormat::RED . "Error fetching vote status! Are you hosting your server on a mobile device, or is your Internet out?");
                 $p->sendMessage("[VoteReward] Error fetching vote status!");
             }
         }
     }
 }
예제 #26
0
 public function onPlayerTrade(Player $giver, Player $taker)
 {
     $good = clone $giver->getInventory()->getItemInHand();
     $gift = clone $good;
     $gift->setCount(1);
     $taker->getInventory()->addItem($gift);
     $good->setCount($n = $good->getCount() - 1);
     $slot = $giver->getInventory()->getHeldItemSlot();
     if ($n <= 0) {
         $giver->getInventory()->clear($slot);
     } else {
         $giver->getInventory()->setItem($slot, $good);
     }
     $item = MPMU::itemName($good);
     if (MPMU::apiVersion("1.12.0")) {
         $giver->sendTip(mc::_("Gave one %1%", $item));
         $taker->sendTip(mc::_("Received %1%", $item));
     } else {
         $giver->sendMessage(mc::_("Gave one %1%", $item));
         $taker->sendMessage(mc::_("Received %1%", $item));
     }
 }
예제 #27
0
 /**
  * @param Player $player
  * @param        $damage
  * @return float
  * 根据玩家的装备获取玩家应受到的伤害值
  */
 public function getPlayerDamage(Player $player, $damage)
 {
     $armorValues = [Item::LEATHER_CAP => 1, Item::LEATHER_TUNIC => 3, Item::LEATHER_PANTS => 2, Item::LEATHER_BOOTS => 1, Item::CHAIN_HELMET => 1, Item::CHAIN_CHESTPLATE => 5, Item::CHAIN_LEGGINGS => 4, Item::CHAIN_BOOTS => 1, Item::GOLD_HELMET => 1, Item::GOLD_CHESTPLATE => 5, Item::GOLD_LEGGINGS => 3, Item::GOLD_BOOTS => 1, Item::IRON_HELMET => 2, Item::IRON_CHESTPLATE => 6, Item::IRON_LEGGINGS => 5, Item::IRON_BOOTS => 2, Item::DIAMOND_HELMET => 3, Item::DIAMOND_CHESTPLATE => 8, Item::DIAMOND_LEGGINGS => 6, Item::DIAMOND_BOOTS => 3];
     $points = 0;
     foreach ($player->getInventory()->getArmorContents() as $index => $i) {
         if (isset($armorValues[$i->getId()])) {
             $points += $armorValues[$i->getId()];
         }
     }
     $damage = floor($damage - $points * 0.04);
     if ($damage < 0) {
         $damage = 0;
     }
     return $damage;
 }
예제 #28
0
 private function checkAmmo(Player $p, $adj = false)
 {
     foreach ($p->getInventory()->getContents() as $slot => $item) {
         if ($item->getID() != Item::TNT || $item->getCount() == 0) {
             continue;
         }
         if ($adj) {
             $count = $item->getCount();
             if ($count == 1) {
                 // The last one...
                 $p->getInventory()->clear($slot);
             } else {
                 $item->setCount($count - 1);
                 $p->getInventory()->setItem($slot, $item);
             }
         }
         return true;
     }
     // Run out of grenades, disarm ...
     if (isset($this->shooters[$p->getName()])) {
         unset($this->shooters[$p->getName()]);
     }
     return false;
 }
예제 #29
-1
 public function applyTo(Player $p)
 {
     $inventory = $p->getInventory()->getContents();
     $size = $p->getInventory()->getSize();
     foreach ($this->items as $id => $item) {
         if (!is_numeric($id)) {
             switch ($id) {
                 case 'helmet':
                     $id = $size;
                     break;
                 case 'chestplate':
                     $id = $size + 1;
                     break;
                 case 'leggings':
                     $id = $size + 2;
                     break;
                 case 'boots':
                     $id = $size + 3;
                     break;
             }
         }
         $inventory[$id] = $item;
     }
     $p->getInventory()->setContents($inventory);
     $p->getInventory()->sendArmorContents([$p]);
     foreach ($this->commands as $command) {
         $command = str_replace("{player}", $p->getName(), $command);
         $this->getPlugin()->getServer()->dispatchCommand(new ConsoleCommandSender(), $command);
     }
     if ($this->onGiveMessage !== false) {
         $p->sendMessage($this->onGiveMessage);
     }
 }
예제 #30
-2
 public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
 {
     $blockTemp = $level->getBlock($block->add(0, -1, 0));
     //if(!$block instanceof RailBlock || !$block instanceof Rail) return false; in previuos version IM
     //if($blockTemp->getId() != self::RAIL and $blockTemp->getId() != self::POWERED_RAIL) return; in previuos version Genisys
     $minecart = new MinecartEntity($player->getLevel()->getChunk($block->getX() >> 4, $block->getZ() >> 4), new CompoundTag("", array("Pos" => new ListTag("Pos", array(new DoubleTag("", $block->getX()), new DoubleTag("", $block->getY() + 1), new DoubleTag("", $block->getZ()))), "Motion" => new ListTag("Motion", array(new DoubleTag("", 0), new DoubleTag("", 0), new DoubleTag("", 0))), "Rotation" => new ListTag("Rotation", array(new FloatTag("", 0), new FloatTag("", 0))))));
     $minecart->spawnToAll();
     if ($player->isSurvival()) {
         $item = $player->getInventory()->getItemInHand();
         $count = $item->getCount();
         if (--$count <= 0) {
             $player->getInventory()->setItemInHand(Item::get(Item::AIR));
             return;
         }
         $item->setCount($count);
         $player->getInventory()->setItemInHand($item);
     }
     return true;
 }