using System;
using System.Collections.Generic;
using static PKHeX.Core.Legal;
namespace PKHeX.Core
{
///
/// Information about Held Item Restrictions
///
public static class ItemRestrictions
{
///
/// Checks if a is available to be held in the current .
///
/// Entity data
/// True if able to be held, false if not
public static bool IsHeldItemAllowed(PKM pk)
{
if (pk is PB7 pb7) // no held items in game
return pb7.HeldItem == 0;
return IsHeldItemAllowed(pk.HeldItem, pk.Format, pk);
}
///
/// Checks if an is available to be held in .
///
/// Held Item ID
/// Generation Number
/// Entity context to check
/// True if able to be held, false if not
public static bool IsHeldItemAllowed(int item, int generation, PKM pk)
{
if (item == 0)
return true;
var items = GetReleasedHeldItems(generation, pk);
return (uint)item < items.Count && items[item];
}
private static IReadOnlyList GetReleasedHeldItems(int generation, PKM pk) => generation switch
{
2 => ReleasedHeldItems_2,
3 => ReleasedHeldItems_3,
4 => ReleasedHeldItems_4,
5 => ReleasedHeldItems_5,
6 => ReleasedHeldItems_6,
7 => ReleasedHeldItems_7,
8 when pk is PA8 => Array.Empty(),
8 when pk is PB8 => ReleasedHeldItems_8b,
8 => ReleasedHeldItems_8,
_ => Array.Empty(),
};
}
}