public override BlockDropItemStack[] GetDropsForHandbook(ItemStack handbookStack, IPlayer forPlayer) { LootList list = lootLists[LastCodePart()]; List <BlockDropItemStack> drops = new List <BlockDropItemStack>(); foreach (var val in list.lootItems) { for (int i = 0; i < val.codes.Length; i++) { BlockDropItemStack stack = new BlockDropItemStack(val.GetItemStack(api.World, i, 1)); if (stack == null) { continue; } stack.Quantity.avg = val.chance / list.TotalChance / val.codes.Length; // Prevent duplicates if (drops.FirstOrDefault(dstack => dstack.ResolvedItemstack.Equals(api.World, stack.ResolvedItemstack, GlobalConstants.IgnoredStackAttributes)) == null) { drops.Add(stack); } } } return(drops.ToArray()); }
static BlockLootVessel() { lootLists["seed"] = LootList.Create(1, LootItem.Item(1, 5, 7, "seeds-carrot", "seeds-onion", "seeds-spelt", "seeds-turnip", "seeds-rice", "seeds-rye", "seeds-soybean", "seeds-pumpkin", "seeds-cabbage") ); lootLists["food"] = LootList.Create(1, LootItem.Item(3, 8, 15, "grain-spelt", "grain-rice", "grain-flax", "grain-rye"), LootItem.Item(0.1f, 1, 1, "resonancearchive-1", "resonancearchive-2", "resonancearchive-3", "resonancearchive-4", "resonancearchive-5", "resonancearchive-6", "resonancearchive-7", "resonancearchive-8", "resonancearchive-9") ); lootLists["forage"] = LootList.Create(2.5f, LootItem.Item(1, 2, 6, "flint"), LootItem.Item(1, 3, 9, "stick"), LootItem.Item(1, 3, 16, "drygrass"), LootItem.Item(1, 3, 24, "stone-andesite", "stone-chalk", "stone-claystone", "stone-granite", "stone-sandstone", "stone-shale"), LootItem.Item(1, 3, 24, "clay-blue", "clay-fire"), LootItem.Item(1, 3, 24, "cattailtops"), LootItem.Item(1, 1, 4, "poultice-linen-horsetail"), LootItem.Item(0.5f, 1, 12, "flaxfibers"), LootItem.Item(0.3f, 1, 3, "honeycomb"), LootItem.Item(0.3f, 2, 6, "bamboostakes"), LootItem.Item(0.3f, 2, 6, "beenade-closed") ); lootLists["ore"] = LootList.Create(1.35f, LootItem.Item(1, 2, 12, "ore-lignite", "ore-bituminouscoal"), LootItem.Item(1, 2, 8, "nugget-nativecopper", "ore-quartz", "nugget-galena"), LootItem.Item(0.2f, 4, 12, "nugget-galena", "nugget-cassiterite", "nugget-sphalerite", "nugget-bismuthinite"), LootItem.Item(0.1f, 4, 12, "nugget-limonite", "nugget-nativegold", "nugget-chromite", "nugget-ilmenite", "nugget-nativesilver", "nugget-magnetite") ); lootLists["tool"] = LootList.Create(2.2f, LootItem.Item(1, 1, 1, "axe-flint"), LootItem.Item(1, 1, 1, "shovel-flint"), LootItem.Item(1, 1, 1, "knife-flint"), LootItem.Item(0.1f, 1, 1, "axe-copper", "axe-copper", "axe-tinbronze"), LootItem.Item(0.1f, 1, 1, "shovel-copper", "shovel-copper", "shovel-tinbronze"), LootItem.Item(0.1f, 1, 1, "pickaxe-copper"), LootItem.Item(0.1f, 1, 1, "scythe-copper"), LootItem.Item(0.1f, 1, 1, "knife-copper", "knife-copper", "knife-tinbronze"), LootItem.Item(0.1f, 1, 1, "sword-copper", "sword-copper", "sword-tinbronze"), LootItem.Item(0.1f, 1, 4, "gear-rusty") ); lootLists["farming"] = LootList.Create(2.5f, LootItem.Item(0.1f, 1, 1, "linensack"), LootItem.Item(0.5f, 1, 1, "basket"), LootItem.Item(0.75f, 3, 10, "feather"), LootItem.Item(0.75f, 2, 10, "flaxfibers"), LootItem.Item(0.35f, 2, 10, "flaxtwine"), LootItem.Item(0.75f, 2, 4, "seeds-cabbage"), LootItem.Item(0.75f, 5, 10, "cattailtops"), LootItem.Item(0.1f, 1, 1, "scythe-copper", "scythe-tinbronze") ); }
public override ItemStack[] GetDrops(IWorldAccessor world, BlockPos pos, IPlayer byPlayer, float dropQuantityMultiplier = 1f) { LootList list = lootLists[LastCodePart()]; if (list == null) { return(new ItemStack[0]); } return(list.GenerateLoot(world)); }
public static LootList Create(float tries, params LootItem[] lootItems) { LootList list = new LootList(); list.Tries = tries; list.lootItems.AddRange(lootItems); for (int i = 0; i < lootItems.Length; i++) { list.TotalChance += lootItems[i].chance; } return(list); }
static BlockLootVessel() { lootLists["seed"] = LootList.Create(1, LootItem.Item(1, 3, 5, "seeds-carrot", "seeds-onion", "seeds-spelt", "seeds-turnip", "seeds-rice", "seeds-rye", "seeds-soybean", "seeds-pumpkin", "seeds-cabbage") ); lootLists["food"] = LootList.Create(1, LootItem.Item(1, 8, 15, "grain-spelt", "grain-rice", "grain-flax", "grain-rye") ); lootLists["forage"] = LootList.Create(3.5f, LootItem.Item(1, 0.5f, 6, "flint"), LootItem.Item(1, 0.5f, 6, "stick"), LootItem.Item(1, 0.5f, 12, "drygrass"), LootItem.Item(1, 3, 24, "stone-andesite", "stone-chalk", "stone-claystone", "stone-granite", "stone-sandstone", "stone-shale"), LootItem.Item(1, 3, 24, "clay-blue", "clay-fire"), LootItem.Item(1, 3, 24, "cattails") ); lootLists["ore"] = LootList.Create(2.75f, LootItem.Item(1, 2, 12, "ore-lignite", "ore-bituminouscoal"), LootItem.Item(1, 2, 8, "ore-nativecopper", "ore-quartz", "ore-galena"), LootItem.Item(0.3f, 2, 6, "ore-galena", "ore-cassiterite", "ore-sphalerite", "ore-bismuthinite"), LootItem.Item(0.1f, 2, 6, "ore-limonite", "ore-quartz_nativegold", "ore-chromite", "ore-platinum", "ore-ilmenite", "ore-quartz_nativesilver", "ore-magnetite") ); lootLists["tool"] = LootList.Create(2.2f, LootItem.Item(1, 1, 1, "axe-flint"), LootItem.Item(1, 1, 1, "shovel-flint"), LootItem.Item(1, 1, 1, "pickaxe-flint"), LootItem.Item(1, 1, 1, "knife-flint"), LootItem.Item(0.1f, 1, 1, "axe-copper", "axe-copper", "axe-tinbronze"), LootItem.Item(0.1f, 1, 1, "shovel-copper", "shovel-copper", "shovel-tinbronze"), LootItem.Item(0.1f, 1, 1, "pickaxe-copper", "pickaxe-copper", "pickaxe-tinbronze"), LootItem.Item(0.1f, 1, 1, "knife-copper", "knife-copper", "knife-tinbronze"), LootItem.Item(0.1f, 1, 1, "sword-copper", "sword-copper", "sword-tinbronze") ); lootLists["farming"] = LootList.Create(2.75f, LootItem.Item(0.1f, 1, 1, "linensack"), LootItem.Item(0.5f, 1, 1, "basket"), LootItem.Item(0.75f, 3, 10, "feather"), LootItem.Item(0.75f, 2, 10, "flaxfibers"), LootItem.Item(0.35f, 2, 10, "flaxtwine"), LootItem.Item(0.75f, 2, 4, "seeds-cabbage"), LootItem.Item(0.75f, 5, 10, "cattails") ); }
public override BlockDropItemStack[] GetDropsForHandbook(IWorldAccessor world, BlockPos pos, IPlayer byPlayer) { LootList list = lootLists[LastCodePart()]; List <BlockDropItemStack> drops = new List <BlockDropItemStack>(); foreach (var val in list.lootItems) { for (int i = 0; i < val.codes.Length; i++) { BlockDropItemStack stack = new BlockDropItemStack(val.GetItemStack(world, i)); stack.Quantity.avg = val.chance / list.TotalChance / val.codes.Length; drops.Add(stack); } } return(drops.ToArray()); }
public override ItemStack[] GetDrops(IWorldAccessor world, BlockPos pos, IPlayer byPlayer, float dropQuantityMultiplier = 1f) { float selfdropRate = (byPlayer?.Entity.Stats.GetBlended("wholeVesselLootChance") ?? 0) - 1; if (api.World.Rand.NextDouble() < selfdropRate) { return(new ItemStack[] { new ItemStack(this) }); } LootList list = lootLists[LastCodePart()]; if (list == null) { return(new ItemStack[0]); } return(list.GenerateLoot(world, byPlayer)); }
public override BlockDropItemStack[] GetDropsForHandbook(ItemStack handbookStack, IPlayer forPlayer) { LootList list = lootLists[LastCodePart()]; List <BlockDropItemStack> drops = new List <BlockDropItemStack>(); foreach (var val in list.lootItems) { for (int i = 0; i < val.codes.Length; i++) { BlockDropItemStack stack = new BlockDropItemStack(val.GetItemStack(api.World, i, 1)); if (stack == null) { continue; } stack.Quantity.avg = val.chance / list.TotalChance / val.codes.Length; drops.Add(stack); } } return(drops.ToArray()); }