Example #1
0
        public void SendCraftingEvent()
        {
            var recipe = _recipeToSend;

            if (recipe != null)
            {
                {
                    McpeContainerSetSlot setSlot = new McpeContainerSetSlot();
                    setSlot.item     = new MetadataSlot(new ItemStack(new ItemBlock(new Block(17), 0), 1));
                    setSlot.windowId = 0;
                    setSlot.slot     = 0;
                    SendPackage(setSlot);
                }
                {
                    McpePlayerEquipment eq = new McpePlayerEquipment();
                    eq.entityId     = _entityId;
                    eq.slot         = 9;
                    eq.selectedSlot = 0;
                    eq.item         = new MetadataSlot(new ItemStack(new ItemBlock(new Block(17), 0), 1));
                    SendPackage(eq);
                }

                Log.Error("Sending crafting event: " + recipe.Id);

                McpeCraftingEvent crafting = new McpeCraftingEvent();
                crafting.windowId   = 0;
                crafting.recipeType = 1;
                crafting.recipeId   = recipe.Id;

                {
                    MetadataSlots slotData = new MetadataSlots();
                    slotData[0]    = new MetadataSlot(new ItemStack(new ItemBlock(new Block(17), 0), 1));
                    crafting.input = slotData;
                }
                {
                    MetadataSlots slotData = new MetadataSlots();
                    slotData[0]     = new MetadataSlot(new ItemStack(new ItemBlock(new Block(5), 0), 4));
                    crafting.result = slotData;
                }

                SendPackage(crafting);

                //{
                //	McpeContainerSetSlot setSlot = new McpeContainerSetSlot();
                //	setSlot.item = new MetadataSlot(new ItemStack(new ItemBlock(new Block(5), 0), 4));
                //	setSlot.windowId = 0;
                //	setSlot.slot = 0;
                //	SendPackage(setSlot);
                //}

                {
                    McpePlayerEquipment eq = new McpePlayerEquipment();
                    eq.entityId     = _entityId;
                    eq.slot         = 10;
                    eq.selectedSlot = 1;
                    eq.item         = new MetadataSlot(new ItemStack(new ItemBlock(new Block(5), 0), 4));
                    SendPackage(eq);
                }
            }
        }
Example #2
0
        private void OnMcpeContainerSetSlot(Package msg)
        {
            McpeContainerSetSlot message   = (McpeContainerSetSlot)msg;
            ItemStack            itemStack = message.item.Value;

            Log.Error($"Set inventory slot on window 0x{message.windowId:X2} with slot: {message.slot} HOTBAR: {message.unknown} Item ID: {itemStack.Id} Item Count: {itemStack.Count} Meta: {itemStack.Metadata}: DatagramSequenceNumber: {message.DatagramSequenceNumber}, ReliableMessageNumber: {message.ReliableMessageNumber}, OrderingIndex: {message.OrderingIndex}");
        }
Example #3
0
        public static Action <Task, int, Item, int> DoContainerSetSlot(MiNetClient client)
        {
            Action <Task, int, Item, int> doMobEquipmentTask = (t, windowId, item, selectedSlot) =>
            {
                McpeContainerSetSlot message = new McpeContainerSetSlot();
                message.windowId = (byte)windowId;
                message.slot     = selectedSlot;
                message.item     = item;
                client.SendPackage(message);
            };

            return(doMobEquipmentTask);
        }
Example #4
0
        /// <summary>
        ///     Handles the container set slot.
        /// </summary>
        /// <param name="message">The message.</param>
        private void HandleContainerSetSlot(McpeContainerSetSlot message)
        {
            if (HealthManager.IsDead)
            {
                return;
            }

            // on all set container content, check if we have active inventory
            // and update that inventory.
            // Inventory manager makes sure other players with the same inventory open will
            // also get the update.

            var itemStack    = new ItemStack(message.itemId, message.itemCount, message.itemDamage);
            var metadataSlot = new MetadataSlot(itemStack);

            Inventory inventory = Level.InventoryManager.GetInventory(message.windowId);

            if (inventory != null)
            {
                inventory.SetSlot((byte)message.slot, itemStack);
                return;
            }

            switch (message.windowId)
            {
            case 0:
                Inventory.Slots[(byte)message.slot] = metadataSlot;
                break;

            case 0x78:
                Inventory.Armor[(byte)message.slot] = metadataSlot;
                break;
            }

            Level.RelayBroadcast(this, new McpePlayerArmorEquipment()
            {
                entityId   = EntityId,
                helmet     = (byte)(((MetadataSlot)Inventory.Armor[0]).Value.Id - 256),
                chestplate = (byte)(((MetadataSlot)Inventory.Armor[1]).Value.Id - 256),
                leggings   = (byte)(((MetadataSlot)Inventory.Armor[2]).Value.Id - 256),
                boots      = (byte)(((MetadataSlot)Inventory.Armor[3]).Value.Id - 256)
            });

            Level.RelayBroadcast(this, new McpePlayerEquipment()
            {
                entityId = EntityId,
                item     = Inventory.ItemInHand.Value.Id,
                meta     = Inventory.ItemInHand.Value.Metadata,
                slot     = 0
            });
        }
Example #5
0
 public void SendSetSlot(int slot)
 {
     if (slot < HotbarSize && (ItemHotbar[slot] == -1 || ItemHotbar[slot] == slot))
     {
         ItemHotbar[slot] = slot /* + HotbarSize*/;
         Player.SendPlayerInventory();
     }
     else
     {
         McpeContainerSetSlot sendSlot = new McpeContainerSetSlot();
         sendSlot.NoBatch = true;
         sendSlot.slot    = (short)slot;
         sendSlot.item    = Slots[slot];
         Player.SendPackage(sendSlot);
     }
 }
Example #6
0
        public void SetSlot(Item i, int slot)
        {
            McpeContainerSetSlot sendSlot = McpeContainerSetSlot.CreateObject();

            sendSlot.windowId = 0;
            sendSlot.slot     = slot;
            sendSlot.item     = i;
            SendPackage(sendSlot);
            McpeMobEquipment order = McpeMobEquipment.CreateObject();

            order.runtimeEntityId = EntityManager.EntityIdSelf;
            order.item            = i;
            order.selectedSlot    = (byte)slot;          // Selected hotbar slot
            order.slot            = (byte)slot;
            SendPackage(order);
        }
Example #7
0
        public void SendSetSlot(int slot)
        {
            if (slot < HotbarSize && (ItemHotbar[slot] == -1 || ItemHotbar[slot] == slot))
            {
                ItemHotbar[slot] = slot /* + HotbarSize*/;
                Player.SendPlayerInventory();

                McpeMobEquipment order = McpeMobEquipment.CreateObject();
                order.runtimeEntityId = EntityManager.EntityIdSelf;
                order.item            = GetItemInHand();
                order.selectedSlot    = (byte)slot;               // Selected hotbar slot
                Player.SendPackage(order);
            }
            else
            {
                McpeContainerSetSlot sendSlot = McpeContainerSetSlot.CreateObject();
                sendSlot.windowId = 0;
                sendSlot.slot     = (short)slot;
                sendSlot.item     = Slots[slot];
                Player.SendPackage(sendSlot);
            }
        }
Example #8
0
		/// <summary>
		///     Handles the container set slot.
		/// </summary>
		/// <param name="message">The message.</param>
		protected virtual void HandleContainerSetSlot(McpeContainerSetSlot message)
		{
			lock (Inventory)
			{
				if (HealthManager.IsDead) return;

				ItemStack itemStack = message.item.Value;

				if (GameMode != GameMode.Creative)
				{
					if (!VerifyItemStack(itemStack))
					{
						Log.Error($"Kicked {Username} for inventory hacking.");
						Disconnect("Error #324. Please report this error.");
						return;
					}
				}

				Log.Info($"Player {Username} set inventory item on window 0x{message.windowId:X2} with slot: {message.slot} HOTBAR: {message.unknown} Item ID: {itemStack.Id} Item Count: {itemStack.Count} Meta: {itemStack.Metadata}: DatagramSequenceNumber: {message.DatagramSequenceNumber}, ReliableMessageNumber: {message.ReliableMessageNumber}, OrderingIndex: {message.OrderingIndex}");

				// on all set container content, check if we have active inventory
				// and update that inventory.
				// Inventory manager makes sure other players with the same inventory open will 
				// also get the update.

				if (_openInventory != null)
				{
					if (_openInventory.WindowsId == message.windowId)
					{
						if (_openInventory.Type == 4)
						{
							Recipes recipes = new Recipes();
							recipes.Add(new EnchantingRecipe());
							McpeCraftingData crafting = new McpeCraftingData {recipes = recipes};
							SendPackage(crafting);
						}

						// block inventories of various kinds (chests, furnace, etc)
						_openInventory.SetSlot(this, (byte) message.slot, itemStack);
						return;
					}
				}

				switch (message.windowId)
				{
					case 0:
						Inventory.Slots[message.slot] = itemStack;
						break;
					case 0x79:
						Inventory.Slots[message.slot] = itemStack;
						break;
					case 0x78:

						var armorItem = itemStack.Item;
						switch (message.slot)
						{
							case 0:
								Inventory.Helmet = armorItem;
								break;
							case 1:
								Inventory.Chest = armorItem;
								break;
							case 2:
								Inventory.Leggings = armorItem;
								break;
							case 3:
								Inventory.Boots = armorItem;
								break;
						}

						McpePlayerArmorEquipment armorEquipment = McpePlayerArmorEquipment.CreateObject();
						armorEquipment.entityId = EntityId;
						armorEquipment.helmet = new MetadataSlot(new ItemStack(Inventory.Helmet, 1));
						armorEquipment.chestplate = new MetadataSlot(new ItemStack(Inventory.Chest, 1));
						armorEquipment.leggings = new MetadataSlot(new ItemStack(Inventory.Leggings, 1));
						armorEquipment.boots = new MetadataSlot(new ItemStack(Inventory.Boots, 1));
						Level.RelayBroadcast(this, armorEquipment);

						break;
					case 0x7A:
						//Inventory.ItemHotbar[message.unknown] = message.slot/* + PlayerInventory.HotbarSize*/;
						break;
				}
			}
		}
Example #9
0
		public void SendSetSlot(int slot)
		{
			McpeContainerSetSlot sendSlot = new McpeContainerSetSlot();
			sendSlot.NoBatch = true;
			sendSlot.slot = (short) slot;
			sendSlot.item = Slots[slot];
			Player.SendPackage(sendSlot);
		}
Example #10
0
        public void SendCraftingEvent2()
        {
            var recipe = _recipeToSend;

            if (recipe != null)
            {
                Log.Error("Sending crafting event: " + recipe.Id);

                McpeCraftingEvent crafting = new McpeCraftingEvent();
                crafting.windowId = 0;
                crafting.recipeType = 1;
                crafting.recipeId = recipe.Id;

                {
                    ItemStacks slotData = new ItemStacks();
                    for (int i = 0; i < recipe.Input.Length; i++)
                    {
                        slotData.Add(recipe.Input[i]);

                        McpeContainerSetSlot setSlot = new McpeContainerSetSlot
                        {
                            item = recipe.Input[i],
                            windowId = 0,
                            slot = (short) (i)
                        };
                        SendPackage(setSlot);
                        Log.Error("Set set slot");
                    }
                    crafting.input = slotData;

                    {
                        McpePlayerEquipment eq = new McpePlayerEquipment
                        {
                            entityId = _entityId,
                            slot = 9,
                            selectedSlot = 0,
                            item = recipe.Input[0]
                        };
                        SendPackage(eq);
                        Log.Error("Set eq slot");
                    }
                }
                {
                    ItemStacks slotData = new ItemStacks {recipe.Result};
                    crafting.result = slotData;
                }

                SendPackage(crafting);
            }

            //{
            //	McpeContainerSetSlot setSlot = new McpeContainerSetSlot();
            //	setSlot.item = new MetadataSlot(new ItemStack(new ItemDiamondAxe(0), 1));
            //	setSlot.windowId = 0;
            //	setSlot.slot = 0;
            //	SendPackage(setSlot);
            //}
            //{
            //	McpePlayerEquipment eq = new McpePlayerEquipment();
            //	eq.entityId = _entityId;
            //	eq.slot = 9;
            //	eq.selectedSlot = 0;
            //	eq.item = new MetadataSlot(new ItemStack(new ItemDiamondAxe(0), 1));
            //	SendPackage(eq);
            //}
        }
Example #11
0
        public void SendCraftingEvent()
        {
            var recipe = _recipeToSend;

            if (recipe != null)
            {
                {
                    McpeContainerSetSlot setSlot = new McpeContainerSetSlot();
                    setSlot.item = new ItemBlock(new Block(17), 0) {Count = 1};
                    setSlot.windowId = 0;
                    setSlot.slot = 0;
                    SendPackage(setSlot);
                }
                {
                    McpePlayerEquipment eq = new McpePlayerEquipment();
                    eq.entityId = _entityId;
                    eq.slot = 9;
                    eq.selectedSlot = 0;
                    eq.item = new ItemBlock(new Block(17), 0) {Count = 1};
                    SendPackage(eq);
                }

                Log.Error("Sending crafting event: " + recipe.Id);

                McpeCraftingEvent crafting = new McpeCraftingEvent();
                crafting.windowId = 0;
                crafting.recipeType = 1;
                crafting.recipeId = recipe.Id;

                {
                    ItemStacks slotData = new ItemStacks {new ItemBlock(new Block(17), 0) {Count = 1}};
                    crafting.input = slotData;
                }
                {
                    ItemStacks slotData = new ItemStacks {new ItemBlock(new Block(5), 0) {Count = 1}};
                    crafting.result = slotData;
                }

                SendPackage(crafting);

                //{
                //	McpeContainerSetSlot setSlot = new McpeContainerSetSlot();
                //	setSlot.item = new MetadataSlot(new ItemStack(new ItemBlock(new Block(5), 0), 4));
                //	setSlot.windowId = 0;
                //	setSlot.slot = 0;
                //	SendPackage(setSlot);
                //}

                {
                    McpePlayerEquipment eq = new McpePlayerEquipment();
                    eq.entityId = _entityId;
                    eq.slot = 10;
                    eq.selectedSlot = 1;
                    eq.item = new ItemBlock(new Block(5), 0) {Count = 1};
                    SendPackage(eq);
                }
            }
        }
Example #12
0
        /// <summary>
        ///     Handles the container set slot.
        /// </summary>
        /// <param name="message">The message.</param>
        private void HandleContainerSetSlot(McpeContainerSetSlot message)
        {
            if (HealthManager.IsDead) return;

            // on all set container content, check if we have active inventory
            // and update that inventory.
            // Inventory manager makes sure other players with the same inventory open will
            // also get the update.

            var itemStack = new ItemStack(message.itemId, message.itemCount, message.itemDamage);
            var metadataSlot = new MetadataSlot(itemStack);

            Inventory inventory = Level.InventoryManager.GetInventory(message.windowId);
            if (inventory != null)
            {
                inventory.SetSlot((byte) message.slot, itemStack);
                return;
            }

            switch (message.windowId)
            {
                case 0:
                    Inventory.Slots[(byte) message.slot] = metadataSlot;
                    break;
                case 0x78:
                    Inventory.Armor[(byte) message.slot] = metadataSlot;
                    break;
            }

            Level.RelayBroadcast(this, new McpePlayerArmorEquipment()
            {
                entityId = EntityId,
                helmet = (byte) (((MetadataSlot) Inventory.Armor[0]).Value.Id - 256),
                chestplate = (byte) (((MetadataSlot) Inventory.Armor[1]).Value.Id - 256),
                leggings = (byte) (((MetadataSlot) Inventory.Armor[2]).Value.Id - 256),
                boots = (byte) (((MetadataSlot) Inventory.Armor[3]).Value.Id - 256)
            });

            Level.RelayBroadcast(this, new McpePlayerEquipment()
            {
                entityId = EntityId,
                item = Inventory.ItemInHand.Value.Id,
                meta = Inventory.ItemInHand.Value.Metadata,
                slot = 0
            });
        }
Example #13
0
        public void SendCraftingEvent2()
        {
            var recipe = _recipeToSend;

            if (recipe != null)
            {
                Log.Error("Sending crafting event: " + recipe.Id);

                McpeCraftingEvent crafting = new McpeCraftingEvent();
                crafting.windowId   = 0;
                crafting.recipeType = 1;
                crafting.recipeId   = recipe.Id;

                {
                    var slotData = new MetadataSlots();
                    for (int i = 0; i < recipe.Input.Length; i++)
                    {
                        slotData[i] = new MetadataSlot(new ItemStack(recipe.Input[i], 1));

                        McpeContainerSetSlot setSlot = new McpeContainerSetSlot
                        {
                            item     = new MetadataSlot(new ItemStack(recipe.Input[i], 1)),
                            windowId = 0,
                            slot     = (short)(i)
                        };
                        SendPackage(setSlot);
                        Log.Error("Set set slot");
                    }
                    crafting.input = slotData;

                    {
                        McpePlayerEquipment eq = new McpePlayerEquipment
                        {
                            entityId     = _entityId,
                            slot         = 9,
                            selectedSlot = 0,
                            item         = new MetadataSlot(new ItemStack(recipe.Input[0], 1))
                        };
                        SendPackage(eq);
                        Log.Error("Set eq slot");
                    }
                }
                {
                    MetadataSlots slotData = new MetadataSlots();
                    slotData[0]     = new MetadataSlot(recipe.Result);
                    crafting.result = slotData;
                }

                SendPackage(crafting);
            }


            //{
            //	McpeContainerSetSlot setSlot = new McpeContainerSetSlot();
            //	setSlot.item = new MetadataSlot(new ItemStack(new ItemDiamondAxe(0), 1));
            //	setSlot.windowId = 0;
            //	setSlot.slot = 0;
            //	SendPackage(setSlot);
            //}
            //{
            //	McpePlayerEquipment eq = new McpePlayerEquipment();
            //	eq.entityId = _entityId;
            //	eq.slot = 9;
            //	eq.selectedSlot = 0;
            //	eq.item = new MetadataSlot(new ItemStack(new ItemDiamondAxe(0), 1));
            //	SendPackage(eq);
            //}
        }
 public void HandleMcpeContainerSetSlot(McpeContainerSetSlot message)
 {
     WritePackage(message);
 }
Example #15
0
        /// <summary>
        ///     Handles the container set slot.
        /// </summary>
        /// <param name="message">The message.</param>
        protected virtual void HandleContainerSetSlot(McpeContainerSetSlot message)
        {
            if (HealthManager.IsDead) return;

            // on all set container content, check if we have active inventory
            // and update that inventory.
            // Inventory manager makes sure other players with the same inventory open will
            // also get the update.

            var itemStack = new ItemStack(message.itemId, message.itemCount, message.itemDamage);

            Inventory inventory = Level.InventoryManager.GetInventory(message.windowId);
            if (inventory != null)
            {
                // block inventories of various kinds (chests, furnace, etc)
                inventory.SetSlot((byte) message.slot, itemStack);
                return;
            }

            switch (message.windowId)
            {
                case 0:
                    if (GameMode != GameMode.Creative && Inventory.Slots[(byte) message.slot].Id != itemStack.Id)
                    {
                        Log.Warn("Inventory set from client not matching inventory on server");
                        SendPlayerInventory();
                    }
                    else if(GameMode == GameMode.Creative)
                    {
                        Inventory.Slots[(byte) message.slot] = itemStack;
                    }

                    break;
                case 0x78:
                    switch ((byte) message.slot)
                    {
                        case 0:
                            Inventory.Helmet = ItemFactory.GetItem(message.itemId, message.itemDamage);
                            break;
                        case 1:
                            Inventory.Chest = ItemFactory.GetItem(message.itemId, message.itemDamage);
                            break;
                        case 2:
                            Inventory.Leggings = ItemFactory.GetItem(message.itemId, message.itemDamage);
                            break;
                        case 3:
                            Inventory.Boots = ItemFactory.GetItem(message.itemId, message.itemDamage);
                            break;
                    }
                    break;
            }

            var armorEquipment = McpePlayerArmorEquipment.CreateObject();
            armorEquipment.entityId = EntityId;
            armorEquipment.helmet = (byte) (Inventory.Helmet.Id - 256);
            armorEquipment.chestplate = (byte) (Inventory.Chest.Id - 256);
            armorEquipment.leggings = (byte) (Inventory.Leggings.Id - 256);
            armorEquipment.boots = (byte) (Inventory.Boots.Id - 256);
            Level.RelayBroadcast(this, armorEquipment);

            var playerEquipment = McpePlayerEquipment.CreateObject();
            playerEquipment.entityId = EntityId;
            playerEquipment.item = (short) Inventory.ItemInHand.Id;
            playerEquipment.meta = Inventory.ItemInHand.Metadata;
            playerEquipment.slot = 0;
            Level.RelayBroadcast(this, playerEquipment);
        }
Example #16
0
        public override void HandleMcpeContainerSetSlot(McpeContainerSetSlot message)
        {
            if (message.item.Id == Inventory.Slots[message.slot].Id)
            {
                if (message.item.Count == Inventory.Slots[message.slot].Count)
                {
                    return;
                }
            }
            if (Level is xCoreLevel)
            {
                if (!(((xCoreLevel)Level).Status == Status.Start))
                {
                    base.HandleMcpeContainerSetSlot(message);
                }
                else
                {
                    if (message.hotbarslot == 0)
                    {
                        McpeContainerSetContent strangeContent = McpeContainerSetContent.CreateObject();
                        strangeContent.windowId     = (byte)0x7b;
                        strangeContent.entityIdSelf = EntityId;
                        strangeContent.slotData     = new ItemStacks();
                        strangeContent.hotbarData   = new MetadataInts();
                        SendPackage(strangeContent);

                        McpeContainerSetContent inventoryContent = McpeContainerSetContent.CreateObject();
                        inventoryContent.windowId     = (byte)0x00;
                        inventoryContent.entityIdSelf = EntityId;
                        inventoryContent.slotData     = Inventory.GetSlots();
                        inventoryContent.hotbarData   = Inventory.GetHotbar();
                        SendPackage(inventoryContent);

                        McpeMobEquipment order = McpeMobEquipment.CreateObject();
                        order.runtimeEntityId = EntityManager.EntityIdSelf;
                        order.item            = message.item;
                        order.selectedSlot    = (byte)message.selectedSlot;                      // Selected hotbar slot
                        order.slot            = (byte)message.slot;
                        SendPackage(order);
                        //SendPlayerInventory();
                    }
                    return;
                }
            }
            else
            {
                if (message.hotbarslot == 0)
                {
                    McpeContainerSetContent strangeContent = McpeContainerSetContent.CreateObject();
                    strangeContent.windowId     = (byte)0x7b;
                    strangeContent.entityIdSelf = EntityId;
                    strangeContent.slotData     = new ItemStacks();
                    strangeContent.hotbarData   = new MetadataInts();
                    SendPackage(strangeContent);

                    McpeContainerSetContent inventoryContent = McpeContainerSetContent.CreateObject();
                    inventoryContent.windowId     = (byte)0x00;
                    inventoryContent.entityIdSelf = EntityId;
                    inventoryContent.slotData     = Inventory.GetSlots();
                    inventoryContent.hotbarData   = Inventory.GetHotbar();
                    SendPackage(inventoryContent);
                }
                return;
            }
            base.HandleMcpeContainerSetSlot(message);
        }
Example #17
0
		public void SendSetSlot(int slot)
		{
			if (slot < HotbarSize && (ItemHotbar[slot] == -1 || ItemHotbar[slot] == slot))
			{
				ItemHotbar[slot] = slot/* + HotbarSize*/;
                Player.SendPlayerInventory();
			}
			else
			{
				McpeContainerSetSlot sendSlot = new McpeContainerSetSlot();
				sendSlot.NoBatch = true;
				sendSlot.slot = (short)slot;
				sendSlot.item = Slots[slot];
				Player.SendPackage(sendSlot);
			}
		}
Example #18
0
 public void HandleMcpeContainerSetSlot(McpeContainerSetSlot message)
 {
 }
Example #19
0
 public void HandleMcpeContainerSetSlot(McpeContainerSetSlot message)
 {
 }