-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
ClickGuiScreen:
package omg.sticky.gui;
import lombok.Getter;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.util.Window;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.LiteralText;
import net.minecraft.util.math.MathHelper;
import omg.sticky.Stickyclient;
import omg.sticky.fonts.Font;
import omg.sticky.fonts.Fonts;
import omg.sticky.gui.component.ModuleComponent;
import omg.sticky.module.api.Module;
import omg.sticky.util.MathUtils;
import omg.sticky.util.Scissor;
import omg.sticky.util.Wrapper;
import omg.sticky.util.shader.Rounds;
import java.awt.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ClickGuiScreen extends Screen implements Wrapper {
[USER=270918]@Getter[/USER]
private double x, y, width, height;
private float scroll, scrollAnimated;
private final Map<String, List<ModuleComponent>> categorizedComponents = new HashMap<>();
private String selectedCategory = "Combat"; // По умолчанию первая категория
public ClickGuiScreen() {
super(new LiteralText("Sticky GUI"));
create();
}
[USER=1367676]@override[/USER]
public void resize(MinecraftClient client, int width, int height) {
create();
super.resize(client, width, height);
}
[USER=1367676]@override[/USER]
public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
// Фон GUI
Rounds.drawRound(x, y, width, height, 14, new Color(0x111111));
// Название GUI
Font f = Fonts.Cygra.get(24);
String text = "Sticky Client";
double centeredX = x + (width - f.getWidth(text)) / 2;
f.draw(text, centeredX, y + 4, -1);
// Рендеринг вкладок категорий
renderCategoryTabs(matrices);
// Анимация скролла
scrollAnimated = MathUtils.lerp(scrollAnimated, scroll, 8);
// Список модулей в текущей категории
List<ModuleComponent> components = categorizedComponents.get(selectedCategory);
if (components == null || components.isEmpty()) {
System.out.println("No components to render for category: " + selectedCategory);
} else {
System.out.println("Rendering " + components.size() + " modules in category: " + selectedCategory);
Scissor.push();
Scissor.setFromComponentCoordinates(x, y + 40, width, height - 50);
float height = 10;
for (ModuleComponent component : components) {
component.scrollOffset = scrollAnimated;
component.render(matrices, mouseX, mouseY);
height += (float) component.height;
}
Scissor.pop();
// Ограничение скролла
scroll = (float) MathHelper.clamp(scroll, Math.min(0, -Math.abs(height - (this.height - 50))), 0);
}
super.render(matrices, mouseX, mouseY, delta);
}
[USER=1367676]@override[/USER]
public boolean mouseClicked(double mouseX, double mouseY, int button) {
// Проверяем клики по вкладкам категорий
if (checkCategoryTabClick(mouseX, mouseY)) {
return true;
}
// Обрабатываем клики по модулям
List<ModuleComponent> components = categorizedComponents.get(selectedCategory);
if (components != null) {
for (ModuleComponent moduleComponent : components) {
moduleComponent.mouseClicked(mouseX, mouseY, button);
}
}
return super.mouseClicked(mouseX, mouseY, button);
}
[USER=1367676]@override[/USER]
public boolean mouseReleased(double mouseX, double mouseY, int button) {
List<ModuleComponent> components = categorizedComponents.get(selectedCategory);
if (components != null) {
for (ModuleComponent moduleComponent : components) {
moduleComponent.mouseReleased();
}
}
return super.mouseReleased(mouseX, mouseY, button);
}
[USER=1367676]@override[/USER]
public boolean mouseScrolled(double mouseX, double mouseY, double amount) {
scroll += (float) (amount * 12f);
return super.mouseScrolled(mouseX, mouseY, amount);
}
[USER=1367676]@override[/USER]
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
List<ModuleComponent> components = categorizedComponents.get(selectedCategory);
if (components != null) {
for (ModuleComponent moduleComponent : components) {
moduleComponent.keyPressed(keyCode);
}
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
[USER=1367676]@override[/USER]
public boolean isPauseScreen() {
return false;
}
private void create() {
Window window = mc.getWindow();
width = 500;
height = 500;
x = (window.getScaledWidth() - width) / 2;
y = (window.getScaledHeight() - height) / 2;
categorizedComponents.clear();
System.out.println("Loading modules into GUI...");
for (Module module : Stickyclient.getInstance().moduleStorage.getModules()) {
if (module == null || module.getCategory() == null) {
System.out.println("Skipped null module or module without category.");
continue;
}
String category = module.getCategory();
System.out.println("Module: " + module.getName() + ", Category: " + category); // Логирование модуля
categorizedComponents.computeIfAbsent(category, k -> new ArrayList<>())
.add(new ModuleComponent(module, this, 0));
}
System.out.println("Available categories: " + categorizedComponents.keySet());
}
private void renderCategoryTabs(MatrixStack matrices) {
Font font = Fonts.Cygra.get(16);
int tabWidth = 60; // Ширина одной вкладки
int tabHeight = 20; // Высота вкладки
int index = 0;
for (String category : categorizedComponents.keySet()) {
double tabX = x + 10 + index * (tabWidth + 10);
double tabY = y + 30;
// Подсвечиваем выбранную категорию
Color color = category.equals(selectedCategory) ? new Color(0x5555FF) : new Color(0x333333);
Rounds.drawRound(tabX, tabY, tabWidth, tabHeight, 6, color);
// Название категории
double textX = tabX + (tabWidth - font.getWidth(category)) / 2;
double textY = tabY + (tabHeight - font.getHeight()) / 2;
font.draw(category, textX, textY, -1);
System.out.println("Rendering category tab: " + category); // Логирование категорий
index++;
}
}
private boolean checkCategoryTabClick(double mouseX, double mouseY) {
int tabWidth = 60;
int tabHeight = 20;
int index = 0;
for (String category : categorizedComponents.keySet()) {
double tabX = x + 10 + index * (tabWidth + 10);
double tabY = y + 30;
if (mouseX >= tabX && mouseX <= tabX + tabWidth && mouseY >= tabY && mouseY <= tabY + tabHeight) {
selectedCategory = category; // Меняем выбранную категорию
System.out.println("Selected category: " + category); // Логирование выбранной категории
return true;
}
index++;
}
return false;
}
}
ModuleComponent:
package omg.sticky.gui.component;
import net.minecraft.client.util.math.MatrixStack;
import omg.sticky.gui.component.setting.BindSettingComponent;
import omg.sticky.module.api.setting.BindSetting;
import org.lwjgl.glfw.GLFW;
import omg.sticky.fonts.Font;
import omg.sticky.fonts.Fonts;
import omg.sticky.gui.ClickGuiScreen;
import omg.sticky.gui.component.setting.BooleanSettingComponent;
import omg.sticky.gui.component.setting.SettingComponent;
import omg.sticky.module.api.Module;
import omg.sticky.module.api.setting.BooleanSetting;
import omg.sticky.module.api.setting.Setting;
import omg.sticky.util.ChatUtil;
import omg.sticky.util.KeyUtil;
import omg.sticky.util.Scissor;
import omg.sticky.util.animation.Animation;
import omg.sticky.util.animation.util.Easings;
import omg.sticky.util.shader.Rounds;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class ModuleComponent extends Component {
private final Module module;
private boolean binding, extended;
private double defaultHeight;
private final Animation heightAnimation = new Animation();
private final List<SettingComponent> components;
public ModuleComponent(Module module, ClickGuiScreen clickGuiScreen, float offset) {
super(clickGuiScreen.getX() + 4, clickGuiScreen.getY() + 4, clickGuiScreen.getWidth() - 8, 17, offset);
this.module = module;
this.defaultHeight = this.height;
heightAnimation.setToValue(height).setValue(height);
components = new ArrayList<>();
float setOffset = (float) height;
for (Setting setting : module.getSettings()) {
if (setting instanceof BooleanSetting) {
components.add(new BooleanSettingComponent(setting, this, setOffset));
} else if (setting instanceof BindSetting) {
components.add(new BindSettingComponent(setting, this, setOffset));
}
setOffset += (float) setting.getHeight();
}
}
[USER=1367676]@override[/USER]
public void render(MatrixStack matrixStack, int mouseX, int mouseY) {
heightAnimation.update();
height = heightAnimation.getValue();
Rounds.drawRound(x, getFull(), width, height, 6, new Color(0x222222));
Font f = Fonts.Inter.get(16);
String keyName = KeyUtil.getKeyName(module.getKey());
String text = binding ? "Bind: " + (keyName == null ? "None" : keyName) : module.getName();
f.draw(text, x + 3, getFull() + 3, module.isEnabled() ? Color.GREEN.getRGB() : -1);
Scissor.push();
Scissor.setFromComponentCoordinates(x, getFull(), width, height);
for (SettingComponent settingComponent : components)
settingComponent.render(matrixStack, mouseX, mouseY);
Scissor.pop();
}
[USER=1367676]@override[/USER]
public void mouseClicked(double mouseX, double mouseY, int button) {
if (extended)
for (SettingComponent settingComponent : components)
settingComponent.mouseClicked(mouseX, mouseY, button);
if (isHovered(mouseX, mouseY)) {
switch (button) {
case 0:
module.toggle();
break;
case 1:
extended = !extended;
double height = defaultHeight;
if (extended)
for (Setting setting : module.getSettings())
if (setting.isVisible())
height += setting.getHeight();
heightAnimation.animate(height, 0.2, Easings.QUAD_OUT);
break;
case 2:
binding = true;
break;
}
}
}
[USER=1367676]@override[/USER]
public void keyPressed(int keyCode) {
for (SettingComponent settingComponent : components)
settingComponent.keyPressed(keyCode);
if (binding) {
if (keyCode == GLFW.GLFW_KEY_DELETE) {
module.setKey(0);
ChatUtil.addMessage("Модуль " + module.getName() + " успешно разбинжен!");
} else {
module.setKey(keyCode);
ChatUtil.addMessage("Модуль " + module.getName() + " успешно забинжен на клавишу: " + KeyUtil.getKeyName(keyCode));
}
binding = false;
}
}
public boolean isHovered(double mouseX, double mouseY) {
return mouseX >= x && mouseY >= getFull() && mouseX <= x + width && mouseY <= getFull() + defaultHeight;
}
}