Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 21 additions & 33 deletions src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.terraformersmc.modmenu.gui;

import com.google.common.base.Joiner;
import com.mojang.blaze3d.systems.RenderSystem;
import com.terraformersmc.modmenu.ModMenu;
import com.terraformersmc.modmenu.config.ModMenuConfig;
import com.terraformersmc.modmenu.config.ModMenuConfigManager;
Expand Down Expand Up @@ -297,24 +296,23 @@ public boolean charTyped(char chr, int keyCode) {
}

@Override
public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta) {
super.render(DrawContext, mouseX, mouseY, delta);
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta);
ModListEntry selectedEntry = selected;
if (selectedEntry != null) {
this.descriptionListWidget.render(DrawContext, mouseX, mouseY, delta);
this.descriptionListWidget.render(context, mouseX, mouseY, delta);
}
this.modList.render(DrawContext, mouseX, mouseY, delta);
this.searchBox.render(DrawContext, mouseX, mouseY, delta);
RenderSystem.disableBlend();
DrawContext.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 16777215);
this.modList.render(context, mouseX, mouseY, delta);
this.searchBox.render(context, mouseX, mouseY, delta);
context.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 16777215);
if (!ModMenuConfig.DISABLE_DRAG_AND_DROP.getValue()) {
DrawContext.drawCenteredTextWithShadow(this.textRenderer,
context.drawCenteredTextWithShadow(this.textRenderer,
ModMenuScreenTexts.DROP_INFO_LINE_1,
this.width - this.modList.getWidth() / 2,
RIGHT_PANE_Y / 2 - client.textRenderer.fontHeight - 1,
Formatting.GRAY.getColorValue()
);
DrawContext.drawCenteredTextWithShadow(this.textRenderer,
context.drawCenteredTextWithShadow(this.textRenderer,
ModMenuScreenTexts.DROP_INFO_LINE_2,
this.width - this.modList.getWidth() / 2,
RIGHT_PANE_Y / 2 + 1,
Expand All @@ -327,22 +325,22 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta)
if (this.filterOptionsShown) {
if (!ModMenuConfig.SHOW_LIBRARIES.getValue() ||
textRenderer.getWidth(fullModCount) <= this.filtersX - 5) {
DrawContext.drawText(textRenderer,
context.drawText(textRenderer,
fullModCount.asOrderedText(),
this.searchBoxX,
52,
0xFFFFFF,
true
);
} else {
DrawContext.drawText(textRenderer,
context.drawText(textRenderer,
computeModCountText(false, false).asOrderedText(),
this.searchBoxX,
46,
0xFFFFFF,
true
);
DrawContext.drawText(textRenderer,
context.drawText(textRenderer,
computeLibraryCountText(false).asOrderedText(),
this.searchBoxX,
57,
Expand All @@ -353,22 +351,22 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta)
} else {
if (!ModMenuConfig.SHOW_LIBRARIES.getValue() ||
textRenderer.getWidth(fullModCount) <= modList.getWidth() - 5) {
DrawContext.drawText(textRenderer,
context.drawText(textRenderer,
fullModCount.asOrderedText(),
this.searchBoxX,
52,
0xFFFFFF,
true
);
} else {
DrawContext.drawText(textRenderer,
context.drawText(textRenderer,
computeModCountText(false, false).asOrderedText(),
this.searchBoxX,
46,
0xFFFFFF,
true
);
DrawContext.drawText(textRenderer,
context.drawText(textRenderer,
computeLibraryCountText(false).asOrderedText(),
this.searchBoxX,
57,
Expand All @@ -383,24 +381,14 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta)
Mod mod = selectedEntry.getMod();
int x = this.rightPaneX;
if ("java".equals(mod.getId())) {
DrawingUtil.drawRandomVersionBackground(mod, DrawContext, x, RIGHT_PANE_Y, 32, 32);
DrawingUtil.drawRandomVersionBackground(mod, context, x, RIGHT_PANE_Y, 32, 32);
}
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
RenderSystem.enableBlend();
DrawContext.drawTexture(RenderLayer::getGuiTextured, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32);
RenderSystem.disableBlend();
context.drawTexture(RenderLayer::getGuiTextured, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32);
int lineSpacing = textRenderer.fontHeight + 1;
int imageOffset = 36;
Text name = Text.literal(mod.getTranslatedName());
StringVisitable trimmedName = name;
int maxNameWidth = this.width - (x + imageOffset);
if (textRenderer.getWidth(name) > maxNameWidth) {
StringVisitable ellipsis = StringVisitable.plain("...");
trimmedName = StringVisitable.concat(textRenderer.trimToWidth(name,
maxNameWidth - textRenderer.getWidth(ellipsis)
), ellipsis);
}
DrawContext.drawText(textRenderer,
StringVisitable trimmedName = DrawingUtil.getTrimmedName(name, this.width - (x + imageOffset), this.textRenderer);
context.drawText(textRenderer,
Language.getInstance().reorder(trimmedName),
x + imageOffset,
RIGHT_PANE_Y + 1,
Expand All @@ -423,10 +411,10 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta)
this.init = false;
}
if (!ModMenuConfig.HIDE_BADGES.getValue()) {
modBadgeRenderer.draw(DrawContext, mouseX, mouseY);
modBadgeRenderer.draw(context, mouseX, mouseY);
}
if (mod.isReal()) {
DrawContext.drawText(textRenderer,
context.drawText(textRenderer,
mod.getPrefixedVersion(),
x + imageOffset,
RIGHT_PANE_Y + 2 + lineSpacing,
Expand All @@ -443,7 +431,7 @@ public void render(DrawContext DrawContext, int mouseX, int mouseY, float delta)
} else {
authors = names.get(0);
}
DrawingUtil.drawWrappedString(DrawContext,
DrawingUtil.drawWrappedString(context,
I18n.translate("modmenu.authorPrefix", authors),
x + imageOffset,
RIGHT_PANE_Y + 2 + lineSpacing * 2,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package com.terraformersmc.modmenu.gui.widget;

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import com.terraformersmc.modmenu.api.UpdateInfo;
import com.terraformersmc.modmenu.config.ModMenuConfig;
import com.terraformersmc.modmenu.gui.ModsScreen;
import com.terraformersmc.modmenu.gui.widget.entries.ModListEntry;
import com.terraformersmc.modmenu.util.mod.Mod;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gl.GlUsage;
import net.minecraft.client.gl.ShaderProgramKeys;
import net.minecraft.client.gl.VertexBuffer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Selectable;
Expand All @@ -21,12 +16,11 @@
import net.minecraft.client.gui.screen.option.CreditsAndAttributionScreen;
import net.minecraft.client.gui.widget.ElementListWidget;
import net.minecraft.client.gui.widget.EntryListWidget;
import net.minecraft.client.render.*;
import net.minecraft.text.OrderedText;
import net.minecraft.text.Text;
import net.minecraft.util.Colors;
import net.minecraft.util.Formatting;
import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper;

import java.util.Collections;
import java.util.List;
Expand All @@ -51,6 +45,12 @@ public class DescriptionListWidget extends EntryListWidget<DescriptionListWidget
.formatted(Formatting.UNDERLINE);
private static final Text CREDITS_TEXT = Text.translatable("modmenu.credits");

private static final int BLACK = Colors.BLACK;
private static final int TRANSPARENT = 0x00000000;

private static final int SHADOW_HEIGHT = 4;
private static final int SHADOW_Z = 200;

private final ModsScreen parent;
private final TextRenderer textRenderer;
private ModListEntry lastSelected = null;
Expand Down Expand Up @@ -90,7 +90,7 @@ public void appendClickableNarrations(NarrationMessageBuilder builder) {
}

@Override
public void renderList(DrawContext DrawContext, int mouseX, int mouseY, float delta) {
public void renderList(DrawContext context, int mouseX, int mouseY, float delta) {
ModListEntry selectedEntry = parent.getSelectedEntry();
if (selectedEntry != lastSelected) {
lastSelected = selectedEntry;
Expand Down Expand Up @@ -264,126 +264,18 @@ public void renderList(DrawContext DrawContext, int mouseX, int mouseY, float de
}
}

Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferBuilder;
BuiltBuffer builtBuffer;

// {
// RenderSystem.setShader(GameRenderer::getPositionTexColorProgram);
// RenderSystem.setShaderTexture(0, Screen.OPTIONS_BACKGROUND_TEXTURE);
// RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
// bufferBuilder.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);
// bufferBuilder.vertex(this.getX(), this.getBottom(), 0.0D).texture(this.getX() / 32.0F, (this.getBottom() + (int) this.getScrollAmount()) / 32.0F).color(32, 32, 32, 255);
// bufferBuilder.vertex(this.getRight(), this.getBottom(), 0.0D).texture(this.getRight() / 32.0F, (this.getBottom() + (int) this.getScrollAmount()) / 32.0F).color(32, 32, 32, 255);
// bufferBuilder.vertex(this.getRight(), this.getY(), 0.0D).texture(this.getRight() / 32.0F, (this.getY() + (int) this.getScrollAmount()) / 32.0F).color(32, 32, 32, 255);
// bufferBuilder.vertex(this.getX(), this.getY(), 0.0D).texture(this.getX() / 32.0F, (this.getY() + (int) this.getScrollAmount()) / 32.0F).color(32, 32, 32, 255);
// tessellator.draw();
// }

this.enableScissor(DrawContext);
super.renderList(DrawContext, mouseX, mouseY, delta);
DrawContext.disableScissor();

RenderSystem.depthFunc(515);
RenderSystem.disableDepthTest();
RenderSystem.enableBlend();
RenderSystem.blendFuncSeparate(GlStateManager.SrcFactor.SRC_ALPHA,
GlStateManager.DstFactor.ONE_MINUS_SRC_ALPHA,
GlStateManager.SrcFactor.ZERO,
GlStateManager.DstFactor.ONE
);
// RenderSystem.setShader(GameRenderer::getPositionColorProgram);
RenderSystem.setShader(ShaderProgramKeys.POSITION_COLOR);

bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
bufferBuilder.vertex(this.getX(), (this.getY() + 4), 0.0F).

color(0, 0, 0, 0);

bufferBuilder.vertex(this.getRight(), (this.getY() + 4), 0.0F).

color(0, 0, 0, 0);

bufferBuilder.vertex(this.getRight(), this.getY(), 0.0F).

color(0, 0, 0, 255);

bufferBuilder.vertex(this.getX(), this.getY(), 0.0F).

color(0, 0, 0, 255);

bufferBuilder.vertex(this.getX(), this.getBottom(), 0.0F).

color(0, 0, 0, 255);

bufferBuilder.vertex(this.getRight(), this.getBottom(), 0.0F).

color(0, 0, 0, 255);

bufferBuilder.vertex(this.getRight(), (this.getBottom() - 4), 0.0F).

color(0, 0, 0, 0);

bufferBuilder.vertex(this.getX(), (this.getBottom() - 4), 0.0F).

color(0, 0, 0, 0);

try {
builtBuffer = bufferBuilder.end();

try (VertexBuffer vertexBuffer = new VertexBuffer(GlUsage.STATIC_WRITE)) {
vertexBuffer.bind();
vertexBuffer.upload(builtBuffer);
vertexBuffer.draw(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), RenderSystem.getShader());
builtBuffer.close();
}
} catch (Exception e) {
// Ignored
}
this.renderScrollBar(bufferBuilder, tessellator);

RenderSystem.disableBlend();
super.renderList(context, mouseX, mouseY, delta);
}

public void renderScrollBar(BufferBuilder bufferBuilder, Tessellator tessellator) {
BuiltBuffer builtBuffer;
int scrollbarStartX = this.getScrollbarX();
int scrollbarEndX = scrollbarStartX + 6;
int maxScroll = this.getMaxScrollY();
if (maxScroll > 0) {
int p = (int) ((float) ((this.getBottom() - this.getY()) * (this.getBottom() - this.getY())) / (float) this.getContentsHeightWithPadding());
p = MathHelper.clamp(p, 32, this.getBottom() - this.getY() - 8);
int q = (int) this.getScrollY() * (this.getBottom() - this.getY() - p) / maxScroll + this.getY();
if (q < this.getY()) {
q = this.getY();
}
@Override
protected void drawScrollbar(DrawContext context) {
int startX = this.getX();
int endX = this.overflows() ? this.getScrollbarX() : this.getRight();

bufferBuilder = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
bufferBuilder.vertex(scrollbarStartX, this.getBottom(), 0.0F).color(0, 0, 0, 255);
bufferBuilder.vertex(scrollbarEndX, this.getBottom(), 0.0F).color(0, 0, 0, 255);
bufferBuilder.vertex(scrollbarEndX, this.getY(), 0.0F).color(0, 0, 0, 255);
bufferBuilder.vertex(scrollbarStartX, this.getY(), 0.0F).color(0, 0, 0, 255);
bufferBuilder.vertex(scrollbarStartX, q + p, 0.0F).color(128, 128, 128, 255);
bufferBuilder.vertex(scrollbarEndX, q + p, 0.0F).color(128, 128, 128, 255);
bufferBuilder.vertex(scrollbarEndX, q, 0.0F).color(128, 128, 128, 255);
bufferBuilder.vertex(scrollbarStartX, q, 0.0F).color(128, 128, 128, 255);
bufferBuilder.vertex(scrollbarStartX, q + p - 1, 0.0F).color(192, 192, 192, 255);
bufferBuilder.vertex(scrollbarEndX - 1, q + p - 1, 0.0F).color(192, 192, 192, 255);
bufferBuilder.vertex(scrollbarEndX - 1, q, 0.0F).color(192, 192, 192, 255);
bufferBuilder.vertex(scrollbarStartX, q, 0.0F).color(192, 192, 192, 255);
try {
builtBuffer = bufferBuilder.end();

try (VertexBuffer vertexBuffer = new VertexBuffer(GlUsage.STATIC_WRITE)) {
vertexBuffer.bind();
vertexBuffer.upload(builtBuffer);
vertexBuffer.draw(RenderSystem.getModelViewMatrix(), RenderSystem.getProjectionMatrix(), RenderSystem.getShader());
builtBuffer.close();
}
} catch (Exception e) {
// Ignored
}
}
context.fillGradient(startX, this.getY(), endX, this.getY() + SHADOW_HEIGHT, SHADOW_Z, BLACK, TRANSPARENT);
context.fillGradient(startX, this.getBottom() - SHADOW_HEIGHT, endX, this.getBottom(), SHADOW_Z, TRANSPARENT, BLACK);

super.drawScrollbar(context);
}

private Text creditsRoleText(String roleName) {
Expand Down Expand Up @@ -420,7 +312,7 @@ public DescriptionEntry setUpdateTextEntry() {

@Override
public void render(
DrawContext DrawContext,
DrawContext context,
int index,
int y,
int x,
Expand All @@ -432,10 +324,10 @@ public void render(
float delta
) {
if (updateTextEntry) {
UpdateAvailableBadge.renderBadge(DrawContext, x + indent, y);
UpdateAvailableBadge.renderBadge(context, x + indent, y);
x += 11;
}
DrawContext.drawTextWithShadow(textRenderer, text, x + indent, y, 0xAAAAAA);
context.drawTextWithShadow(textRenderer, text, x + indent, y, 0xAAAAAA);
}

@Override
Expand Down
Loading