private IItemStack GetStackForItem(IItem item) { IItemStack selectedStack = null; if (ItemStacks == null) { ItemStacks = new List <IItemStack>(); } foreach (var stack in ItemStacks.Reverse()) { if (stack.IsEmpty()) { selectedStack = stack; } if (!stack.ContainsItemOfType(item)) { continue; } if (!stack.HasSpaceFor(item)) { continue; } selectedStack = stack; break; } return(selectedStack ?? CreateNewStackIfPossible()); }
public void Write(ItemStacks metadata) { McpeContainerSetContent msg = this as McpeContainerSetContent; bool signItems = msg == null || msg.windowId != 0x79; if (metadata == null) { if (this is McpeCraftingEvent) { Write((int)0); } else { Write((short)0); } return; } if (this is McpeCraftingEvent) { Write((int)metadata.Count); } else { Write((short)metadata.Count); } for (int i = 0; i < metadata.Count; i++) { Write(metadata[i], signItems); } }
private void HandleMcpeInventoryContent(McpeInventoryContent message) { if (message.inventoryId == 0x00) { _inventory = message.input; } }
private async void OnEvent_ChatMessage(ChatType chatType, string msg, Player player) { try { switch (msg) { case "/votereward": { _traceSource.TraceInformation("{0} is trying to claim a voting reward.", player); if (await DoesPlayerHaveReward(player)) { _traceSource.TraceInformation("{0} has a voting reward to claim; show reward to player.", player); //--- find reward level int rewardLevel = 0; ItemStacks rewardList = new ItemStacks(); for (var idx = 0; idx < _config.VotingRewards.Count; idx++) { var reward = _config.VotingRewards[idx]; if (playerVotes >= reward.MinVotesNeeded) { if (!_config.Cumulative) { rewardList.Clear(); } rewardList.AddStacks(reward.Rewards); } } var rewardItems = rewardList.ToEleonArray(); var itemExchangeInfo = await player.DoItemExchange("Voting Reward", "Remember to vote everyday. Enjoy!", "Close", rewardItems); _traceSource.TraceInformation("{0} has closed the voting reward UI.", player); if (!rewardItems.AreTheSame(itemExchangeInfo.items)) { _traceSource.TraceInformation("{0} took at least some of the voting reward.", player); await MarkRewardClaimed(player); _traceSource.TraceInformation("{0} claimed a voting reward.", player); } else { _traceSource.TraceInformation("{0} didn't claim any reward items.", player); } } else { await MarkRewardClaimed(player); _traceSource.TraceInformation("No unclaimed voting reward found for {0}.", player); await player.SendAlarmMessage("No unclaimed voting reward found."); } } break; } } catch (Exception ex) { _traceSource.TraceEvent(TraceEventType.Error, 1, ex.ToString()); } }
public override void HandleMcpeCreativeContent(McpeCreativeContent message) { ItemStacks slots = message.input; string fileName = Path.GetTempPath() + "Inventory_0x79_" + Guid.NewGuid() + ".txt"; Client.WriteInventoryToFile(fileName, slots); }
public static ItemStacks GetCreativeMetadataSlots() { ItemStacks slotData = new ItemStacks(); for (int i = 0; i < CreativeInventoryItems.Count; i++) { slotData.Add(CreativeInventoryItems[i]); } return slotData; }
public static ItemStacks ReadItemStacksAlternate(this Packet packet, bool networkIds) { ItemStacks itemStacks = new ItemStacks(); uint num = packet.ReadUnsignedVarInt(); for (int index = 0; (long)index < (long)num; ++index) { itemStacks.Add(packet.AlternativeReadItem(networkIds)); } return(itemStacks); }
public ItemStacks ReadItemStacks() { ItemStacks metadata = new ItemStacks(); var count = ReadUnsignedVarInt(); for (int i = 0; i < count; i++) { metadata.Add(ReadItem()); } return(metadata); }
public static int HasItem(this Player input, Item item) { ItemStacks Slots = input.Inventory.GetSlots(); int count = 0; for (int i = 0; i < Slots.Count; i++) { if ((Slots[i]).Id == item.Id) { count = count + Slots[i].Count; } } return(count); }
public void HandleInventoryContent(uint inventoryId, ItemStacks stacks) { if (inventoryId == 0x00) { for (var index = 0; index < stacks.Count; index++) { var itemStack = stacks[index]; Set(index, new ItemWrapper(itemStack, itemStack.ToAlexItem())); //base.SetSlot(); } } else if (inventoryId == 0x7c) //UI Slots { } }
public ItemStacks GetUiSlots() { ItemStacks slotData = new ItemStacks(); for (int i = 0; i < UiInventory.Slots.Count; i++) { if (UiInventory.Slots[i].Count == 0) { UiInventory.Slots[i] = new ItemAir(); } slotData.Add(UiInventory.Slots[i]); } return(slotData); }
public ItemStacks GetSlots() { ItemStacks slotData = new ItemStacks(); for (int i = 0; i < Slots.Count; i++) { if (Slots[i].Count == 0) { Slots[i] = new ItemAir(); } slotData.Add(Slots[i]); } return(slotData); }
private IItemStack CreateNewStackIfPossible() { if (ItemStacks == null) { ItemStacks = new List <IItemStack>(); } if (ItemStacks.Count >= Slots) { return(null); } var newStack = new ItemStack(); ItemStacks.Add(newStack); return(newStack); }
public void Write(ItemStacks metadata) { McpeContainerSetContent msg = this as McpeContainerSetContent; bool signItems = msg == null || msg.windowId != 0x79; if (metadata == null) { WriteVarInt(0); return; } WriteVarInt(metadata.Count); for (int i = 0; i < metadata.Count; i++) { Write(metadata[i], signItems); } }
public Inventory(int id, BlockEntity blockEntity, short inventorySize, NbtList slots) { Id = id; BlockEntity = blockEntity; Size = inventorySize; Coordinates = BlockEntity.Coordinates; Slots = new ItemStacks(); for (byte i = 0; i < Size; i++) { Slots.Add(new ItemAir()); } for (byte i = 0; i < slots.Count; i++) { NbtCompound item = (NbtCompound)slots[i]; Slots[item["Slot"].ByteValue] = ItemFactory.GetItem(item["id"].ShortValue, item["Damage"].ShortValue, item["Count"].ByteValue); } }
public Inventory(int id, BlockEntity blockEntity, short inventorySize, NbtList slots) { Id = id; BlockEntity = blockEntity; Size = inventorySize; Coordinates = BlockEntity.Coordinates; Slots = new ItemStacks(); for (byte i = 0; i < Size; i++) { Slots.Add(new ItemStack()); } for (byte i = 0; i < slots.Count; i++) { NbtCompound item = (NbtCompound) slots[i]; Slots[item["Slot"].ByteValue] = new ItemStack(item["id"].ShortValue, item["Count"].ByteValue, item["Damage"].ByteValue); } }
private void HandleMcpeInventoryContent(McpeInventoryContent message) { if (message.inventoryId == 0x00) { _inventory = message.input; if (message.input.Count > 0) { lock (_lastItem) { var item = message.input.FirstOrDefault(x => x.Count > 0); if (item != null && item is not ItemAir && item.Count > 0) { _lastItem = item; _resetEventInventorySlot.Set(); } } } } }
public override void HandleMcpeInventoryContent(McpeInventoryContent message) { Log.Debug($"Set container content on Window ID: 0x{message.inventoryId:x2}, Count: {message.input.Count}"); if (Client.IsEmulator) { return; } ItemStacks slots = message.input; if (message.inventoryId == 0x79) { string fileName = Path.GetTempPath() + "Inventory_0x79_" + Guid.NewGuid() + ".txt"; Client.WriteInventoryToFile(fileName, slots); } else if (message.inventoryId == 0x00) { string fileName = Path.GetTempPath() + "Inventory_0x00_" + Guid.NewGuid() + ".txt"; Client.WriteInventoryToFile(fileName, slots); } }
public Inventory(int id, BlockEntity blockEntity, short inventorySize, NbtList slots) { Id = id; BlockEntity = blockEntity; Size = inventorySize; Coordinates = BlockEntity.Coordinates; Slots = new ItemStacks(); for (byte i = 0; i < Size; i++) { Slots.Add(new ItemAir()); } for (byte i = 0; i < slots.Count; i++) { var nbtItem = (NbtCompound)slots[i]; Item item = ItemFactory.GetItem(nbtItem["Name"].StringValue, nbtItem["Damage"].ShortValue, nbtItem["Count"].ByteValue); byte slotIdx = nbtItem["Slot"].ByteValue; Log.Debug($"Chest item {slotIdx}: {item}"); Slots[slotIdx] = item; } }
public ItemStacks ReadItemStacks() { int count; if (this is McpeCraftingEvent) { // Misaligned array counters for some packets :-( count = ReadInt(); } else { count = ReadShort(); } ItemStacks metadata = new ItemStacks(); for (int i = 0; i < count; i++) { metadata.Add(ReadItem()); } return(metadata); }
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); //} }
private void OnFactionRewardTimer_Elapsed(object sender, ElapsedEventArgs e) { _traceSource.TraceInformation("Entering OnFactionRewardTimer_Elapsed"); var ownersWhoGotSomething = new HashSet <int>(); lock (_saveState) { foreach (var factionEntitySet in _saveState.FactionIdToEntityIds) { var ownerId = factionEntitySet.Key; // 'Public' faction doesn't get rewards if (ownerId != 0) { var itemStacks = new ItemStacks(); foreach (var entityId in factionEntitySet.Value) { itemStacks.AddStacks(_config.EntityIdToRewards[entityId]); } if (itemStacks.Count != 0) { if (!_saveState.FactionIdToRewards.ContainsKey(ownerId)) { _saveState.FactionIdToRewards[ownerId] = itemStacks; } else { _saveState.FactionIdToRewards[ownerId].AddStacks(itemStacks); } ownersWhoGotSomething.Add(ownerId); } } } } // Tell online players about it var onlinePlayersById = _gameServerConnection.GetOnlinePlayers(); lock (onlinePlayersById) { lock (_saveState) { foreach (var playerId in onlinePlayersById.Keys) { var player = onlinePlayersById[playerId]; int ownerId = GetOwnerIdForReward(player); if (ownerId != 0 && ownersWhoGotSomething.Contains(ownerId)) { player.SendAttentionMessage("Added income!"); } } // save state before exiting _saveState.Save(k_saveStateFilePath); } } _traceSource.TraceInformation("Exiting OnFactionRewardTimer_Elapsed"); }
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); } } }
private static void WriteInventoryToFile(string fileName, ItemStacks slots) { Log.Info($"Writing inventory to filename: {fileName}"); FileStream file = File.OpenWrite(fileName); IndentedTextWriter writer = new IndentedTextWriter(new StreamWriter(file)); writer.WriteLine("// GENERATED CODE. DON'T EDIT BY HAND"); writer.Indent++; writer.Indent++; writer.WriteLine("public static List<Item> CreativeInventoryItems = new List<Item>()"); writer.WriteLine("{"); writer.Indent++; foreach (var entry in slots) { var slot = entry; NbtCompound extraData = slot.ExtraData; if (extraData == null) { writer.WriteLine($"new Item({slot.Id}, {slot.Metadata}, {slot.Count}),"); } else { NbtList ench = (NbtList) extraData["ench"]; NbtCompound enchComp = (NbtCompound) ench[0]; var id = enchComp["id"].ShortValue; var lvl = enchComp["lvl"].ShortValue; writer.WriteLine($"new Item({slot.Id}, {slot.Metadata}, {slot.Count}){{ExtraData = new NbtCompound {{new NbtList(\"ench\") {{new NbtCompound {{new NbtShort(\"id\", {id}), new NbtShort(\"lvl\", {lvl}) }} }} }} }},"); } } // Template new ItemAir {ExtraData = new NbtCompound {new NbtList("ench") {new NbtCompound {new NbtShort("id", 0), new NbtShort("lvl", 0)}}}}; //var compound = new NbtCompound(string.Empty) { new NbtList("ench", new NbtCompound()) {new NbtShort("id", 0),new NbtShort("lvl", 0),}, }; writer.Indent--; writer.WriteLine("};"); writer.Indent--; writer.Indent--; writer.Flush(); file.Close(); }
public ItemStacks GetSlots() { ItemStacks slotData = new ItemStacks(); for (int i = 0; i < Slots.Count; i++) { if (Slots[i].Count == 0) Slots[i] = new ItemAir(); slotData.Add(Slots[i]); } return slotData; }
public ItemStacks GetArmor() { ItemStacks slotData = new ItemStacks { new ItemStack((short) Helmet.Id, 1, Helmet.Metadata), new ItemStack((short) Chest.Id, 1, Helmet.Metadata), new ItemStack((short) Leggings.Id, 1, Helmet.Metadata), new ItemStack((short) Boots.Id, 1, Helmet.Metadata) }; return slotData; }