本のアイテム名を取得したかったのですが色々とあったので記事に残しておきたいと思います。
やったこと事
取得したい情報は「記入済みの本」のタイトルです。
最初はItemStack#getName的なのがあるかと思っていたのですがどうやらない模様。
なので、ItemMetaとかに書いてるのかなと思い見てみるとgetDisplayName()がありました。
@EventHandler public void check(PlayerInteractEvent e){ Player player = e.getPlayer(); String name = player.getItemInHand().getItemMeta().getDisplayName(); player.sendMessage("DisplayName: " + name); } 結果: null
結果はnull。どうやらItemMeta#getDisplayName()ではアイテムの名前を取得できないようです。事前にアイテムにsetDisplayName()で設定しておく必要があります。
他にもsetDisplayNameをしていないアイテムを鉄床で名前を付けた場合にもgetDisplayNameで名前を取得する事ができます。
本の名前を取得
@EventHandler public void book(PlayerInteractEvent e){ Player player = e.getPlayer(); if(player.getItemInHand().getType() != Material.WRITTEN_BOOK){ return; } BookMeta book = (BookMeta) player.getItemInHand().getItemMeta(); player.sendMessage("Title: " + book.getTitle()); player.sendMessage("page: " + book.getPageCount()); player.sendMessage("Author: " + book.getAuthor()); }
getItemMetaをBookMetaでキャストする事で本の内容を取得する事ができました。
コメント