Хелп с плагинов :)

Кто может переделать код
Нужно чтобы плагин работал на команде а не через нбт
// Подробнее: Нужно, когда игрок пишет иную команду в любом мире, и мог купить удочку!
// после ада и ендер мира нбт (нпс) пропадает :’(

Код:
<?php

namespace rubak;

use pocketmine\Player;
use pocketmine\Server;
use pocketmine\nbt\NBT;
use pocketmine\tile\Tile;
use pocketmine\item\Item;
use pocketmine\tile\Chest;
use pocketmine\block\Block;
use pocketmine\math\Vector3;
use pocketmine\nbt\tag\IntTag;
use pocketmine\tile\Container;
use pocketmine\event\Listener;
use pocketmine\command\Command;
use pocketmine\nbt\tag\ListTag;
use pocketmine\nbt\tag\ByteTag;
use pocketmine\nbt\tag\ShortTag;
use pocketmine\nbt\tag\FloatTag;
use pocketmine\nbt\tag\DoubleTag;
use pocketmine\nbt\tag\StringTag;
use pocketmine\plugin\PluginBase;
use pocketmine\nbt\tag\CompoundTag;
use pocketmine\level\sound\PopSound;
use pocketmine\command\CommandSender;
use pocketmine\level\sound\AnvilFallSound;
use pocketmine\level\sound\ExpPickupSound;
use pocketmine\event\player\PlayerDropItemEvent;
use pocketmine\network\mcpe\protocol\protocolInfo;
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\event\inventory\InventoryCloseEvent;
use pocketmine\network\mcpe\protocol\InteractPacket;
use pocketmine\event\entity\EntityDamageByEntityEvent;
use pocketmine\event\entity\EntityInventoryChangeEvent;
use pocketmine\network\mcpe\protocol\UpdateBlockPacket;
use pocketmine\network\mcpe\protocol\ContainerOpenPacket;
use pocketmine\network\mcpe\protocol\ContainerClosePacket;
use pocketmine\network\mcpe\protocol\ContainerSetSlotPacket;
use pocketmine\network\mcpe\protocol\INVENTORY_ACTION_PACKET;
use pocketmine\network\mcpe\protocol\types\InventoryNetworkIds;
use pocketmine\network\mcpe\protocol\ContainerSetContentPacket;
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\entity\Human;
use pocketmine\item\enchantment\Enchantment;

class Main extends PluginBase implements Listener{

private $Chest = array();
private $Stranisa = array();

public function onEnable(){
    $this->eco = $this->getServer()->getPluginManager()->getPlugin("FikusECO");
    $this->getServer()->getPluginManager()->registerEvents($this, $this);
  }

public function NPCskin(Player $p, $name) {
    $nbt = new CompoundTag("", ["Pos" => new ListTag("Pos", [new DoubleTag("", $p->x), new DoubleTag("", $p->y), new DoubleTag("", $p->z)]), "Motion" => new ListTag("Motion", [new DoubleTag("", 0), new DoubleTag("", 0), new DoubleTag("", 0)]), "Rotation" => new ListTag("Rotation", [new DoubleTag("", $p->yaw), new DoubleTag("", $p->pitch)]), "Skin" => new CompoundTag("Skin", ["Data" => new StringTag("Data", $p->getSkinData()), "Name" => new StringTag("Name", $p->getSkinId())])]);
    $npc = new Human($p->level, $nbt);
    $npc->setNameTag($name);
    $npc->setNameTagVisible(true);
    $npc->setNameTagAlwaysVisible(true);
    $npc->spawnToAll();
    $npc->setMaxHealt(10);
  }

public function npcname(EntityDamageEvent $event){
        if($event instanceof EntityDamageByEntityEvent){
            $p = $event->getDamager();
            $vil = $event->getEntity();
            if($p instanceof Player && $vil instanceof Human && $vil->getNameTag() == "§l§bРыбак§r"){
                $event->setCancelled(true);
                $nick = strtolower($p->getName());
                $p->getLevel()->addSound(new PopSound($p));
            }
        }
    }

public function onDamager(EntityDamageEvent $e){
if($e instanceof EntityDamageByEntityEvent){
$d = $e->getDamager();
$entity = $e->getEntity();
if($d instanceof Player && $entity instanceof Human && $entity->getNameTag() == "§r§l§bРыбак") {
$e->setCancelled();
if($d->getGamemode() !== 0) {
$d->sendMessage("§l§bFMPE.ML §4Используйте в выживании!");
return false;
}
$nick = strtolower($d->getName());
$d->getLevel()->addSound(new PopSound($d));
$this->openChesta($d, $nick);
$this->Chesta[$nick] = true;
}
}
}

	public function setContenta($p, $Stranisa){
    $nick = strtolower($p->getName());
    $packet = new ContainerSetContentPacket;
    $packet->windowid = 10;
    $packet->targetEid = -1;
    $Proverka = "§5§6§1§3";
      for($Slot = 0; $Slot < 27; $Slot++){
	   $packet->slots[$Slot] = Item::get(102, 0, 1)->setCustomName("§f $Proverka");
      }
            
      if($Stranisa != 1){
       $packet->slots[22] = Item::get(236, 14, 1)->setCustomName("§l§bFMPE.ML §cНазад $Proverka");
      }
      
	  if($Stranisa == 1){
       $packet->slots[12] = Item::get(102, 0, 1)->setCustomName("§f $Proverka");
       $packet->slots[2] = Item::get(346, 0, 1)->setCustomName("§l§aУдочка первого Уровня\n§l§7Ловит больше вещей в 2 раза!\n§7§lЦена: §b120 §c⛁\n§l§7Кол-во: §bx1\n§eНажмите повторно, чтобы купить. $Proverka");
       $packet->slots[11] = Item::get(346, 0, 1)->setCustomName("§l§aУдочка второго Уровня\n§l§7Ловит больше вещей в 3 раза!\n§7§lЦена: §b240 §c⛁\n§l§7Кол-во: §bx1\n§eНажмите повторно, чтобы купить. $Proverka");
       $packet->slots[20] = Item::get(346, 0, 1)->setCustomName("§l§aУдочка третего Уровня\n§l§7Ловит больше вещей в 4 раза!\n§7§lЦена: §b480 §c⛁\n§l§7Кол-во: §bx1\n§eНажмите повторно, чтобы купить. $Proverka");

       $packet->slots[13] = Item::get(349, 0, 1)->setCustomName("§l§aСырая рыба\n§7§lЦена: §b50 §c⛁\n§l§7Кол-во: §bx10\n§eНажмите повторно, чтобы купить. $Proverka");
       $packet->slots[14] = Item::get(460, 0, 1)->setCustomName("§l§aСырой лосось\n§7§lЦена: §b50 §c⛁\n§l§7Кол-во: §bx10\n§eНажмите повторно, чтобы купить. $Proverka");
       $packet->slots[15] = Item::get(461, 0, 1)->setCustomName("§l§aРыба-клоун\n§7§lЦена: §b50 §c⛁\n§l§7Кол-во: §bx10\n§eНажмите повторно, чтобы купить. $Proverka");
	  }

    $p->dataPacket($packet);
   }
   
   public function openChesta($p, $nick){
    $packet = new UpdateBlockPacket;
    $packet->x = (int)round($p->x);
    $packet->y = (int)round($p->y) - (int)3;
    $packet->z = (int)round($p->z);
    $packet->blockId = 54;
    $packet->blockData = 0;
    $p->dataPacket($packet);
    $tag = new CompoundTag("", [
    new StringTag("id", Tile::CHEST),
    new StringTag("CustomName"),
    new IntTag("x", (int)round($p->x)),
    new IntTag("y", (int)round($p->y) - (int)3),
    new IntTag("z", (int)round($p->z))
    ]);
    $Tile = Tile::createTile("Chesta", $p->getLevel(), $tag);
    $packet = new ContainerOpenPacket;
    $packet->windowid = 10;
    $packet->type = InventoryNetworkIds::CONTAINER;
    $packet->x = (int)round($p->x);
    $packet->y = (int)round($p->y) - (int)3;
    $packet->z = (int)round($p->z);
    $p->dataPacket($packet);
    $this->setContenta($p, 1);
    $this->Stranisa[$nick] = 1;
   }
   
   public function onClosea(DataPacketReceiveEvent $e){
    $p = $e->getPlayer();
      if($e->getPacket() instanceof INVENTORY_ACTION_PACKET or $e->getPacket() instanceof ContainerSetSlotPacket){
	   $packet = $e->getPacket();
	   $nick = strtolower($p->getName());
         if(!isset($this->Chesta[$nick])) return false;
		  $Item = $packet->item;
		  $Id = $Item->getId();
          $Proverka = "§5§6§1§3";
            if($Item->getCustomName() == "§l§bFMPE.ML §cНазад $Proverka"){
		     $page = $this->Stranisa[$nick] = 1;
			 $this->setContenta($p, $page);
			 $this->Stranisa[$nick] = $page;
             $p->getLevel()->addSound(new PopSound($p));
            }

            if($Item->getCustomName() == "§f $Proverka"){
		     $page = $this->Stranisa[$nick] = 1;
			 $this->setContenta($p, $page);
			 $this->Stranisa[$nick] = $page;
			 $p->getLevel()->addSound(new PopSound($p));
            }

             if($Item->getCustomName() == "§l§aУдочка первого Уровня\n§l§7Ловит больше вещей в 2 раза!\n§7§lЦена: §b120 §c⛁\n§l§7Кол-во: §bx1\n§eНажмите повторно, чтобы купить. $Proverka"){
                if($this->eco->myMoney($nick) >= 120){
                  $rg = Item::get(346, 0, 1)->setCustomName("§l§aУдочка первого Уровня");
                  $rg->addEnchantment(Enchantment::getEnchantment(24)->setLevel(2));
                  $p->getInventory()->addItem($rg);
                  $this->eco->reduceMoney($nick, 120);
                  $p->getLevel()->addSound(new ExpPickupSound($p));
                }else{
                  $p->sendMessage("§l§bFMPE.ML §4Недостаточно средст для покупки.");
                  $p->getLevel()->addSound(new AnvilFallSound($p));
                }
              }

               if($Item->getCustomName() == "§l§aУдочка второго Уровня\n§l§7Ловит больше вещей в 3 раза!\n§7§lЦена: §b240 §c⛁\n§l§7Кол-во: §bx1\n§eНажмите повторно, чтобы купить. $Proverka"){
                if($this->eco->myMoney($nick) >= 240){
                  $rg = Item::get(346, 0, 1)->setCustomName("§l§aУдочка второго Уровня");
                  $rg->addEnchantment(Enchantment::getEnchantment(24)->setLevel(3));
                  $p->getInventory()->addItem($rg);
                  $this->eco->reduceMoney($nick, 240);
                  $p->getLevel()->addSound(new ExpPickupSound($p));
                }else{
                  $p->sendMessage("§l§bFMPE.ML §4Недостаточно средст для покупки.");
                  $p->getLevel()->addSound(new AnvilFallSound($p));
                }
              }

               if($Item->getCustomName() == "§l§aУдочка третего Уровня\n§l§7Ловит больше вещей в 4 раза!\n§7§lЦена: §b480 §c⛁\n§l§7Кол-во: §bx1\n§eНажмите повторно, чтобы купить. $Proverka"){
                if($this->eco->myMoney($nick) >= 480){
                  $rg = Item::get(346, 0, 1)->setCustomName("§l§aУдочка третего Уровня");
                  $rg->addEnchantment(Enchantment::getEnchantment(24)->setLevel(4));
                  $p->getInventory()->addItem($rg);
                  $this->eco->reduceMoney($nick, 480);
                  $p->getLevel()->addSound(new ExpPickupSound($p));
                }else{
                  $p->sendMessage("§l§bFMPE.ML §4Недостаточно средст для покупки.");
                  $p->getLevel()->addSound(new AnvilFallSound($p));
                }
              }

            if($Item->getCustomName() == "§l§aСырая рыба\n§7§lЦена: §b50 §c⛁\n§l§7Кол-во: §bx10\n§eНажмите повторно, чтобы купить. $Proverka"){
               if($p->getInventory()->contains(Item::get(349, 0, 10))){
                $this->eco->addMoney($p, 50);
                $p->getInventory()->removeItem(Item::get(349, 0, 10));
                $p->getLevel()->addSound(new ExpPickupSound($p));
                }else{
                  $p->sendMessage("§l§bFMPE.ML §4У вас нет данного предмета в инвентаре!");
                  $p->getLevel()->addSound(new AnvilFallSound($p));
                }
              }

               if($Item->getCustomName() == "§l§aСырой лосось\n§7§lЦена: §b50 §c⛁\n§l§7Кол-во: §bx10\n§eНажмите повторно, чтобы купить. $Proverka"){
                if($p->getInventory()->contains(Item::get(460, 0, 10))){
                $this->eco->addMoney($p, 50);
                $p->getInventory()->removeItem(Item::get(469, 0, 10));
                $p->getLevel()->addSound(new ExpPickupSound($p));
                }else{
                  $p->sendMessage("§l§bFMPE.ML §4У вас нет данного предмета в инвентаре!");
                  $p->getLevel()->addSound(new AnvilFallSound($p));
                }
              }

               if($Item->getCustomName() == "§l§aРыба-клоун\n§7§lЦена: §b50 §c⛁\n§l§7Кол-во: §bx10\n§eНажмите повторно, чтобы купить. $Proverka"){
                if($p->getInventory()->contains(Item::get(461, 0, 10))){
                $this->eco->addMoney($p, 50);
                $p->getInventory()->removeItem(Item::get(461, 0, 10));
                $p->getLevel()->addSound(new ExpPickupSound($p));
                }else{
                  $p->sendMessage("§l§bFMPE.ML §4У вас нет данного предмета в инвентаре!");
                  $p->getLevel()->addSound(new AnvilFallSound($p));
                }
              }

         if($e->getPacket() instanceof ContainerClosePacket){
		  $nick = strtolower($p->getName());
		
		 if(!isset($this->Chesta[$nick])) return false;
		 
		  $x = (int)round($p->x);
		  $y = (int)round($p->y)-(int)3;
	      $z = (int)round($p->z);
		  $block = Server::getInstance()->getDefaultLevel()->getBlock(new Vector3($x, $y, $z));
          $packet = new UpdateBlockPacket;
          $packet->x = (int)round($p->x);
          $packet->y = (int)round($p->y)-(int)3;
          $packet->z = (int)round($p->z);
          $packet->blockId = $block->getId();
          $packet->blockData = 0;
          $packet->dataPacket($packet);
	     unset($this->Chesta[$nick]);
		 }
      }
   }
   
   public function onInventorya(EntityInventoryChangeEvent $e){
    $p = $e->getEntity();
    $nick = strtolower($p->getName());
      if($p instanceof Player) {
   	     if(isset($this->Chesta[$nick])){
     	    if(strpos($e->getNewItem()->getCustomName(),"§5§6§1§3")) {
	         $e->setCancelled();	
	     	 $page = $this->Stranisa[$nick];
      	  	 $this->setContenta($p, $page);
     	    }
   	     }
      }
   }

   public function onDropa(PlayerDropItemEvent $e){
    $p = $e->getPlayer();
    $nick = strtolower($p->getName());
      if(isset($this->Chesta[$nick])){
         if(strpos($e->getItem()->getCustomName(),"§5§6§1§3")) {
	      $e->setCancelled();	
	      $page = $this->Stranisa[$nick];
	   	  $this->setContenta($p, $page);
         }
      }
   }

   public function onCommand(CommandSender $s, Command $cmd, $label, array $args){
    if($cmd == "rubak"){
        if($s->isOp() or $s->hasPermission("npc.use") or $s->getName() == "xlebyiiiek") {
      $name = implode(" ", $args);
      $text = explode(" ", $name);
      $name = implode(" ", $text);
      $this->NPCskin($s, $name);
      $s->sendMessage("§l§7[§aNPC§7] - §fВы создали существа с именем: §6{$name}");
        }
    }
  }
}

сори

ну и? я не скрываю

Сори, но этот говнокод вируса никто переписывать не будет. Плати.

Ахаххах, тебе сто проц. платить не буду, быдло

Беликов?

Т.е, ты хочешь вырезать NPC и сделать так, что после ввода “некой” команды выдаётся удочка и у игрока снимается “некая” сумма?

Нет, нечего изменять в команде не нужно, нужно только убрать нбт (нпс) чтобы он не спавнился

Скинь файл, если получится вырезать, скину.

Main.php (24 МБ)

я бы смог и сам, но мне лень

Мне тоже лень, но ещё скучнее ничего не делать.

И так, тебе нужно вырезать создание нпс, и команду для создания нпс?

никто не подскажет простенький код для создания npc? разбираюсь просто потихоньку во всём

Я бы с радостью, но увы, тоже уходил на долгий срок с программирования. :sweat_smile:

Как итог, практически ничего не помню . . .

тут вроде в самой теме уже есть код, попозже чекну его, может что получится, потом скажу

Ох, как же я люблю разработчиков, которые называют переменные не в тему или одной буквой. :yum:

ну называть можно как-угодно, но в плане читабельности это невыносимо

Я об этом и говорю, данный код усеян подобными переменными.

Спасибо большое, я сам уже зделал

Ок

1 симпатия