第一引数で指定したプレイヤーに、第二引数で指定した内容の書かれた著書の画面を開かせます。
返り値はbooleanで、例外なく開かせることができればtrue、それ以外はfalseを返します。
第二引数のStringの配列は、ひとつの要素で1ページを意味します。
{"page1","page2","page3"}…のような感じです。
文字装飾や改行はこちらでは対応してないでの各自でやってください。
PacketPlayOutCustomPayloadを使って本を開かせる場合、手に著書を持っている必要があるようです。
その為、一度著書をもたせ、最後に元々持っていたアイテムを持たせる、ということをやっています。
また、(Player)updateInventory()も使わないと更新されないので使用しています。
ソースの主要となる部分は
PacketPlayOutCustomPayload packet = new PacketPlayOutCustomPayload("MC|BOpen", new PacketDataSerializer(Unpooled.buffer()));
((CraftPlayer)player).getHandle().playerConnection.sendPacket(packet);`
を基にしてリフレクションを使用した方法にしてるだけです。
EntityPlayerクラス内のopenBookメソッドを参考にしました。
1.7以下でも近い方法で試してみましたが、ダメっぽいですね。
誰か分かったら教えてください。