Начинающий
- Статус
- Оффлайн
- Регистрация
- 26 Авг 2025
- Сообщения
- 20
- Реакции
- 0
Так, обыватель, сейчас я тебе расскажу как сделать мега-ченджлог(это такая херь, где обычно пишут изменения в версиях. Гайд для Exp 3.1.
1.Переходим по пути expensive\src\im\expensive\ui/mainmenu и там создаем класс: "ChangelogScreen" (БЕЗ кавычек)
2.Вставляем туда это нечто:
1.Переходим по пути expensive\src\im\expensive\ui/mainmenu и там создаем класс: "ChangelogScreen" (БЕЗ кавычек)
2.Вставляем туда это нечто:
package im.expensive.ui.mainmenu;
import com.mojang.blaze3d.matrix.MatrixStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.StringTextComponent;
import im.expensive.utils.math.MathUtil;
import im.expensive.utils.render.ColorUtils;
import im.expensive.utils.render.DisplayUtils;
import im.expensive.utils.render.font.Fonts;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.List;
public class ChangelogScreen extends Screen {
private final Screen parentScreen;
private final Minecraft mc;
private final List<String> changelogEntries = new ArrayList<>();
private float scrollOffset = 0;
private final ResourceLocation backmenu = new ResourceLocation("expensive/images/changelog.png");
public ChangelogScreen(Screen parentScreen) {
super(new StringTextComponent("Changelog"));
this.parentScreen = parentScreen;
this.mc = Minecraft.getInstance();
loadChangelog();
}
private void loadChangelog() {
changelogEntries.clear();
changelogEntries.add(" §Название вашего мега-клиента и его версия. Пример: (Shit Client 0.2.2)§");
changelogEntries.add("Крутые изменения");
changelogEntries.add("Ваще хайп)");
changelogEntries.add("Такие строчки можно добавлять до бесконечности как и версия и название");
}
@Override
public void render(MatrixStack stack, int mouseX, int mouseY, float partialTicks) {
DisplayUtils.drawImage(backmenu, 0, 0, width, height, -1);
float panelX = width * 0.2f;
float panelY = 70;
float panelWidth = width * 0.6f;
float panelHeight = height - 140;
DisplayUtils.drawRoundedRect(panelX, panelY, panelWidth, panelHeight, 8,
ColorUtils.rgba(15, 15, 21, 220));
GL11.glEnable(GL11.GL_SCISSOR_TEST);
int scaleFactor = (int) Math.round(mc.getMainWindow().getGuiScaleFactor());
GL11.glScissor(
(int)(panelX * scaleFactor),
(int)(mc.getMainWindow().getHeight() - (panelY + panelHeight) * scaleFactor),
(int)(panelWidth * scaleFactor),
(int)(panelHeight * scaleFactor)
);
float textY = panelY + 15 - scrollOffset;
for (int i = 0; i < changelogEntries.size(); i++) {
String entry = changelogEntries.get(i);
if (i == 0) {
// Убираем коды форматирования для правильного измерения ширины
String cleanText = entry.replaceAll("§[0-9a-fklmnor]", "Rat Alpha");
float textWidth = Fonts.sfui.getWidth(cleanText, 7.5f);
float textX = panelX + (panelWidth - textWidth) / 2;
Fonts.sfui.drawText(stack, entry, textX, textY,
ColorUtils.rgb(240, 240, 240), 7.5f);
} else {
Fonts.sfui.drawText(stack, entry, panelX + 15, textY,
ColorUtils.rgb(240, 240, 240), 7.5f);
}
textY += 12;
}
GL11.glDisable(GL11.GL_SCISSOR_TEST);
float backX = width / 2f - 50;
float backY = height - 40;
boolean hoverBack = MathUtil.isHovered(mouseX, mouseY, backX, backY, 100, 25);
DisplayUtils.drawRoundedRect(backX, backY, 100, 25, 5,
hoverBack ? ColorUtils.rgba(255, 215, 0, 120) : ColorUtils.rgba(40, 40, 50, 200));
Fonts.montserrat.drawCenteredText(stack, "Назад", backX + 50, backY + 8,
hoverBack ? ColorUtils.rgb(255, 255, 255) : ColorUtils.rgb(200, 200, 200), 8f);
super.render(stack, mouseX, mouseY, partialTicks);
}
@Override
public boolean mouseClicked(double mouseX, double mouseY, int button) {
float backX = width / 2f - 50;
float backY = height - 40;
if (MathUtil.isHovered((int)mouseX, (int)mouseY, backX, backY, 100, 25)) {
mc.displayGuiScreen(parentScreen);
return true;
}
return super.mouseClicked(mouseX, mouseY, button);
}
@Override
public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
scrollOffset = (float)Math.max(0, scrollOffset - delta * 10);
return true;
}
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (keyCode == 256) { // ESC
mc.displayGuiScreen(parentScreen);
return true;
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
}
3.После заходим в MainScreen в той же папке из 1-ого пункта. Где-то на 71 строчке(или в другом месте) ищем кнопки. Они выглядят примерно так :
buttons.add(new Button(x, y, widthButton, buttonHeight, "Выход", mc::shutdownMinecraftApplet));
После последней кнопки добавляем это -
// ченджлог
float changelogWidth = 135 / 2f;
float changelogHeight = 50 / 2f;
float changelogX = width - changelogWidth - 890;
float changelogY = 510;
buttons.add(new Button(changelogX, changelogY, changelogWidth, changelogHeight, "Changelog", () -> {
mc.displayGuiScreen(new ChangelogScreen(this));
}));
}
Ура, мы все закончили, теперь мы добровольно-принудительно добавляем фон к нашему окну Changelogа, заходим по пути
\expensive-master\src\assets\minecraft\expensive\images и вставляем туда наш фон и переименовываем его на - "changelog.png"(без кавычек)
Теперь окончательно всё(вроде), если будут какие-либо вопросы, пишите, на эту тему я потратил 2 зефирки и 1.5 литра воды.
Можно поменьше /del пж.
Тема была создана, т.к. я сам искал что-то похожее, но не нашел
\expensive-master\src\assets\minecraft\expensive\images и вставляем туда наш фон и переименовываем его на - "changelog.png"(без кавычек)
Теперь окончательно всё(вроде), если будут какие-либо вопросы, пишите, на эту тему я потратил 2 зефирки и 1.5 литра воды.
Можно поменьше /del пж.
Тема была создана, т.к. я сам искал что-то похожее, но не нашел
Последнее редактирование: