Implemented basic player inventory items handle

This commit is contained in:
ReinforceZwei 2020-03-22 23:19:31 +08:00 committed by ORelio
parent 51d03b9ced
commit 8b8f3a719b
3 changed files with 44 additions and 1 deletions

View file

@ -57,6 +57,9 @@ namespace MinecraftClient
private object lastKeepAliveLock = new object(); private object lastKeepAliveLock = new object();
private int playerEntityID; private int playerEntityID;
// not really understand the Inventory Class
// so I use a Dict instead for player inventory
private Dictionary<int, Item> playerItems;
// auto attack // auto attack
private class Entity private class Entity
@ -763,6 +766,23 @@ namespace MinecraftClient
} }
} }
/// <summary>
/// When received window items from server.
/// </summary>
/// <param name="type"></param>
/// <param name="itemList"></param>
public void OnWindowItems(int type, Dictionary<int, Item> itemList)
{
// player inventory
//if (type == 0)
// playerItems = itemList;
foreach(KeyValuePair<int,Item> pair in itemList)
{
ConsoleIO.WriteLine("Slot: "+pair.Key+" itemID:"+pair.Value.id);
}
ConsoleIO.WriteLine("Type: "+type);
}
/// <summary> /// <summary>
/// When connection has been lost, login was denied or played was kicked from the server /// When connection has been lost, login was denied or played was kicked from the server
/// </summary> /// </summary>

View file

@ -510,8 +510,11 @@ namespace MinecraftClient.Protocol.Handlers
} }
break; break;
case PacketIncomingType.WindowItems: case PacketIncomingType.WindowItems:
if (handler.GetInventoryEnabled()) if (handler.GetInventoryEnabled()||true)
{ {
/*
* Following commented code not working
*
byte id = dataTypes.ReadNextByte(packetData); byte id = dataTypes.ReadNextByte(packetData);
short elements = dataTypes.ReadNextShort(packetData); short elements = dataTypes.ReadNextShort(packetData);
@ -528,6 +531,24 @@ namespace MinecraftClient.Protocol.Handlers
dataTypes.ReadNextNbt(packetData); dataTypes.ReadNextNbt(packetData);
} }
} }
*/
byte id = dataTypes.ReadNextByte(packetData);
short elements = dataTypes.ReadNextShort(packetData);
Dictionary<int, Item> itemsList = new Dictionary<int, Item>(); // index is SlotID
for(int i = 0; i < elements; i++)
{
bool haveItem = dataTypes.ReadNextBool(packetData);
if (haveItem)
{
int itemID = dataTypes.ReadNextVarInt(packetData);
byte itemCount = dataTypes.ReadNextByte(packetData);
dataTypes.ReadNextNbt(packetData);
Item item = new Item(itemID, itemCount);
itemsList.Add(i, item);
}
}
handler.OnWindowItems(id, itemsList);
} }
break; break;
case PacketIncomingType.ResourcePackSend: case PacketIncomingType.ResourcePackSend:

View file

@ -144,6 +144,8 @@ namespace MinecraftClient.Protocol
void OnEntityStatus(int EntityID, byte EntityStatus); void OnEntityStatus(int EntityID, byte EntityStatus);
void OnWindowItems(int type, Dictionary<int, Item> itemList);
void SetPlayerEntityID(int EntityID); void SetPlayerEntityID(int EntityID);
} }
} }