-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Я захотел сделать мод на визуалы при помощи чат гпт, пришел к вот такой гуишке
Но столкнулся с проблемой, которую не получилось решить при помощи чат гпт. Майн ставится на паузу при открытии гуи.
Вот мой код:
ClickGuiScreen
package texad.client.gui;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.util.text.StringTextComponent;
import org.lwjgl.glfw.GLFW;
public class ClickGuiScreen extends Screen {
private int guiWidth = 200;
private int guiHeight = 150;
private int guiLeft;
private int guiTop;
private String[] tabs = {"Visuals", "Themes", "Info"};
private int selectedTab = 0;
public ClickGuiScreen() {
super(new StringTextComponent("Rly Visuals"));
}
@Override
protected void init() {
this.guiLeft = (this.width - this.guiWidth) / 2;
this.guiTop = (this.height - this.guiHeight) / 2;
}
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
fill(matrixStack, guiLeft, guiTop, guiLeft + guiWidth, guiTop + guiHeight, 0xFF2E2E2E);
this.font.draw(matrixStack, "Rly Visuals", guiLeft + 10, guiTop + 10, 0xFFFFFFFF);
for (int i = 0; i < tabs.length; i++) {
int tabX = guiLeft + 10 + i * 60;
int tabY = guiTop + 30;
fill(matrixStack, tabX, tabY, tabX + 50, tabY + 20, i == selectedTab ? 0xFF444444 : 0xFF3A3A3A);
this.font.draw(matrixStack, tabs, tabX + 5, tabY + 5, 0xFFFFFFFF);
}
renderSelectedTabContent(matrixStack);
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_ESCAPE) { // Позволяем закрывать GUI на ESC
this.onClose();
return true;
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
for (int i = 0; i < tabs.length; i++) {
int tabX = guiLeft + 10 + i * 60;
int tabY = guiTop + 30;
if (mouseX >= tabX && mouseX <= tabX + 50 && mouseY >= tabY && mouseY <= tabY + 20) {
selectedTab = i;
return true;
}
}
return super.mouseClicked(mouseX, mouseY, button);
}
private void renderSelectedTabContent(MatrixStack matrixStack) {
switch (selectedTab) {
case 0: renderVisualsContent(matrixStack); break;
case 1: renderThemesContent(matrixStack); break;
case 2: renderInfoContent(matrixStack); break;
}
}
private void renderVisualsContent(MatrixStack matrixStack) {
this.font.draw(matrixStack, "Visuals Settings", guiLeft + 10, guiTop + 60, 0xFFFFFFFF);
}
private void renderThemesContent(MatrixStack matrixStack) {
this.font.draw(matrixStack, "Theme Selection", guiLeft + 10, guiTop + 60, 0xFFFFFFFF);
}
private void renderInfoContent(MatrixStack matrixStack) {
this.font.draw(matrixStack, "Discord: Your Discord Link", guiLeft + 10, guiTop + 60, 0xFFFFFFFF);
}
@Override
public void onClose() {
super.onClose();
Minecraft.getInstance().setScreen(null); // Закрытие GUI корректно
}
}
KeyBindHandler
package texad.client.keybinds;
import texad.client.gui.ClickGuiScreen;
import net.minecraft.client.Minecraft;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import org.lwjgl.glfw.GLFW;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class KeyBindHandler {
@SubscribeEvent
public static void onKeyInput(InputEvent.KeyInputEvent event) {
if (event.getKey() == GLFW.GLFW_KEY_RIGHT_SHIFT && event.getAction() == GLFW.GLFW_PRESS) {
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.screen == null) { // Проверка, чтобы убедиться, что GUI открывается только если нет другого экрана
minecraft.setScreen(new ClickGuiScreen());
}
}
}
}
Но столкнулся с проблемой, которую не получилось решить при помощи чат гпт. Майн ставится на паузу при открытии гуи.
Вот мой код:
ClickGuiScreen
package texad.client.gui;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.util.text.StringTextComponent;
import org.lwjgl.glfw.GLFW;
public class ClickGuiScreen extends Screen {
private int guiWidth = 200;
private int guiHeight = 150;
private int guiLeft;
private int guiTop;
private String[] tabs = {"Visuals", "Themes", "Info"};
private int selectedTab = 0;
public ClickGuiScreen() {
super(new StringTextComponent("Rly Visuals"));
}
@Override
protected void init() {
this.guiLeft = (this.width - this.guiWidth) / 2;
this.guiTop = (this.height - this.guiHeight) / 2;
}
@Override
public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
fill(matrixStack, guiLeft, guiTop, guiLeft + guiWidth, guiTop + guiHeight, 0xFF2E2E2E);
this.font.draw(matrixStack, "Rly Visuals", guiLeft + 10, guiTop + 10, 0xFFFFFFFF);
for (int i = 0; i < tabs.length; i++) {
int tabX = guiLeft + 10 + i * 60;
int tabY = guiTop + 30;
fill(matrixStack, tabX, tabY, tabX + 50, tabY + 20, i == selectedTab ? 0xFF444444 : 0xFF3A3A3A);
this.font.draw(matrixStack, tabs, tabX + 5, tabY + 5, 0xFFFFFFFF);
}
renderSelectedTabContent(matrixStack);
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == GLFW.GLFW_KEY_ESCAPE) { // Позволяем закрывать GUI на ESC
this.onClose();
return true;
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
for (int i = 0; i < tabs.length; i++) {
int tabX = guiLeft + 10 + i * 60;
int tabY = guiTop + 30;
if (mouseX >= tabX && mouseX <= tabX + 50 && mouseY >= tabY && mouseY <= tabY + 20) {
selectedTab = i;
return true;
}
}
return super.mouseClicked(mouseX, mouseY, button);
}
private void renderSelectedTabContent(MatrixStack matrixStack) {
switch (selectedTab) {
case 0: renderVisualsContent(matrixStack); break;
case 1: renderThemesContent(matrixStack); break;
case 2: renderInfoContent(matrixStack); break;
}
}
private void renderVisualsContent(MatrixStack matrixStack) {
this.font.draw(matrixStack, "Visuals Settings", guiLeft + 10, guiTop + 60, 0xFFFFFFFF);
}
private void renderThemesContent(MatrixStack matrixStack) {
this.font.draw(matrixStack, "Theme Selection", guiLeft + 10, guiTop + 60, 0xFFFFFFFF);
}
private void renderInfoContent(MatrixStack matrixStack) {
this.font.draw(matrixStack, "Discord: Your Discord Link", guiLeft + 10, guiTop + 60, 0xFFFFFFFF);
}
@Override
public void onClose() {
super.onClose();
Minecraft.getInstance().setScreen(null); // Закрытие GUI корректно
}
}
KeyBindHandler
package texad.client.keybinds;
import texad.client.gui.ClickGuiScreen;
import net.minecraft.client.Minecraft;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import org.lwjgl.glfw.GLFW;
@Mod.EventBusSubscriber(value = Dist.CLIENT)
public class KeyBindHandler {
@SubscribeEvent
public static void onKeyInput(InputEvent.KeyInputEvent event) {
if (event.getKey() == GLFW.GLFW_KEY_RIGHT_SHIFT && event.getAction() == GLFW.GLFW_PRESS) {
Minecraft minecraft = Minecraft.getInstance();
if (minecraft.screen == null) { // Проверка, чтобы убедиться, что GUI открывается только если нет другого экрана
minecraft.setScreen(new ClickGuiScreen());
}
}
}
}