2024-02-04 14:09:24 +02:00
|
|
|
package codechicken.nei;
|
|
|
|
|
|
|
|
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
|
|
|
|
2024-07-26 18:44:54 +03:00
|
|
|
import codechicken.nei.SearchField.GuiSearchField;
|
2025-08-24 10:35:59 +03:00
|
|
|
import codechicken.nei.api.IRecipeFilter;
|
|
|
|
|
import codechicken.nei.api.IRecipeFilter.IRecipeFilterProvider;
|
2024-02-04 14:09:24 +02:00
|
|
|
import codechicken.nei.api.ItemFilter;
|
2025-08-24 10:35:59 +03:00
|
|
|
import codechicken.nei.api.ItemFilter.ItemFilterProvider;
|
2024-02-04 14:09:24 +02:00
|
|
|
import codechicken.nei.util.TextHistory;
|
|
|
|
|
|
2025-08-24 10:35:59 +03:00
|
|
|
public abstract class RecipeSearchField extends TextField implements ItemFilterProvider, IRecipeFilterProvider {
|
2024-02-04 14:09:24 +02:00
|
|
|
|
|
|
|
|
private static final TextHistory history = new TextHistory();
|
|
|
|
|
|
|
|
|
|
public RecipeSearchField(String ident) {
|
|
|
|
|
super(ident);
|
|
|
|
|
this.field.setVisible(false);
|
|
|
|
|
}
|
|
|
|
|
|
2024-06-27 18:03:50 +03:00
|
|
|
@Override
|
|
|
|
|
protected void initInternalTextField() {
|
2025-09-04 16:59:51 +03:00
|
|
|
final GuiSearchField field = new GuiSearchField();
|
2024-06-27 18:03:50 +03:00
|
|
|
field.setMaxStringLength(maxSearchLength);
|
|
|
|
|
field.setCursorPositionZero();
|
2025-09-06 23:32:14 +03:00
|
|
|
field.setSkipRecipeTokens(true);
|
2025-09-04 16:59:51 +03:00
|
|
|
((SearchTextFormatter) field.getFormatter()).setContextToken("<>");
|
|
|
|
|
this.field = field;
|
2024-06-27 18:03:50 +03:00
|
|
|
}
|
|
|
|
|
|
2024-02-04 14:09:24 +02:00
|
|
|
public boolean isVisible() {
|
|
|
|
|
return this.field.getVisible();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void setVisible(boolean visible) {
|
|
|
|
|
this.field.setVisible(visible);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected abstract boolean noResults();
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public int getTextColour() {
|
|
|
|
|
if (!text().isEmpty() && !noResults()) {
|
|
|
|
|
return focused() ? 0xFFcc3300 : 0xFF993300;
|
|
|
|
|
} else {
|
|
|
|
|
return focused() ? 0xFFE0E0E0 : 0xFF909090;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void lastKeyTyped(int keyID, char keyChar) {
|
|
|
|
|
|
|
|
|
|
if (focused() && NEIClientConfig.isKeyHashDown("gui.getprevioussearch")) {
|
|
|
|
|
handleNavigateHistory(TextHistory.Direction.PREVIOUS);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (focused() && NEIClientConfig.isKeyHashDown("gui.getnextsearch")) {
|
|
|
|
|
handleNavigateHistory(TextHistory.Direction.NEXT);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public String filterText(String s) {
|
|
|
|
|
return EnumChatFormatting.getTextWithoutFormattingCodes(s);
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-24 10:35:59 +03:00
|
|
|
@Override
|
2024-02-04 14:09:24 +02:00
|
|
|
public ItemFilter getFilter() {
|
2024-07-26 18:44:54 +03:00
|
|
|
return ((GuiSearchField) field).getFilter();
|
2024-02-04 14:09:24 +02:00
|
|
|
}
|
|
|
|
|
|
2025-08-24 10:35:59 +03:00
|
|
|
@Override
|
|
|
|
|
public IRecipeFilter getRecipeFilter() {
|
|
|
|
|
return ((GuiSearchField) field).getRecipeFilter();
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-04 14:09:24 +02:00
|
|
|
@Override
|
|
|
|
|
public void setFocus(boolean focus) {
|
|
|
|
|
final boolean previousFocus = field.isFocused();
|
|
|
|
|
|
|
|
|
|
if (previousFocus != focus) {
|
|
|
|
|
history.add(text());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
super.setFocus(focus);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean handleNavigateHistory(TextHistory.Direction direction) {
|
|
|
|
|
if (focused()) {
|
|
|
|
|
return history.get(direction, text()).map(newText -> {
|
|
|
|
|
setText(newText);
|
|
|
|
|
return true;
|
|
|
|
|
}).orElse(false);
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|