🗂
WIP:InventoryLayoutパターン
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