mcdiscordbot/MinecraftDiscordBot/ItemFilter.cs
Michael Chen ede4efa4e3
Added command routing
Added router class using attributes
Added success parameter to mc computer response
Added generic answer type class (for future choice results)

Changelog: added
2022-01-15 21:26:32 +01:00

33 lines
1.3 KiB
C#

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