Skip to content

Commit 5a56ee8

Browse files
committed
Backport rendering changes from 1.21.6.
- Improves style match with vanilla - Fixes mod selection box (resolves #843)
1 parent e7512ae commit 5a56ee8

5 files changed

Lines changed: 65 additions & 170 deletions

File tree

src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.terraformersmc.modmenu.gui;
22

33
import com.google.common.base.Joiner;
4-
import com.mojang.blaze3d.opengl.GlStateManager;
5-
import com.mojang.blaze3d.systems.RenderSystem;
64
import com.terraformersmc.modmenu.ModMenu;
75
import com.terraformersmc.modmenu.config.ModMenuConfig;
86
import com.terraformersmc.modmenu.config.ModMenuConfigManager;
@@ -295,10 +293,9 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
295293

296294
this.modList.render(drawContext, mouseX, mouseY, delta);
297295
this.searchBox.render(drawContext, mouseX, mouseY, delta);
298-
GlStateManager._disableBlend();
299-
drawContext.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 16777215);
296+
drawContext.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 0xFFFFFFFF);
300297
assert client != null;
301-
int grayColor = 11184810;
298+
int grayColor = 0xFFAAAAAA;
302299
if (!ModMenuConfig.DISABLE_DRAG_AND_DROP.getValue()) {
303300
drawContext.drawCenteredTextWithShadow(
304301
this.textRenderer,
@@ -327,7 +324,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
327324
fullModCount.asOrderedText(),
328325
this.searchBoxX,
329326
52,
330-
0xFFFFFF,
327+
0xFFFFFFFF,
331328
true
332329
);
333330
} else {
@@ -336,15 +333,15 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
336333
computeModCountText(false, false).asOrderedText(),
337334
this.searchBoxX,
338335
46,
339-
0xFFFFFF,
336+
0xFFFFFFFF,
340337
true
341338
);
342339
drawContext.drawText(
343340
textRenderer,
344341
computeLibraryCountText(false).asOrderedText(),
345342
this.searchBoxX,
346343
57,
347-
0xFFFFFF,
344+
0xFFFFFFFF,
348345
true
349346
);
350347
}
@@ -355,7 +352,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
355352
fullModCount.asOrderedText(),
356353
this.searchBoxX,
357354
52,
358-
0xFFFFFF,
355+
0xFFFFFFFF,
359356
true
360357
);
361358
} else {
@@ -364,15 +361,15 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
364361
computeModCountText(false, false).asOrderedText(),
365362
this.searchBoxX,
366363
46,
367-
0xFFFFFF,
364+
0xFFFFFFFF,
368365
true
369366
);
370367
drawContext.drawText(
371368
textRenderer,
372369
computeLibraryCountText(false).asOrderedText(),
373370
this.searchBoxX,
374371
57,
375-
0xFFFFFF,
372+
0xFFFFFFFF,
376373
true
377374
);
378375
}
@@ -387,10 +384,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
387384
DrawingUtil.drawRandomVersionBackground(mod, drawContext, x, RIGHT_PANE_Y, 32, 32);
388385
}
389386

390-
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
391-
GlStateManager._enableBlend();
392-
drawContext.drawTexture(RenderLayer::getGuiTextured, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32);
393-
GlStateManager._disableBlend();
387+
drawContext.drawTexture(RenderLayer::getGuiTextured, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32, 0xFFFFFFFF);
394388
int lineSpacing = textRenderer.fontHeight + 1;
395389
int imageOffset = 36;
396390
Text name = Text.literal(mod.getTranslatedName());
@@ -406,7 +400,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
406400
Language.getInstance().reorder(trimmedName),
407401
x + imageOffset,
408402
RIGHT_PANE_Y + 1,
409-
0xFFFFFF,
403+
0xFFFFFFFF,
410404
true
411405
);
412406

@@ -437,7 +431,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
437431
mod.getPrefixedVersion(),
438432
x + imageOffset,
439433
RIGHT_PANE_Y + 2 + lineSpacing,
440-
0x808080,
434+
0xFFAAAAAA,
441435
true
442436
);
443437
}
@@ -458,7 +452,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta)
458452
RIGHT_PANE_Y + 2 + lineSpacing * 2,
459453
this.paneWidth - imageOffset - 4,
460454
1,
461-
0x808080
455+
0xFFAAAAAA
462456
);
463457
}
464458
}
@@ -556,10 +550,6 @@ public void updateSelectedEntry(ModListEntry entry) {
556550
this.issuesButton.active = isMinecraft || selected.getMod().getIssueTracker() != null;
557551
}
558552

559-
public double getScrollPercent() {
560-
return scrollPercent;
561-
}
562-
563553
public void updateScrollPercent(double scrollPercent) {
564554
this.scrollPercent = scrollPercent;
565555
}

src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java

Lines changed: 23 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
11
package com.terraformersmc.modmenu.gui.widget;
22

3-
import com.mojang.blaze3d.buffers.BufferType;
4-
import com.mojang.blaze3d.buffers.BufferUsage;
5-
import com.mojang.blaze3d.buffers.GpuBuffer;
6-
import com.mojang.blaze3d.pipeline.RenderPipeline;
7-
import com.mojang.blaze3d.systems.RenderPass;
8-
import com.mojang.blaze3d.systems.RenderSystem;
9-
import com.mojang.blaze3d.vertex.VertexFormat;
103
import com.terraformersmc.modmenu.api.UpdateInfo;
114
import com.terraformersmc.modmenu.config.ModMenuConfig;
125
import com.terraformersmc.modmenu.gui.ModsScreen;
136
import com.terraformersmc.modmenu.util.mod.Mod;
147
import net.minecraft.client.MinecraftClient;
158
import net.minecraft.client.font.TextRenderer;
16-
import net.minecraft.client.gl.*;
179
import net.minecraft.client.gui.DrawContext;
1810
import net.minecraft.client.gui.Element;
1911
import net.minecraft.client.gui.Selectable;
@@ -23,14 +15,10 @@
2315
import net.minecraft.client.gui.screen.option.CreditsAndAttributionScreen;
2416
import net.minecraft.client.gui.widget.ElementListWidget;
2517
import net.minecraft.client.gui.widget.EntryListWidget;
26-
import net.minecraft.client.render.*;
27-
import net.minecraft.client.util.BufferAllocator;
2818
import net.minecraft.text.OrderedText;
2919
import net.minecraft.text.Text;
3020
import net.minecraft.util.Formatting;
3121
import net.minecraft.util.Util;
32-
import net.minecraft.util.math.ColorHelper;
33-
import net.minecraft.util.math.MathHelper;
3422

3523
import java.util.*;
3624

@@ -62,12 +50,12 @@ public DescriptionListWidget(
6250
this.parent = parent;
6351
this.textRenderer = client.textRenderer;
6452

65-
if(copyFrom != null) {
53+
if (copyFrom != null) {
6654
updateSelectedModIfRequired(copyFrom.selectedMod);
6755
setScrollY(copyFrom.getScrollY());
6856
}
6957

70-
if(parent.getSelectedEntry() != null) {
58+
if (parent.getSelectedEntry() != null) {
7159
updateSelectedModIfRequired(parent.getSelectedEntry().getMod());
7260
}
7361
}
@@ -89,7 +77,7 @@ protected int getScrollbarX() {
8977

9078
@Override
9179
public void appendClickableNarrations(NarrationMessageBuilder builder) {
92-
if(selectedMod != null) {
80+
if (selectedMod != null) {
9381
builder.put(
9482
NarrationPart.TITLE,
9583
selectedMod.getTranslatedName() + " " + selectedMod.getPrefixedVersion());
@@ -133,7 +121,6 @@ private void rebuildUI() {
133121
children().add(new DescriptionEntry(line, 8));
134122
}
135123

136-
137124
Text updateMessage = updateInfo.getUpdateMessage();
138125
String downloadLink = updateInfo.getDownloadLink();
139126
if (updateMessage == null) {
@@ -145,14 +132,15 @@ private void rebuildUI() {
145132
.formatted(Formatting.UNDERLINE);
146133
}
147134
}
135+
148136
for (OrderedText line : textRenderer.wrapLines(updateMessage, wrapWidth - 16)) {
149137
if (downloadLink != null) {
150138
children().add(new LinkEntry(line, downloadLink, 8));
151139
} else {
152140
children().add(new DescriptionEntry(line, 8));
153-
}
154141
}
155142
}
143+
}
156144

157145
if (mod.getChildHasUpdate()) {
158146
children().add(emptyEntry);
@@ -281,69 +269,6 @@ public void renderList(DrawContext drawContext, int mouseX, int mouseY, float de
281269
this.enableScissor(drawContext);
282270
super.renderList(drawContext, mouseX, mouseY, delta);
283271
drawContext.disableScissor();
284-
285-
RenderPipeline pipeline = RenderPipelines.GUI;
286-
try (BufferAllocator alloc = new BufferAllocator(pipeline.getVertexFormat().getVertexSize() * 4)) {
287-
BufferBuilder bufferBuilder = new BufferBuilder(alloc, pipeline.getVertexFormatMode(), pipeline.getVertexFormat());
288-
final int black = ColorHelper.fullAlpha(0);
289-
bufferBuilder.vertex(this.getX(), (this.getY() + 4), 0.0F).color(0);
290-
bufferBuilder.vertex(this.getRight(), (this.getY() + 4), 0.0F).color(0);
291-
bufferBuilder.vertex(this.getRight(), this.getY(), 0.0F).color(black);
292-
bufferBuilder.vertex(this.getX(), this.getY(), 0.0F).color(black);
293-
bufferBuilder.vertex(this.getX(), this.getBottom(), 0.0F).color(black);
294-
bufferBuilder.vertex(this.getRight(), this.getBottom(), 0.0F).color(black);
295-
bufferBuilder.vertex(this.getRight(), (this.getBottom() - 4), 0.0F).color(0);
296-
bufferBuilder.vertex(this.getX(), (this.getBottom() - 4), 0.0F).color(0);
297-
this.renderScrollBar(bufferBuilder);
298-
try (BuiltBuffer builtBuffer = bufferBuilder.endNullable()) {
299-
if (builtBuffer == null) {
300-
alloc.close();
301-
return;
302-
}
303-
Framebuffer framebuffer = MinecraftClient.getInstance().getFramebuffer();
304-
RenderSystem.ShapeIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(pipeline.getVertexFormatMode());
305-
VertexFormat.IndexType indexType = autoStorageIndexBuffer.getIndexType();
306-
GpuBuffer vertexBuffer = RenderSystem.getDevice().createBuffer(() -> "Description List", BufferType.VERTICES, BufferUsage.DYNAMIC_WRITE, builtBuffer.getBuffer().remaining());
307-
GpuBuffer indexBuffer = autoStorageIndexBuffer.getIndexBuffer(builtBuffer.getDrawParameters().indexCount());
308-
RenderSystem.getDevice().createCommandEncoder().writeToBuffer(vertexBuffer, builtBuffer.getBuffer(), 0);
309-
try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(framebuffer.getColorAttachment(), OptionalInt.empty(), framebuffer.getDepthAttachment(), OptionalDouble.empty())) {
310-
renderPass.setPipeline(pipeline);
311-
renderPass.setVertexBuffer(0, vertexBuffer);
312-
renderPass.setIndexBuffer(indexBuffer, indexType);
313-
renderPass.drawIndexed(0, builtBuffer.getDrawParameters().indexCount());
314-
}
315-
}
316-
}
317-
}
318-
319-
public void renderScrollBar(BufferBuilder bufferBuilder) {
320-
int scrollbarStartX = this.getScrollbarX();
321-
int scrollbarEndX = scrollbarStartX + 6;
322-
int maxScroll = this.getMaxScrollY();
323-
if (maxScroll > 0) {
324-
int p = (int) ((float) ((this.getBottom() - this.getY()) * (this.getBottom() - this.getY())) / (float) this.getContentsHeightWithPadding());
325-
p = MathHelper.clamp(p, 32, this.getBottom() - this.getY() - 8);
326-
int q = (int) this.getScrollY() * (this.getBottom() - this.getY() - p) / maxScroll + this.getY();
327-
if (q < this.getY()) {
328-
q = this.getY();
329-
}
330-
331-
final int black = ColorHelper.fullAlpha(0);
332-
final int firstColor = ColorHelper.fromFloats(255, 128, 128, 128);
333-
final int lastColor = ColorHelper.fromFloats(255, 192, 192, 192);
334-
bufferBuilder.vertex(scrollbarStartX, this.getBottom(), 0.0F).color(black);
335-
bufferBuilder.vertex(scrollbarEndX, this.getBottom(), 0.0F).color(black);
336-
bufferBuilder.vertex(scrollbarEndX, this.getY(), 0.0F).color(black);
337-
bufferBuilder.vertex(scrollbarStartX, this.getY(), 0.0F).color(black);
338-
bufferBuilder.vertex(scrollbarStartX, q + p, 0.0F).color(firstColor);
339-
bufferBuilder.vertex(scrollbarEndX, q + p, 0.0F).color(firstColor);
340-
bufferBuilder.vertex(scrollbarEndX, q, 0.0F).color(firstColor);
341-
bufferBuilder.vertex(scrollbarStartX, q, 0.0F).color(firstColor);
342-
bufferBuilder.vertex(scrollbarStartX, q + p - 1, 0.0F).color(lastColor);
343-
bufferBuilder.vertex(scrollbarEndX - 1, q + p - 1, 0.0F).color(lastColor);
344-
bufferBuilder.vertex(scrollbarEndX - 1, q, 0.0F).color(lastColor);
345-
bufferBuilder.vertex(scrollbarStartX, q, 0.0F).color(lastColor);
346-
}
347272
}
348273

349274
private Text creditsRoleText(String roleName) {
@@ -393,7 +318,24 @@ public void render(
393318
x += 11;
394319
}
395320

396-
drawContext.drawTextWithShadow(textRenderer, text, x + indent, y, 0xAAAAAA);
321+
drawContext.drawTextWithShadow(textRenderer, text, x + indent, y, 0xFFAAAAAA);
322+
}
323+
324+
@Override
325+
public boolean isMouseOver(double mouseX, double mouseY) {
326+
if (!super.isMouseOver(mouseX, mouseY)) {
327+
return false;
328+
}
329+
330+
int width = DescriptionListWidget.this.textRenderer.getWidth(text);
331+
332+
if (updateTextEntry) {
333+
width += 11;
334+
}
335+
336+
double relativeX = mouseX - DescriptionListWidget.this.getRowLeft() - indent;
337+
338+
return relativeX >= 0 && relativeX < width;
397339
}
398340

399341
@Override

0 commit comments

Comments
 (0)