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(); } } } }
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; }
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; }
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; }
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; }
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)); }
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()]); } }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
/** * 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; }
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; }
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); }
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."; } }
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)); } }
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; }
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; }
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); } }
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; }
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!"); } } } }
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)); } }
/** * @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; }
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; }
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); } }
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; }