Densyakunのブログ

Qiitaもやってます: https://qiita.com/Densyakun

【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));
}

以上のコードは、開いたインベントリがチェストであることを判定し、そのチェストを石斧を使って破壊します。破壊するプレイヤーなどはいませんが、プレイヤーが破壊した状態と同じことが起こります。

チェストであることを判定しているので、チェストのブロックを取得することができます。

 

記事一覧に戻る