Argument.java 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package me.shedaniel.rei.impl.search;
  2. import me.shedaniel.rei.api.EntryStack;
  3. import org.jetbrains.annotations.ApiStatus;
  4. import org.jetbrains.annotations.Nullable;
  5. @ApiStatus.Internal
  6. public abstract class Argument {
  7. public Argument() {
  8. }
  9. private int dataOrdinal = -1;
  10. public abstract String getName();
  11. @Nullable
  12. public String getPrefix() {
  13. return null;
  14. }
  15. public MatchStatus matchesArgumentPrefix(String text) {
  16. String prefix = getPrefix();
  17. if (prefix == null) return MatchStatus.unmatched();
  18. if (text.startsWith("-" + prefix)) return MatchStatus.invertMatched(text.substring(1 + prefix.length()));
  19. if (text.startsWith(prefix + "-")) return MatchStatus.invertMatched(text.substring(1 + prefix.length()));
  20. return text.startsWith(prefix) ? MatchStatus.matched(text.substring(prefix.length())) : MatchStatus.unmatched();
  21. }
  22. public final int getDataOrdinal() {
  23. if (dataOrdinal == -1) {
  24. dataOrdinal = ArgumentsRegistry.ARGUMENTS.indexOf(this);
  25. }
  26. return dataOrdinal;
  27. }
  28. public abstract boolean matches(Object[] data, EntryStack stack, String searchText, Object searchData);
  29. public Object prepareSearchData(String searchText) {
  30. return null;
  31. }
  32. }