setPermission(implode(";", [ DefaultPermissionNames::COMMAND_GIVE_SELF, DefaultPermissionNames::COMMAND_GIVE_OTHER ])); } public function execute(CommandSender $sender, string $commandLabel, array $args){ if(!$this->testPermission($sender)){ return true; } if(count($args) < 2){ throw new InvalidCommandSyntaxException(); } $player = $this->fetchPermittedPlayerTarget($sender, $args[0], DefaultPermissionNames::COMMAND_GIVE_SELF, DefaultPermissionNames::COMMAND_GIVE_OTHER); if($player === null){ return true; } try{ $item = StringToItemParser::getInstance()->parse($args[1]) ?? LegacyStringToItemParser::getInstance()->parse($args[1]); }catch(LegacyStringToItemParserException $e){ $sender->sendMessage(KnownTranslationFactory::commands_give_item_notFound($args[1])->prefix(TextFormat::RED)); return true; } if(!isset($args[2])){ $item->setCount($item->getMaxStackSize()); }else{ $count = $this->getBoundedInt($sender, $args[2], 1, 32767); if($count === null){ return true; } $item->setCount($count); } if(isset($args[3])){ $data = implode(" ", array_slice($args, 3)); try{ $tags = JsonNbtParser::parseJson($data); }catch(NbtDataException $e){ $sender->sendMessage(KnownTranslationFactory::commands_give_tagError($e->getMessage())); return true; } try{ $item->setNamedTag($tags); }catch(NbtException $e){ $sender->sendMessage(KnownTranslationFactory::commands_give_tagError($e->getMessage())); return true; } } //TODO: overflow $player->getInventory()->addItem($item); Command::broadcastCommandMessage($sender, KnownTranslationFactory::commands_give_success( $item->getName() . " (" . $args[1] . ")", (string) $item->getCount(), $player->getName() )); return true; } }