using MinecraftDiscordBot.Models; namespace MinecraftDiscordBot; public abstract class ItemFilter { public abstract bool Match(Fluid item); public virtual bool MatchItem(Item item) => Match(item); public static ItemFilter Parse(string filter) => filter.StartsWith('@') ? new ModNameFilter(filter[1..]) : filter.StartsWith('$') ? new TagFilter(filter[1..]) : new ItemNameFilter(filter); private class ModNameFilter : ItemFilter { private readonly string filter; public ModNameFilter(string filter) => this.filter = filter; public override bool Match(Fluid item) => item.ItemId.ModName.Contains(filter, StringComparison.InvariantCultureIgnoreCase); } private class TagFilter : ItemFilter { private readonly string filter; public TagFilter(string filter) => this.filter = filter; public override bool Match(Fluid item) => item.Tags?.Any(tag => tag.Contains(filter, StringComparison.InvariantCultureIgnoreCase)) ?? false; } private class ItemNameFilter : ItemFilter { private readonly string filter; public ItemNameFilter(string filter) => this.filter = filter; public override bool Match(Fluid item) => item.DisplayName.Contains(filter, StringComparison.InvariantCultureIgnoreCase); } }