【Spigot】Bukkitプラグインの作り方講座 - インベントリにアイテムを入れる
インベントリを持っているエンティティにはInventoryHolder
インターフェースが継承されています。
InventoryHolder
インターフェースを持っているのはエンティティだけではなく、チェストなどのブロックにもあります。
```
@EventHandler
public void onInventoryOpen(InventoryOpenEvent e) {
e.getInventory().addItem(new ItemStack(Material.DIAMOND_BLOCK));
}
```
インベントリを開くたび、インベントリにダイヤブロックが追加されます。
なお、チェストだけでなく、かまど、エンチャントテーブル、エンチャントテーブルを閉じたときに自分のインベントリ、エンダーチェスト、シュルカーボックス、ディスペンサー、トラップチェスト、ホッパー、ドロッパー、チェスト付きトロッコ、ホッパー付きトロッコで動作しました。
e.getInventory().setItem(9, new ItemStack(Material.GOLD_INGOT, 3));
インベントリには必ずスロットにインデックスが振られており、左上から右上、下の段に行って左から右の順に0からの番号が振られています。
以上の例では9番目、つまり二段目の一番左のスロットに金インゴットを3つ配置します。
なお、この状態でかまどなどの9番目のスロットがない場合はエラーが発生しますので、e.getInventory().getSize()
でスロットの数を確認してください。
インベントリを開いたプレイヤーのインベントリに鉄インゴットを追加するには以下のコードを書きます。
e.getPlayer().getInventory().addItem(new ItemStack(Material.IRON_INGOT));
if (e.getInventory().getHolder() instanceof Chest) {
((Chest) e.getInventory().getHolder()).getBlock().breakNaturally(new ItemStack(Material.STONE_AXE));
}
以上のコードは、開いたインベントリがチェストであることを判定し、そのチェストを石斧を使って破壊します。破壊するプレイヤーなどはいませんが、プレイヤーが破壊した状態と同じことが起こります。
チェストであることを判定しているので、チェストのブロックを取得することができます。