-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Делаю логику что при правой кнопке мыши модуль открывается и показываются компоненти, но все равно при правом клике оно на момент открывается и сразу закрывается, уже перебровывал разные способы, даже чат гпт не помагает
Java:
package dev.ui.dropdown.im;
import com.mojang.blaze3d.matrix.MatrixStack;
import dev.modules.api.Module;
import dev.settings.Setting;
import dev.settings.im.BooleanSetting;
import dev.ui.dropdown.components.BooleanComponent;
import dev.utils.font.Fonts;
import dev.utils.render.ColorUtils;
import dev.utils.render.RenderUtils;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import net.minecraft.util.math.vector.Vector4f;
public class ModuleButton {
private int x, y, width, height;
private Module module;
private boolean expanded = false;
private boolean wasRightClick;
private final ObjectArrayList<Component> components = new ObjectArrayList<>();
public ModuleButton(Module module) {
this.module = module;
for (Setting<?> setting : module.settings) {
if (setting instanceof BooleanSetting bool) {
components.add(new BooleanComponent(bool));
}
}
}
public void render(MatrixStack stack, int mouseX, int mouseY, boolean leftClick, boolean rightClick, boolean middleClick) {
handleMouseClick(mouseX, mouseY, leftClick, rightClick);
int backgroundColor = module.isEnabled() ? ColorUtils.hudColor2 : ColorUtils.hudColor1;
RenderUtils.drawRoundedRect(x, y, width, height, new Vector4f(3, 3, 3, 3), backgroundColor);
String moduleName = module.getName();
int moduleNameWidth = (int) Fonts.lFBold[16].getWidth(moduleName);
int moduleNameHeight = (int) Fonts.lFBold[16].getFontHeight();
Fonts.lFBold[16].drawString(stack, moduleName, x + (width - moduleNameWidth) / 2, y + (height - moduleNameHeight) / 2 + 1.5, -1);
if (expanded) {
RenderUtils.drawRoundedRect(x, y + height, width, getComponentsHeight(), new Vector4f(3,3,3,3), ColorUtils.hudColor1);
int componentY = y + height + 2;
for (Component component : components) {
if (component.isVisible()) {
component.setX(x);
component.setY(componentY);
component.setWidth(width);
component.render(stack, mouseX, mouseY);
componentY += component.getHeight() + 2;
}
}
}
}
private int getComponentsHeight() {
return components.stream()
.filter(Component::isVisible)
.mapToInt(component -> (int) component.getHeight())
.sum() + components.size() * 2;
}
public void handleMouseClick(int mouseX, int mouseY, boolean leftClick, boolean rightClick) {
boolean isHovered = mouseX > x && mouseX < x + width && mouseY > y && mouseY < y + height;
if (isHovered && rightClick && !wasRightClick) {
expanded = !expanded;
}
if (isHovered && leftClick) {
module.setEnable(!module.isEnabled());
}
wasRightClick = rightClick;
}
public void setPosition(int x, int y, int width, int height) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
}
public int getHeight() {
return expanded ? height + getComponentsHeight() : height;
}
}