вот исправленный код:
<?php namespace Shop; use pocketmine\\\\plugin\\\\PluginBase; use pocketmine\\\\command\\\\Command; use pocketmine\\\\command\\\\CommandSender; use pocketmine\\\\Player; use pocketmine\\\\Server; use pocketmine\\\\item\\\\Item; use pocketmine\\\\utils\\\\TextFormat as TF; use pocketmine\\\\event\\\\Listener; use ChestAPI\\\\ChestAPI; use ChestAPI\\\\ChestClickEvent; use onebone\\\\economyapi\\\\EconomyAPI; class Shop extends PluginBase implements Listener { private $economy; private $chestAPI; private $shopPlayers = \\\[\\\]; public function onEnable() { $this->getServer()->getPluginManager()->registerEvents($this, $this); if(!$this->getServer()->getPluginManager()->getPlugin("ChestAPI")) { $this->getLogger()->critical("§cChestAPI не найден! Плагин отключен."); $this->getServer()->getPluginManager()->disablePlugin($this); return; } if(!$this->getServer()->getPluginManager()->getPlugin("EconomyAPI")) { $this->getLogger()->critical("§cEconomyAPI не найден! Плагин отключен."); $this->getServer()->getPluginManager()->disablePlugin($this); return; } $this->economy = EconomyAPI::getInstance(); $this->chestAPI = ChestAPI::getInstance(); $this->getLogger()->info("§aМагазин успешно загружен!"); } public function onCommand(CommandSender $sender, Command $command, $label, array $args) { if($command->getName() == "shop") { if(!$sender instanceof Player) { $sender->sendMessage("§cЭту команду можно использовать только в игре!"); return true; } $this->openShop($sender); return true; } return false; } public function openShop(Player $player) { $this->shopPlayers\\\[strtolower($player->getName())\\\] = true; $items = \\\[\\\]; $glass = Item::get(20, 0, 1); $glass->setCustomName("§r§8"); for($i = 0; $i <= 8; $i++) { $items\\\[$i\\\] = $glass; } for($i = 45; $i <= 53; $i++) { $items\\\[$i\\\] = $glass; } $items\\\[9\\\] = $glass; $items\\\[17\\\] = $glass; $items\\\[18\\\] = $glass; $items\\\[26\\\] = $glass; $items\\\[27\\\] = $glass; $items\\\[35\\\] = $glass; $items\\\[36\\\] = $glass; $items\\\[44\\\] = $glass; $grass = Item::get(2, 0, 1); $grass->setCustomName("§r§a§lТравяной блок\\\\n§r§7Цена: §e§l50$"); $items\\\[10\\\] = $grass; $stone = Item::get(1, 0, 1); $stone->setCustomName("§r§7§lКамень\\\\n§r§7Цена: §e§l30$"); $items\\\[11\\\] = $stone; $wood = Item::get(17, 0, 1); $wood->setCustomName("§r§6§lДубовое бревно\\\\n§r§7Цена: §e§l40$"); $items\\\[12\\\] = $wood; $cobblestone = Item::get(4, 0, 1); $cobblestone->setCustomName("§r§7§lБулыжник\\\\n§r§7Цена: §e§l20$"); $items\\\[13\\\] = $cobblestone; $planks = Item::get(5, 0, 1); $planks->setCustomName("§r§6§lДубовые доски\\\\n§r§7Цена: §e§l35$"); $items\\\[14\\\] = $planks; $glassBlock = Item::get(20, 0, 1); $glassBlock->setCustomName("§r§b§lСтекло\\\\n§r§7Цена: §e§l45$"); $items\\\[15\\\] = $glassBlock; $sand = Item::get(12, 0, 1); $sand->setCustomName("§r§e§lПесок\\\\n§r§7Цена: §e§l25$"); $items\\\[16\\\] = $sand; $apple = Item::get(260, 0, 1); $apple->setCustomName("§r§c§lЯблоко\\\\n§r§7Цена: §e§l10$"); $items\\\[19\\\] = $apple; $bread = Item::get(297, 0, 1); $bread->setCustomName("§r§6§lХлеб\\\\n§r§7Цена: §e§l15$"); $items\\\[20\\\] = $bread; $cookedBeef = Item::get(364, 0, 1); $cookedBeef->setCustomName("§r§c§lЖареная говядина\\\\n§r§7Цена: §e§l25$"); $items\\\[21\\\] = $cookedBeef; $cookedChicken = Item::get(366, 0, 1); $cookedChicken->setCustomName("§r§f§lЖареная курица\\\\n§r§7Цена: §e§l20$"); $items\\\[22\\\] = $cookedChicken; $carrot = Item::get(391, 0, 1); $carrot->setCustomName("§r§6§lМорковь\\\\n§r§7Цена: §e§l12$"); $items\\\[23\\\] = $carrot; $bakedPotato = Item::get(393, 0, 1); $bakedPotato->setCustomName("§r§6§lПечёный картофель\\\\n§r§7Цена: §e§l18$"); $items\\\[24\\\] = $bakedPotato; $cookie = Item::get(357, 0, 1); $cookie->setCustomName("§r§6§lПеченье\\\\n§r§7Цена: §e§l8$"); $items\\\[25\\\] = $cookie; $woodenPickaxe = Item::get(270, 0, 1); $woodenPickaxe->setCustomName("§r§6§lДеревянная кирка\\\\n§r§7Цена: §e§l50$"); $items\\\[28\\\] = $woodenPickaxe; $stonePickaxe = Item::get(274, 0, 1); $stonePickaxe->setCustomName("§r§7§lКаменная кирка\\\\n§r§7Цена: §e§l100$"); $items\\\[29\\\] = $stonePickaxe; $ironPickaxe = Item::get(257, 0, 1); $ironPickaxe->setCustomName("§r§f§lЖелезная кирка\\\\n§r§7Цена: §e§l200$"); $items\\\[30\\\] = $ironPickaxe; $woodenAxe = Item::get(271, 0, 1); $woodenAxe->setCustomName("§r§6§lДеревянный топор\\\\n§r§7Цена: §e§l50$"); $items\\\[31\\\] = $woodenAxe; $stoneAxe = Item::get(275, 0, 1); $stoneAxe->setCustomName("§r§7§lКаменный топор\\\\n§r§7Цена: §e§l100$"); $items\\\[32\\\] = $stoneAxe; $woodenSword = Item::get(268, 0, 1); $woodenSword->setCustomName("§r§6§lДеревянный меч\\\\n§r§7Цена: §e§l40$"); $items\\\[33\\\] = $woodenSword; $stoneSword = Item::get(272, 0, 1); $stoneSword->setCustomName("§r§7§lКаменный меч\\\\n§r§7Цена: §e§l80$"); $items\\\[34\\\] = $stoneSword; $dirt = Item::get(3, 0, 1); $dirt->setCustomName("§r§6§lЗемля\\\\n§r§7Цена: §e§l15$"); $items\\\[37\\\] = $dirt; $coal = Item::get(263, 0, 1); $coal->setCustomName("§r§8§lУголь\\\\n§r§7Цена: §e§l35$"); $items\\\[38\\\] = $coal; $ironIngot = Item::get(265, 0, 1); $ironIngot->setCustomName("§r§f§lЖелезный слиток\\\\n§r§7Цена: §e§l150$"); $items\\\[39\\\] = $ironIngot; $goldIngot = Item::get(266, 0, 1); $goldIngot->setCustomName("§r§e§lЗолотой слиток\\\\n§r§7Цена: §e§l300$"); $items\\\[40\\\] = $goldIngot; $diamond = Item::get(264, 0, 1); $diamond->setCustomName("§r§b§lАлмаз\\\\n§r§7Цена: §e§l500$"); $items\\\[41\\\] = $diamond; $potato = Item::get(392, 0, 1); $potato->setCustomName("§r§6§lКартофель\\\\n§r§7Цена: §e§l12$"); $items\\\[42\\\] = $potato; $emerald = Item::get(388, 0, 1); $emerald->setCustomName("§r§a§lИзумруд\\\\n§r§7Цена: §e§l600$"); $items\\\[43\\\] = $emerald; $this->chestAPI->openChest( $player, $items, "§l§e§lМАГАЗИН", ChestAPI::DOUBLE_CHEST, true, true, "§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\\\\n§e§l✦ ДОБРО ПОЖАЛОВАТЬ В МАГАЗИН ✦\\\\n§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬" ); } public function onChestClick(ChestClickEvent $event) { $player = $event->getPlayer(); $item = $event->getItem(); if(!isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) return; $event->setCancelled(); if($item->getId() == 0) return; $prices = $this->getPrices(); $itemKey = $item->getId() . ":" . $item->getDamage(); if(!isset($prices\\\[$itemKey\\\])) { return; } $price = $prices\\\[$itemKey\\\]; $balance = $this->economy->myMoney($player); if($balance < $price) { $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§c§l"); $player->sendMessage("§c§l ✘ НЕДОСТАТОЧНО ДЕНЕГ! ✘"); $player->sendMessage("§c§l"); $player->sendMessage("§e§l Нужно: §c§l" . $price . "$"); $player->sendMessage("§e§l У вас: §a§l" . $balance . "$"); $player->sendMessage("§c§l"); $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); return; } $purchaseItem = Item::get($item->getId(), $item->getDamage(), 1); $purchaseItem->setCustomName(""); if(!$player->getInventory()->canAddItem($purchaseItem)) { $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§c§l ✘ НЕТ МЕСТА В ИНВЕНТАРЕ! ✘"); $player->sendMessage("§e§l Освободите место и попробуйте снова"); $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); return; } $player->getInventory()->addItem($purchaseItem); $this->economy->reduceMoney($player, $price); $itemName = $purchaseItem->getName(); $newBalance = $this->economy->myMoney($player); $player->sendMessage("§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§a§l ✔ ПОКУПКА УСПЕШНА! ✔"); $player->sendMessage("§e§l Товар: §f§l" . $itemName); $player->sendMessage("§e§l Цена: §c§l-" . $price . "$"); $player->sendMessage("§e§l Баланс: §a§l" . $newBalance . "$"); $player->sendMessage("§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); } private function getPrices() { return \\\[ "2:0" => 50, "1:0" => 30, "17:0" => 40, "4:0" => 20, "20:0" => 45, "12:0" => 25, "3:0" => 15, "5:0" => 35, "260:0" => 10, "297:0" => 15, "364:0" => 25, "366:0" => 20, "391:0" => 12, "392:0" => 12, "393:0" => 18, "357:0" => 8, "270:0" => 50, "274:0" => 100, "257:0" => 200, "271:0" => 50, "275:0" => 100, "268:0" => 40, "272:0" => 80, "263:0" => 35, "265:0" => 150, "266:0" => 300, "264:0" => 500, "388:0" => 600, \\\]; } public function onChestClose(\\\\ChestAPI\\\\ChestCloseEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { unset($this->shopPlayers\\\[strtolower($player->getName())\\\]); $player->getCursorInventory()->clearAll(); } } public function onPlayerQuit(\\\\pocketmine\\\\event\\\\player\\\\PlayerQuitEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { unset($this->shopPlayers\\\[strtolower($player->getName())\\\]); $player->getCursorInventory()->clearAll(); } } public function onPlayerDropItem(\\\\pocketmine\\\\event\\\\player\\\\PlayerDropItemEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { $event->setCancelled(true); $player->getInventory()->setItemInHand(Item::get(0)); $player->getCursorInventory()->clearAll(); $player->sendMessage("§c§lНельзя выбрасывать предметы из магазина!"); } } public function onInventoryTransaction(\\\\pocketmine\\\\event\\\\inventory\\\\InventoryTransactionEvent $event) { $player = $event->getTransaction()->getSource(); if($player instanceof Player) { if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { $event->setCancelled(true); } } } }
<?php namespace Shop; use pocketmine\\\\plugin\\\\PluginBase; use pocketmine\\\\command\\\\Command; use pocketmine\\\\command\\\\CommandSender; use pocketmine\\\\Player; use pocketmine\\\\Server; use pocketmine\\\\item\\\\Item; use pocketmine\\\\utils\\\\TextFormat as TF; use pocketmine\\\\event\\\\Listener; use ChestAPI\\\\ChestAPI; use ChestAPI\\\\ChestClickEvent; use onebone\\\\economyapi\\\\EconomyAPI; class Shop extends PluginBase implements Listener { private $economy; private $chestAPI; private $shopPlayers = \\\[\\\]; public function onEnable() { $this->getServer()->getPluginManager()->registerEvents($this, $this); if(!$this->getServer()->getPluginManager()->getPlugin("ChestAPI")) { $this->getLogger()->critical("§cChestAPI не найден! Плагин отключен."); $this->getServer()->getPluginManager()->disablePlugin($this); return; } if(!$this->getServer()->getPluginManager()->getPlugin("EconomyAPI")) { $this->getLogger()->critical("§cEconomyAPI не найден! Плагин отключен."); $this->getServer()->getPluginManager()->disablePlugin($this); return; } $this->economy = EconomyAPI::getInstance(); $this->chestAPI = ChestAPI::getInstance(); $this->getLogger()->info("§aМагазин успешно загружен!"); } public function onCommand(CommandSender $sender, Command $command, $label, array $args) { if($command->getName() == "shop") { if(!$sender instanceof Player) { $sender->sendMessage("§cЭту команду можно использовать только в игре!"); return true; } $this->openShop($sender); return true; } return false; } public function openShop(Player $player) { $this->shopPlayers\\\[strtolower($player->getName())\\\] = true; $items = \\\[\\\]; $glass = Item::get(20, 0, 1); $glass->setCustomName("§r§8"); for($i = 0; $i <= 8; $i++) { $items\\\[$i\\\] = $glass; } for($i = 45; $i <= 53; $i++) { $items\\\[$i\\\] = $glass; } $items\\\[9\\\] = $glass; $items\\\[17\\\] = $glass; $items\\\[18\\\] = $glass; $items\\\[26\\\] = $glass; $items\\\[27\\\] = $glass; $items\\\[35\\\] = $glass; $items\\\[36\\\] = $glass; $items\\\[44\\\] = $glass; $grass = Item::get(2, 0, 1); $grass->setCustomName("§r§a§lТравяной блок\\\\n§r§7Цена: §e§l50$"); $items\\\[10\\\] = $grass; $stone = Item::get(1, 0, 1); $stone->setCustomName("§r§7§lКамень\\\\n§r§7Цена: §e§l30$"); $items\\\[11\\\] = $stone; $wood = Item::get(17, 0, 1); $wood->setCustomName("§r§6§lДубовое бревно\\\\n§r§7Цена: §e§l40$"); $items\\\[12\\\] = $wood; $cobblestone = Item::get(4, 0, 1); $cobblestone->setCustomName("§r§7§lБулыжник\\\\n§r§7Цена: §e§l20$"); $items\\\[13\\\] = $cobblestone; $planks = Item::get(5, 0, 1); $planks->setCustomName("§r§6§lДубовые доски\\\\n§r§7Цена: §e§l35$"); $items\\\[14\\\] = $planks; $glassBlock = Item::get(20, 0, 1); $glassBlock->setCustomName("§r§b§lСтекло\\\\n§r§7Цена: §e§l45$"); $items\\\[15\\\] = $glassBlock; $sand = Item::get(12, 0, 1); $sand->setCustomName("§r§e§lПесок\\\\n§r§7Цена: §e§l25$"); $items\\\[16\\\] = $sand; $apple = Item::get(260, 0, 1); $apple->setCustomName("§r§c§lЯблоко\\\\n§r§7Цена: §e§l10$"); $items\\\[19\\\] = $apple; $bread = Item::get(297, 0, 1); $bread->setCustomName("§r§6§lХлеб\\\\n§r§7Цена: §e§l15$"); $items\\\[20\\\] = $bread; $cookedBeef = Item::get(364, 0, 1); $cookedBeef->setCustomName("§r§c§lЖареная говядина\\\\n§r§7Цена: §e§l25$"); $items\\\[21\\\] = $cookedBeef; $cookedChicken = Item::get(366, 0, 1); $cookedChicken->setCustomName("§r§f§lЖареная курица\\\\n§r§7Цена: §e§l20$"); $items\\\[22\\\] = $cookedChicken; $carrot = Item::get(391, 0, 1); $carrot->setCustomName("§r§6§lМорковь\\\\n§r§7Цена: §e§l12$"); $items\\\[23\\\] = $carrot; $bakedPotato = Item::get(393, 0, 1); $bakedPotato->setCustomName("§r§6§lПечёный картофель\\\\n§r§7Цена: §e§l18$"); $items\\\[24\\\] = $bakedPotato; $cookie = Item::get(357, 0, 1); $cookie->setCustomName("§r§6§lПеченье\\\\n§r§7Цена: §e§l8$"); $items\\\[25\\\] = $cookie; $woodenPickaxe = Item::get(270, 0, 1); $woodenPickaxe->setCustomName("§r§6§lДеревянная кирка\\\\n§r§7Цена: §e§l50$"); $items\\\[28\\\] = $woodenPickaxe; $stonePickaxe = Item::get(274, 0, 1); $stonePickaxe->setCustomName("§r§7§lКаменная кирка\\\\n§r§7Цена: §e§l100$"); $items\\\[29\\\] = $stonePickaxe; $ironPickaxe = Item::get(257, 0, 1); $ironPickaxe->setCustomName("§r§f§lЖелезная кирка\\\\n§r§7Цена: §e§l200$"); $items\\\[30\\\] = $ironPickaxe; $woodenAxe = Item::get(271, 0, 1); $woodenAxe->setCustomName("§r§6§lДеревянный топор\\\\n§r§7Цена: §e§l50$"); $items\\\[31\\\] = $woodenAxe; $stoneAxe = Item::get(275, 0, 1); $stoneAxe->setCustomName("§r§7§lКаменный топор\\\\n§r§7Цена: §e§l100$"); $items\\\[32\\\] = $stoneAxe; $woodenSword = Item::get(268, 0, 1); $woodenSword->setCustomName("§r§6§lДеревянный меч\\\\n§r§7Цена: §e§l40$"); $items\\\[33\\\] = $woodenSword; $stoneSword = Item::get(272, 0, 1); $stoneSword->setCustomName("§r§7§lКаменный меч\\\\n§r§7Цена: §e§l80$"); $items\\\[34\\\] = $stoneSword; $dirt = Item::get(3, 0, 1); $dirt->setCustomName("§r§6§lЗемля\\\\n§r§7Цена: §e§l15$"); $items\\\[37\\\] = $dirt; $coal = Item::get(263, 0, 1); $coal->setCustomName("§r§8§lУголь\\\\n§r§7Цена: §e§l35$"); $items\\\[38\\\] = $coal; $ironIngot = Item::get(265, 0, 1); $ironIngot->setCustomName("§r§f§lЖелезный слиток\\\\n§r§7Цена: §e§l150$"); $items\\\[39\\\] = $ironIngot; $goldIngot = Item::get(266, 0, 1); $goldIngot->setCustomName("§r§e§lЗолотой слиток\\\\n§r§7Цена: §e§l300$"); $items\\\[40\\\] = $goldIngot; $diamond = Item::get(264, 0, 1); $diamond->setCustomName("§r§b§lАлмаз\\\\n§r§7Цена: §e§l500$"); $items\\\[41\\\] = $diamond; $potato = Item::get(392, 0, 1); $potato->setCustomName("§r§6§lКартофель\\\\n§r§7Цена: §e§l12$"); $items\\\[42\\\] = $potato; $emerald = Item::get(388, 0, 1); $emerald->setCustomName("§r§a§lИзумруд\\\\n§r§7Цена: §e§l600$"); $items\\\[43\\\] = $emerald; $this->chestAPI->openChest( $player, $items, "§l§e§lМАГАЗИН", ChestAPI::DOUBLE_CHEST, true, true, "§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\\\\n§e§l✦ ДОБРО ПОЖАЛОВАТЬ В МАГАЗИН ✦\\\\n§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬" ); } public function onChestClick(ChestClickEvent $event) { $player = $event->getPlayer(); $item = $event->getItem(); if(!isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) return; $event->setCancelled(); if($item->getId() == 0) return; $prices = $this->getPrices(); $itemKey = $item->getId() . ":" . $item->getDamage(); if(!isset($prices\\\[$itemKey\\\])) { return; } $price = $prices\\\[$itemKey\\\]; $balance = $this->economy->myMoney($player); if($balance < $price) { $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§c§l"); $player->sendMessage("§c§l ✘ НЕДОСТАТОЧНО ДЕНЕГ! ✘"); $player->sendMessage("§c§l"); $player->sendMessage("§e§l Нужно: §c§l" . $price . "$"); $player->sendMessage("§e§l У вас: §a§l" . $balance . "$"); $player->sendMessage("§c§l"); $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); return; } $purchaseItem = Item::get($item->getId(), $item->getDamage(), 1); $purchaseItem->setCustomName(""); if(!$player->getInventory()->canAddItem($purchaseItem)) { $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§c§l ✘ НЕТ МЕСТА В ИНВЕНТАРЕ! ✘"); $player->sendMessage("§e§l Освободите место и попробуйте снова"); $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); return; } $player->getInventory()->addItem($purchaseItem); $this->economy->reduceMoney($player, $price); $itemName = $purchaseItem->getName(); $newBalance = $this->economy->myMoney($player); $player->sendMessage("§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§a§l ✔ ПОКУПКА УСПЕШНА! ✔"); $player->sendMessage("§e§l Товар: §f§l" . $itemName); $player->sendMessage("§e§l Цена: §c§l-" . $price . "$"); $player->sendMessage("§e§l Баланс: §a§l" . $newBalance . "$"); $player->sendMessage("§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); } private function getPrices() { return \\\[ "2:0" => 50, "1:0" => 30, "17:0" => 40, "4:0" => 20, "20:0" => 45, "12:0" => 25, "3:0" => 15, "5:0" => 35, "260:0" => 10, "297:0" => 15, "364:0" => 25, "366:0" => 20, "391:0" => 12, "392:0" => 12, "393:0" => 18, "357:0" => 8, "270:0" => 50, "274:0" => 100, "257:0" => 200, "271:0" => 50, "275:0" => 100, "268:0" => 40, "272:0" => 80, "263:0" => 35, "265:0" => 150, "266:0" => 300, "264:0" => 500, "388:0" => 600, \\\]; } public function onChestClose(\\\\ChestAPI\\\\ChestCloseEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { unset($this->shopPlayers\\\[strtolower($player->getName())\\\]); $player->getCursorInventory()->clearAll(); } } public function onPlayerQuit(\\\\pocketmine\\\\event\\\\player\\\\PlayerQuitEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { unset($this->shopPlayers\\\[strtolower($player->getName())\\\]); $player->getCursorInventory()->clearAll(); } } public function onPlayerDropItem(\\\\pocketmine\\\\event\\\\player\\\\PlayerDropItemEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { $event->setCancelled(true); $player->getInventory()->setItemInHand(Item::get(0)); $player->getCursorInventory()->clearAll(); $player->sendMessage("§c§lНельзя выбрасывать предметы из магазина!"); } } public function onInventoryTransaction(\\\\pocketmine\\\\event\\\\inventory\\\\InventoryTransactionEvent $event) { $player = $event->getTransaction()->getSource(); if($player instanceof Player) { if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { $event->setCancelled(true); } } } }
<?php namespace Shop; use pocketmine\\\\plugin\\\\PluginBase; use pocketmine\\\\command\\\\Command; use pocketmine\\\\command\\\\CommandSender; use pocketmine\\\\Player; use pocketmine\\\\Server; use pocketmine\\\\item\\\\Item; use pocketmine\\\\utils\\\\TextFormat as TF; use pocketmine\\\\event\\\\Listener; use ChestAPI\\\\ChestAPI; use ChestAPI\\\\ChestClickEvent; use onebone\\\\economyapi\\\\EconomyAPI; class Shop extends PluginBase implements Listener { private $economy; private $chestAPI; private $shopPlayers = \\\[\\\]; public function onEnable() { $this->getServer()->getPluginManager()->registerEvents($this, $this); if(!$this->getServer()->getPluginManager()->getPlugin("ChestAPI")) { $this->getLogger()->critical("§cChestAPI не найден! Плагин отключен."); $this->getServer()->getPluginManager()->disablePlugin($this); return; } if(!$this->getServer()->getPluginManager()->getPlugin("EconomyAPI")) { $this->getLogger()->critical("§cEconomyAPI не найден! Плагин отключен."); $this->getServer()->getPluginManager()->disablePlugin($this); return; } $this->economy = EconomyAPI::getInstance(); $this->chestAPI = ChestAPI::getInstance(); $this->getLogger()->info("§aМагазин успешно загружен!"); } public function onCommand(CommandSender $sender, Command $command, $label, array $args) { if($command->getName() == "shop") { if(!$sender instanceof Player) { $sender->sendMessage("§cЭту команду можно использовать только в игре!"); return true; } $this->openShop($sender); return true; } return false; } public function openShop(Player $player) { $this->shopPlayers\\\[strtolower($player->getName())\\\] = true; $items = \\\[\\\]; $glass = Item::get(20, 0, 1); $glass->setCustomName("§r§8"); for($i = 0; $i <= 8; $i++) { $items\\\[$i\\\] = $glass; } for($i = 45; $i <= 53; $i++) { $items\\\[$i\\\] = $glass; } $items\\\[9\\\] = $glass; $items\\\[17\\\] = $glass; $items\\\[18\\\] = $glass; $items\\\[26\\\] = $glass; $items\\\[27\\\] = $glass; $items\\\[35\\\] = $glass; $items\\\[36\\\] = $glass; $items\\\[44\\\] = $glass; $grass = Item::get(2, 0, 1); $grass->setCustomName("§r§a§lТравяной блок\\\\n§r§7Цена: §e§l50$"); $items\\\[10\\\] = $grass; $stone = Item::get(1, 0, 1); $stone->setCustomName("§r§7§lКамень\\\\n§r§7Цена: §e§l30$"); $items\\\[11\\\] = $stone; $wood = Item::get(17, 0, 1); $wood->setCustomName("§r§6§lДубовое бревно\\\\n§r§7Цена: §e§l40$"); $items\\\[12\\\] = $wood; $cobblestone = Item::get(4, 0, 1); $cobblestone->setCustomName("§r§7§lБулыжник\\\\n§r§7Цена: §e§l20$"); $items\\\[13\\\] = $cobblestone; $planks = Item::get(5, 0, 1); $planks->setCustomName("§r§6§lДубовые доски\\\\n§r§7Цена: §e§l35$"); $items\\\[14\\\] = $planks; $glassBlock = Item::get(20, 0, 1); $glassBlock->setCustomName("§r§b§lСтекло\\\\n§r§7Цена: §e§l45$"); $items\\\[15\\\] = $glassBlock; $sand = Item::get(12, 0, 1); $sand->setCustomName("§r§e§lПесок\\\\n§r§7Цена: §e§l25$"); $items\\\[16\\\] = $sand; $apple = Item::get(260, 0, 1); $apple->setCustomName("§r§c§lЯблоко\\\\n§r§7Цена: §e§l10$"); $items\\\[19\\\] = $apple; $bread = Item::get(297, 0, 1); $bread->setCustomName("§r§6§lХлеб\\\\n§r§7Цена: §e§l15$"); $items\\\[20\\\] = $bread; $cookedBeef = Item::get(364, 0, 1); $cookedBeef->setCustomName("§r§c§lЖареная говядина\\\\n§r§7Цена: §e§l25$"); $items\\\[21\\\] = $cookedBeef; $cookedChicken = Item::get(366, 0, 1); $cookedChicken->setCustomName("§r§f§lЖареная курица\\\\n§r§7Цена: §e§l20$"); $items\\\[22\\\] = $cookedChicken; $carrot = Item::get(391, 0, 1); $carrot->setCustomName("§r§6§lМорковь\\\\n§r§7Цена: §e§l12$"); $items\\\[23\\\] = $carrot; $bakedPotato = Item::get(393, 0, 1); $bakedPotato->setCustomName("§r§6§lПечёный картофель\\\\n§r§7Цена: §e§l18$"); $items\\\[24\\\] = $bakedPotato; $cookie = Item::get(357, 0, 1); $cookie->setCustomName("§r§6§lПеченье\\\\n§r§7Цена: §e§l8$"); $items\\\[25\\\] = $cookie; $woodenPickaxe = Item::get(270, 0, 1); $woodenPickaxe->setCustomName("§r§6§lДеревянная кирка\\\\n§r§7Цена: §e§l50$"); $items\\\[28\\\] = $woodenPickaxe; $stonePickaxe = Item::get(274, 0, 1); $stonePickaxe->setCustomName("§r§7§lКаменная кирка\\\\n§r§7Цена: §e§l100$"); $items\\\[29\\\] = $stonePickaxe; $ironPickaxe = Item::get(257, 0, 1); $ironPickaxe->setCustomName("§r§f§lЖелезная кирка\\\\n§r§7Цена: §e§l200$"); $items\\\[30\\\] = $ironPickaxe; $woodenAxe = Item::get(271, 0, 1); $woodenAxe->setCustomName("§r§6§lДеревянный топор\\\\n§r§7Цена: §e§l50$"); $items\\\[31\\\] = $woodenAxe; $stoneAxe = Item::get(275, 0, 1); $stoneAxe->setCustomName("§r§7§lКаменный топор\\\\n§r§7Цена: §e§l100$"); $items\\\[32\\\] = $stoneAxe; $woodenSword = Item::get(268, 0, 1); $woodenSword->setCustomName("§r§6§lДеревянный меч\\\\n§r§7Цена: §e§l40$"); $items\\\[33\\\] = $woodenSword; $stoneSword = Item::get(272, 0, 1); $stoneSword->setCustomName("§r§7§lКаменный меч\\\\n§r§7Цена: §e§l80$"); $items\\\[34\\\] = $stoneSword; $dirt = Item::get(3, 0, 1); $dirt->setCustomName("§r§6§lЗемля\\\\n§r§7Цена: §e§l15$"); $items\\\[37\\\] = $dirt; $coal = Item::get(263, 0, 1); $coal->setCustomName("§r§8§lУголь\\\\n§r§7Цена: §e§l35$"); $items\\\[38\\\] = $coal; $ironIngot = Item::get(265, 0, 1); $ironIngot->setCustomName("§r§f§lЖелезный слиток\\\\n§r§7Цена: §e§l150$"); $items\\\[39\\\] = $ironIngot; $goldIngot = Item::get(266, 0, 1); $goldIngot->setCustomName("§r§e§lЗолотой слиток\\\\n§r§7Цена: §e§l300$"); $items\\\[40\\\] = $goldIngot; $diamond = Item::get(264, 0, 1); $diamond->setCustomName("§r§b§lАлмаз\\\\n§r§7Цена: §e§l500$"); $items\\\[41\\\] = $diamond; $potato = Item::get(392, 0, 1); $potato->setCustomName("§r§6§lКартофель\\\\n§r§7Цена: §e§l12$"); $items\\\[42\\\] = $potato; $emerald = Item::get(388, 0, 1); $emerald->setCustomName("§r§a§lИзумруд\\\\n§r§7Цена: §e§l600$"); $items\\\[43\\\] = $emerald; $this->chestAPI->openChest( $player, $items, "§l§e§lМАГАЗИН", ChestAPI::DOUBLE_CHEST, true, true, "§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬\\\\n§e§l✦ ДОБРО ПОЖАЛОВАТЬ В МАГАЗИН ✦\\\\n§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬" ); } public function onChestClick(ChestClickEvent $event) { $player = $event->getPlayer(); $item = $event->getItem(); if(!isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) return; $event->setCancelled(); if($item->getId() == 0) return; $prices = $this->getPrices(); $itemKey = $item->getId() . ":" . $item->getDamage(); if(!isset($prices\\\[$itemKey\\\])) { return; } $price = $prices\\\[$itemKey\\\]; $balance = $this->economy->myMoney($player); if($balance < $price) { $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§c§l"); $player->sendMessage("§c§l ✘ НЕДОСТАТОЧНО ДЕНЕГ! ✘"); $player->sendMessage("§c§l"); $player->sendMessage("§e§l Нужно: §c§l" . $price . "$"); $player->sendMessage("§e§l У вас: §a§l" . $balance . "$"); $player->sendMessage("§c§l"); $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); return; } $purchaseItem = Item::get($item->getId(), $item->getDamage(), 1); $purchaseItem->setCustomName(""); if(!$player->getInventory()->canAddItem($purchaseItem)) { $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§c§l ✘ НЕТ МЕСТА В ИНВЕНТАРЕ! ✘"); $player->sendMessage("§e§l Освободите место и попробуйте снова"); $player->sendMessage("§c§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); return; } $player->getInventory()->addItem($purchaseItem); $this->economy->reduceMoney($player, $price); $itemName = $purchaseItem->getName(); $newBalance = $this->economy->myMoney($player); $player->sendMessage("§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); $player->sendMessage("§a§l ✔ ПОКУПКА УСПЕШНА! ✔"); $player->sendMessage("§e§l Товар: §f§l" . $itemName); $player->sendMessage("§e§l Цена: §c§l-" . $price . "$"); $player->sendMessage("§e§l Баланс: §a§l" . $newBalance . "$"); $player->sendMessage("§a§l▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬"); } private function getPrices() { return \\\[ "2:0" => 50, "1:0" => 30, "17:0" => 40, "4:0" => 20, "20:0" => 45, "12:0" => 25, "3:0" => 15, "5:0" => 35, "260:0" => 10, "297:0" => 15, "364:0" => 25, "366:0" => 20, "391:0" => 12, "392:0" => 12, "393:0" => 18, "357:0" => 8, "270:0" => 50, "274:0" => 100, "257:0" => 200, "271:0" => 50, "275:0" => 100, "268:0" => 40, "272:0" => 80, "263:0" => 35, "265:0" => 150, "266:0" => 300, "264:0" => 500, "388:0" => 600, \\\]; } public function onChestClose(\\\\ChestAPI\\\\ChestCloseEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { unset($this->shopPlayers\\\[strtolower($player->getName())\\\]); $player->getCursorInventory()->clearAll(); } } public function onPlayerQuit(\\\\pocketmine\\\\event\\\\player\\\\PlayerQuitEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { unset($this->shopPlayers\\\[strtolower($player->getName())\\\]); $player->getCursorInventory()->clearAll(); } } public function onPlayerDropItem(\\\\pocketmine\\\\event\\\\player\\\\PlayerDropItemEvent $event) { $player = $event->getPlayer(); if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { $event->setCancelled(true); $player->getInventory()->setItemInHand(Item::get(0)); $player->getCursorInventory()->clearAll(); $player->sendMessage("§c§lНельзя выбрасывать предметы из магазина!"); } } public function onInventoryTransaction(\\\\pocketmine\\\\event\\\\inventory\\\\InventoryTransactionEvent $event) { $player = $event->getTransaction()->getSource(); if($player instanceof Player) { if(isset($this->shopPlayers\\\[strtolower($player->getName())\\\])) { $event->setCancelled(true); } } } }