Skip to content

Latest commit

 

History

History
78 lines (59 loc) · 2.32 KB

README.md

File metadata and controls

78 lines (59 loc) · 2.32 KB

Documentation

How to register your own entity to SimpleNPC plugin. You can also register custom entity geometry!

On your Main Class plugin

<?php

namespace your\namespace;
use brokiem\snpc\SimpleNPC;
use pocketmine\plugin\PluginBase;

class Main extends PluginBase
{
    public function onEnable(): void
    {
        $entityName = "villager_snpc"; // this is used when using the SimpleNPC spawn command. NOTE (must add _snpc)
        $force = false; // force register, if your entity not registered,  use true
        $saveNames = ["customnpc:villager"]; // save name (array)
        SimpleNPC::registerEntity(CustomVillager::class, $entityName, $force, $saveNames); // register the entity to SimpleNPC
        // NOTE: Use SimpleNPC::registerEntity();! NOT Entity::registerEntity();
    }
}

Add depend on your plugin.yml file

depend: [ "SimpleNPC" ] # add depend

On your Entity Class file

<?php

namespace your\namespace;
use brokiem\snpc\entity\BaseNPC;
use pocketmine\entity\Entity;
use brokiem\snpc\manager\emote\EmoteIds;
use pocketmine\network\mcpe\protocol\EmotePacket;
use pocketmine\Server;

class CustomVillager extends BaseNPC /* Make sure your entity class extends to \brokiem\snpc\entity\BaseNPC */
{
    public const SNPC_ENTITY_ID = Entity::VILLAGER; // Don't forget to add the network id of the entity

    public $height = 1.95; // don't forget to add height and width
    public $width = 0.6;
    protected $gravity = 0.1; // u can edit anything here
    /** @var float */
    private $lastEmote = 5.0;

    // free to want any code here, e.g onUpdate(), etc.
    
    // THIS IS HOW TO ADD EMOTE TO YOUR NPC (ONLY HUMAN NPC)
    public function onUpdate(int $currentTick): bool{
        if((5.0 + $this->lastEmote) > microtime(true)){
            return parent::onUpdate($currentTick);
        }

        $this->lastEmote = microtime(true);

        $pk = EmotePacket::create($this->getId(), EmoteIds::THE_HAMMER, 0);
        Server::getInstance()->broadcastPacket($this->getViewers(), $pk);

        return parent::onUpdate($currentTick);
    }
}

And done! now just spawn the entity with the command /snpc spawn <entityName|saveName> <nametag|null> <canWalk|false> <skinUrl|null>