package jas.spawner.legacy.spawner.creature.handler.parsing.keys; import jas.spawner.legacy.spawner.creature.handler.parsing.settings.OptionalSettings.Operand; public abstract class KeyParserBase extends KeyParser { public final Key key; public final boolean isInvertable; public final KeyType isChainable; public KeyParserBase(Key key, boolean isInvertable, KeyType isChainable) { this.key = key; this.isInvertable = isInvertable; this.isChainable = isChainable; } @Override public boolean isMatch(String string) { if (string == null) { return false; } Character character = isFirstSpecial(string); if (isSpecialCharValid(character)) { string = string.substring(1); character = isFirstSpecial(string); if (isSpecialCharValid(character)) { string = string.substring(1); } } return string.equalsIgnoreCase(key.key); } protected final Character isFirstSpecial(String string) { return isIndexSpecial(string, 0); } protected final Character isIndexSpecial(String string, int index) { if (string.length() <= index) { return null; } if (string.startsWith("&") || string.startsWith("|") || string.startsWith("!")) { return string.charAt(index); } return null; } protected final boolean isSpecialCharValid(Character character) { if (character == null) { return false; } if (character.equals('&') || character.equals('|')) { return getKeyType() == KeyType.CHAINABLE || getKeyType() == KeyType.PARENT; } else if (character.equals('!')) { return isInvertable; } return false; } public boolean isInverted(String string) { Character first = isIndexSpecial(string, 0); Character second = isIndexSpecial(string, 1); if ((first != null && first.equals('!')) || (second != null && second.equals('!'))) { return true; } return false; } public Operand parseOperand(String[] parseable) { return parseOperand(parseable[0]); } public Operand parseOperand(String parseable) { Operand operand = Operand.OR; if (parseable.charAt(0) == '&' || parseable.charAt(1) == '&') { operand = Operand.AND; } return operand; } @Override public boolean isInvertable() { return isInvertable; } @Override public KeyType getKeyType() { return isChainable; } }