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); } } }
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}"); }
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); }
/// <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 }); }
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); } }
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); }
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); } }
/// <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; } } }
public void SendSetSlot(int slot) { McpeContainerSetSlot sendSlot = new McpeContainerSetSlot(); sendSlot.NoBatch = true; sendSlot.slot = (short) slot; sendSlot.item = Slots[slot]; Player.SendPackage(sendSlot); }
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); //} }
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); } } }
/// <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 }); }
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); }
/// <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); }
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); }
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); } }
public void HandleMcpeContainerSetSlot(McpeContainerSetSlot message) { }