What each seasonal “present” item rolls when opened (OnUse loot drop). Source: StreamingAssets/Conf/Loot (tables 527–530) + ID/ObjectID.json. The festive chests (GingerbreadChest, ValentineChest, EasterChest) have no loot — they are decorative storage; the loot lives on the present items below.
How it works: each present is a consumable carrying a loot table. On use it rolls uniqueDrops draws from the weighted pool (chance = weight / Σweight per draw). None of these tables use a guaranteed group. dontAllowDuplicates=false → on multi-draw bags the same entry can repeat.
Halloween Goodie Bag draws 3–4 items, so the per-bag “≥1” column ≈ 1 − (1 − p)^3.5 (with-replacement approximation). The other three presents draw exactly 1 item, so their chance is simply weight / Σweight.
Easter has no loot table in Conf — the egg event is a trade mechanic (eggs exchanged for items), handled by baked event logic, not a weighted roll.
Where the presents themselves come from is not in Conf (seasonal event mechanics / baked ObjectInfo). Armor & wearables are tagged gear.