FunctionalItem is a PocketMine-MP library to give items functionalities using actual classes instead of Events.
\Jibix\FuctionalItem\FunctionalItemManager::register($this);
\Jibix\FuctionalItem\FunctionalItemManager::getInstance()->registerFunctionalItem(new MyFunctionalItem());
- NonPlaceableFlag
//Basically do implements YourFlag
class ExampleItem extends \Jibix\FuctionalItem\item\FunctionalItem implements ItemFlag{
//Checks if $item equals the functional item
//Example: ExampleItem::equals($player->getInventory()->getItemInHand())
public static function equals(Item $item): bool;
//Removes the functional item from the player's inventory
public static function remove(Inventory $inventory): void;
//Returns the cooldown time (in ticks) until the item can be used again
public function getCooldownTicks(Player $player, Item $item): int;
//Called when the player right-clicks this item
//If it returns false, the interaction will be canceled
public function onUse(Player $player, ?Vector3 $useVector = null): bool;
//Called when the player drops this item
//If it returns false, the drop will be canceled
public function onDrop(Player $player): bool;
//Called when the player helds this item
//If it returns false, the slot switch will be canceled
public function onHeld(Player $player, int $slot): bool;
//Called when the player clicks this item in their inventory
//If it returns false, the inventory transaction will be canceled
public function onInvClick(Player $player): bool;
//Called when the player hits an entity with this item
//If it returns false, the damage event will be canceled
public function onHitEntity(Player $player, Entity $entity): bool;
//Called when the player right-clicks an entity with this item
//If it returns false, the interaction will be canceled
public function onInteractEntity(Player $player, Entity $entity, Vector3 $clickPos): bool;
class ExampleItem extends \Jibix\FuctionalItem\item\FunctionalItem{
private const USE_COOLDOWN = 5 * 20; //5 seconds
public static function getItem(?Player $player = null, string $customName = "§bExample"): Item{
return self::getInternalItem(VanillaItems::STICK()->setCustomName($customName));
}
public function getCooldownTicks(Player $player, Item $item): int{
return self::USE_COOLDOWN;
}
public function onDrop(Player $player): bool{
return false; //Can't be dropped
}
public function onUse(Player $player, ?Vector3 $useVector = null): bool{
$player->sendMessage("You just used the FunctionalItem example-stick!");
return true;
}
}
$player->getInventory()->addItem(MyFunctionalItem::getItem($player, ...$customArgs));