Ща проверюесли работает то +rep а так ну ладноВсе показано пошагово, и публикация длинная, так что сорри)
Создаём класс SearchField
Пожалуйста, авторизуйтесь для просмотра ссылки.
потом идём в класс DropDown и в начале в любом пустом месте пишемJava:/** * @author Ieo117 * @created 16.06.2024 */ @ Setter @ Getter public class SearchField { private int x, y, width, height; private String text; private boolean isFocused; private boolean typing; private final String placeholder; public SearchField(int x, int y, int width, int height, String placeholder) { this.x = x; this.y = y; this.width = width; this.height = height; this.placeholder = placeholder; this.text = ""; this.isFocused = false; this.typing = false; } public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { DisplayUtils.drawRoundedRect(x, y, width, height, new Vector4f(5, 5, 5, 5), ColorUtils.rgb(50, 50, 50)); String textToDraw = text.isEmpty() && !typing ? placeholder : text; String cursor = typing && System.currentTimeMillis() % 1000 > 500 ? "_" : ""; Fonts.montserrat.drawText(matrixStack, textToDraw + cursor, x + 5, y + (height - 8) / 2 + 1, ColorUtils.rgb(255, 255, 255), 6); } public boolean charTyped(char codePoint, int modifiers) { if (isFocused) { text += codePoint; return true; } return false; } public boolean keyPressed(int keyCode, int scanCode, int modifiers) { if (isFocused && keyCode == GLFW.GLFW_KEY_BACKSPACE && !text.isEmpty()) { text = text.substring(0, text.length() - 1); return true; } if(keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_ESCAPE){ typing = false; } return false; } public boolean mouseClicked(double mouseX, double mouseY, int button) { if(!MathUtil.isHovered((float) mouseX, (float) mouseY, x, y, width, height)){ isFocused = false; } isFocused = MathUtil.isHovered((float) mouseX, (float) mouseY, x, y, width, height); typing = isFocused; return isFocused; } public boolean isEmpty() { return text.isEmpty(); } public void setFocused(boolean focused) { isFocused = focused; } }
и ищемJava:public SearchField searchField;
protected void init(){} и вставляем
потом в конце public void render(){ передJava:/** * @param x,y вычисление середины экрана под 3 панелькой, */ int windowWidth = ClientUtil.calc(mc.getMainWindow().getScaledWidth()); int windowHeight = ClientUtil.calc(mc.getMainWindow().getScaledHeight()); float x = (windowWidth / 2f) - (panels.size() * (135 + 10) / 2f) + 2 * (135 + 10) + 27.5f; float y = windowHeight / 2f + (650 / 2f) / 2f + 30; searchField = new SearchField((int) x, (int) y, 120, 16, "Поиск");
GlStateManager.popMatrix();
mc.gameRenderer.setupOverlayRendering();}
рендерим сам поисковик
и где то в пустом месте вставляем этоJava:searchField.render(matrixStack, mouseX, mouseY, partialTicks);
так же не забудьте в charTypedJava:public boolean isSearching() { return !searchField.isEmpty(); } public String getSearchText() { return searchField.getText(); } public boolean searchCheck(String text) { return isSearching() && !text .replaceAll(" ", "") .toLowerCase() .contains(getSearchText() .replaceAll(" ", "") .toLowerCase()); }
if (searchField.charTyped(codePoint, modifiers)) {
return true;
}
в keyPressed
if (searchField.keyPressed(keyCode, scanCode, modifiers)) {
return true;
}
и в mouseClicked
if (searchField.mouseClicked(mouseX, mouseY, button)) {
return true;
}
после этого идём в класс Panel
в drawComponents()
после
for(Component component : componennts(){}
и замените код внутри mouseClick наJava:/** * @param FullMyst укажите вместо него свой основной класс например (Expensive) */ if(FullMyst.getInstance().getDropDown().searchCheck(component.getFunction().getName())){ continue; }
и всё, вы сделали поисковикJava:/** * @param FullMyst укажите вместо него свой основной класс например (Expensive) */ for (ModuleComponent component : modules) { if(FullMyst.getInstance().getDropDown().searchCheck(component.getFunction().getName())){ continue; } component.mouseClick(mouseX, mouseY, button); }