自作ライブラリのメモその3です。PlayerData クラスにて、プレイヤーのアイテム情報を取得する機能を追加。
GetHandItems (string PlayerName)
: プレイヤーの手持ちアイテムを取得GetInventoryItems (string PlayerName)
: プレイヤーのインベントリアイテムを取得GetLeftHandItem (string PlayerName)
: プレイヤーの左手に持っているアイテムを取得GetEquipmentItems (string PlayerName)
: プレイヤーの装備アイテムを取得
GetLeftHandItem
の返り値は Item
型
それ以外は List<Item>
型
使用例
class Program { private static IPAddress IP = IPAddress.Parse("127.0.0.1"); private static ushort Port = 25575; private static string Password = "minecraft"; private static RCON rcon = new RCON(IP, Port, Password); static void Main(string[] args) { PlayerData data = new PlayerData(rcon); string PlayerName = "<PlayerName>"; var InventoryItems = data.GetInventoryItems(PlayerName); var HandItems = data.GetHandItems(PlayerName); var EquipmentItems = data.GetEquipmentItems(PlayerName); var LeftHandItem = data.GetLeftHandItem(PlayerName); Console.WriteLine("=== インベントリスロットアイテム ==="); foreach (var item in InventoryItems) { Console.WriteLine($"{item.GetItemSlot()} 番目のアイテムは {item.GetItemID()} で {item.GetItemCount()} 個所持しています。"); } Console.WriteLine("=== 手持ちスロットアイテム ==="); foreach (var item in HandItems) { Console.WriteLine($"{item.GetItemSlot()} 番目のアイテムは {item.GetItemID()} で {item.GetItemCount()} 個所持しています。"); } Console.WriteLine("=== 装備アイテム ==="); foreach (var item in EquipmentItems) { Console.WriteLine($"{item.GetItemSlot()} 番目のアイテムは {item.GetItemID()} で {item.GetItemCount()} 個所持しています。"); } Console.WriteLine("=== 左手のアイテム ==="); Console.WriteLine($"{LeftHandItem.GetItemSlot()} 番目のアイテムは {LeftHandItem.GetItemID()} で {LeftHandItem.GetItemCount()} 個所持しています。"); } }
問題点
GetLeftHandItem
メソッドを使用したとき、プレイヤーの左手にアイテムを持っていない場合、Item
オブジェクトが null
になってしまう。
これが ぬるり(NullReferenceException) ってやつですな。
今は例外対策として空気ブロック ("minecraft:air") を持っていることにしているが、「アイテム情報の取得」としては微妙なところ。