mcdiscordbot/MinecraftDiscordBot/ItemFilter.cs

35 lines
1.3 KiB
C#

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);
}
}