Exemple #1
0
        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());
        }
Exemple #2
0
        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;
     }
 }
Exemple #4
0
        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());
            }
        }
Exemple #5
0
        public override void HandleMcpeCreativeContent(McpeCreativeContent message)
        {
            ItemStacks slots = message.input;

            string fileName = Path.GetTempPath() + "Inventory_0x79_" + Guid.NewGuid() + ".txt";

            Client.WriteInventoryToFile(fileName, slots);
        }
Exemple #6
0
		public static ItemStacks GetCreativeMetadataSlots()
		{
			ItemStacks slotData = new ItemStacks();
			for (int i = 0; i < CreativeInventoryItems.Count; i++)
			{
				slotData.Add(CreativeInventoryItems[i]);
			}

			return slotData;
		}
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
 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
     {
     }
 }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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);
        }
Exemple #14
0
        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);
            }
        }
Exemple #15
0
        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);
            }
        }
Exemple #16
0
        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();
                        }
                    }
                }
            }
        }
Exemple #18
0
        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);
            }
        }
Exemple #19
0
        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;
            }
        }
Exemple #20
0
        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);
        }
Exemple #21
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);
            //}
        }
        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");
        }
Exemple #23
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);
                }
            }
        }
Exemple #24
0
        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();
        }
Exemple #25
0
        public static ItemStacks GetCreativeMetadataSlots()
        {
            ItemStacks slotData = new ItemStacks();
            for (int i = 0; i < CreativeInventoryItems.Count; i++)
            {
                slotData.Add(CreativeInventoryItems[i]);
            }

            return slotData;
        }
Exemple #26
0
        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;
        }
Exemple #27
0
 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;
 }