🗂

WIP:InventoryLayoutパターン

2023/01/23に公開

pocketmineで使えそうなデザインパターンを共有します。

メリット

  • イベントリスナーのごちゃつきを抑止できる
InventoryLayout.php
interface InventoryLayout{
    /**
     * レイアウトを初期化する
     * 
     * 別のレイアウトに入ったときに一度だけ呼ばれる
     */
    public function initialize(LayoutHolder $holder, Player $player) : void;

    /**
     * インベントリのアイテムを更新する
     *
     * 初期化した後に同一レイアウト内で情報が変わったときに
     * アイテムを置き換える処理を行う
     */
    public function update(LayoutHolder $holder, Player $player) : void;

    /**
     * PlayerInteractEventに対応する場所
     * @return bool アップデートが必要かどうか返す
     */
    public function onClickBlock(LayoutHolder $holder, Player $player, Item $item, Block $block, ClickType $clickType) : bool;

    // 必要に応じて受け取るイベントを増やすとよい(PlayerHeldItemやEntityShootBowEventなど)。
    
}

Discussion