11package 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 ;
103import com .terraformersmc .modmenu .api .UpdateInfo ;
114import com .terraformersmc .modmenu .config .ModMenuConfig ;
125import com .terraformersmc .modmenu .gui .ModsScreen ;
136import com .terraformersmc .modmenu .util .mod .Mod ;
147import net .minecraft .client .MinecraftClient ;
158import net .minecraft .client .font .TextRenderer ;
16- import net .minecraft .client .gl .*;
179import net .minecraft .client .gui .DrawContext ;
1810import net .minecraft .client .gui .Element ;
1911import net .minecraft .client .gui .Selectable ;
2315import net .minecraft .client .gui .screen .option .CreditsAndAttributionScreen ;
2416import net .minecraft .client .gui .widget .ElementListWidget ;
2517import net .minecraft .client .gui .widget .EntryListWidget ;
26- import net .minecraft .client .render .*;
27- import net .minecraft .client .util .BufferAllocator ;
2818import net .minecraft .text .OrderedText ;
2919import net .minecraft .text .Text ;
3020import net .minecraft .util .Formatting ;
3121import net .minecraft .util .Util ;
32- import net .minecraft .util .math .ColorHelper ;
33- import net .minecraft .util .math .MathHelper ;
3422
3523import 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