public function execute(CommandSender $sender, $currentAlias, array $args) { if (!$this->testPermission($sender)) { return true; } if (count($args) < 2) { $sender->sendMessage(new TranslationContainer("commands.generic.usage", [$this->usageMessage])); return true; } $player = $sender->getServer()->getPlayer($args[0]); if ($player === null) { $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.generic.player.notFound")); return true; } $enchantId = $args[1]; $enchantLevel = isset($args[2]) ? (int) $args[2] : 1; $enchantment = Enchantment::getEnchantment($enchantId); if ($enchantment->getId() === Enchantment::TYPE_INVALID) { $enchantment = Enchantment::getEnchantmentByName($enchantId); if ($enchantment->getId() === Enchantment::TYPE_INVALID) { $sender->sendMessage(new TranslationContainer("commands.enchant.notFound", [$enchantment->getId()])); return true; } } $id = $enchantment->getId(); $maxLevel = Enchantment::getEnchantMaxLevel($id); if ($enchantLevel > $maxLevel or $enchantLevel <= 0) { $sender->sendMessage(new TranslationContainer("commands.enchant.maxLevel", [$maxLevel])); return true; } $enchantment->setLevel($enchantLevel); $item = $player->getInventory()->getItemInHand(); if ($item->getId() <= 0) { $sender->sendMessage(new TranslationContainer("commands.enchant.noItem")); return true; } if (Enchantment::getEnchantAbility($item) === 0) { $sender->sendMessage(new TranslationContainer(TextFormat::RED . "%commands.enchant.cantEnchant")); return true; } $item->addEnchantment($enchantment); $player->getInventory()->setItemInHand($item); self::broadcastCommandMessage($sender, new TranslationContainer("%commands.enchant.success")); return true; }
/** * @param $id * @return Int level|0(for null) */ public function getEnchantmentLevel(int $id) { if (!$this->hasEnchantments()) { return 0; } foreach ($this->getNamedTag()->ench as $entry) { if ($entry["id"] === $id) { $e = Enchantment::getEnchantment($entry["id"]); $e->setLevel($entry["lvl"]); $E_level = $e->getLevel() > Enchantment::getEnchantMaxLevel($id) ? Enchantment::getEnchantMaxLevel($id) : $e->getLevel(); return $E_level; } } return 0; }