diff --git a/gradle.properties b/gradle.properties index f14d043b..4285f4a9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,14 +1,15 @@ -org.gradle.jvmargs=-Xmx2G +org.gradle.jvmargs=-Xmx4G +org.gradle.parallel=true maven_group=com.terraformersmc archive_name=modmenu -minecraft_version=1.21.5-rc1 -yarn_mappings=1.21.5-rc1+build.2 -loader_version=0.16.10 -fabric_version=0.119.2+1.21.5 -text_placeholder_api_version=2.6.0+1.21.5 -quilt_loader_version=0.28.1-beta.1 +minecraft_version=1.21.6-rc1 +yarn_mappings=1.21.6-rc1+build.1 +loader_version=0.16.14 +fabric_version=0.127.0+1.21.6 +text_placeholder_api_version=2.7.0+1.21.6 +quilt_loader_version=0.29.0-beta.3 # Project Metadata project_name=Mod Menu @@ -21,14 +22,14 @@ default_release_type=stable # Modrinth Metadata modrinth_slug=modmenu modrinth_id=mOgUt4GM -modrinth_game_versions=1.21.5-rc1, 1.21.5-rc2, 1.21.5 +modrinth_game_versions=1.21.6-rc1 modrinth_mod_loaders=fabric, quilt modrinth_required_dependencies=fabric-api, placeholder-api # CurseForge Metadata curseforge_slug=modmenu curseforge_id=308702 -curseforge_game_versions=1.21.5-Snapshot, 1.21.5, Fabric, Quilt +curseforge_game_versions=1.21.6-snapshot, Fabric, Quilt curseforge_required_dependencies=fabric-api, text-placeholder-api curseforge_optional_dependencies= diff --git a/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java b/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java index 96155d06..118d99a7 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/ModsScreen.java @@ -1,8 +1,6 @@ package com.terraformersmc.modmenu.gui; import com.google.common.base.Joiner; -import com.mojang.blaze3d.opengl.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.config.ModMenuConfigManager; @@ -17,6 +15,7 @@ import com.terraformersmc.modmenu.util.mod.ModBadgeRenderer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.SharedConstants; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ConfirmLinkScreen; import net.minecraft.client.gui.screen.ConfirmScreen; @@ -25,7 +24,6 @@ import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.render.RenderLayer; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.toast.SystemToast; import net.minecraft.screen.ScreenTexts; @@ -203,7 +201,7 @@ protected void init() { final Mod mod = Objects.requireNonNull(selected).getMod(); boolean isMinecraft = selected.getMod().getId().equals("minecraft"); if (isMinecraft) { - var url = SharedConstants.getGameVersion().isStable() ? Urls.JAVA_FEEDBACK : Urls.SNAPSHOT_FEEDBACK; + var url = SharedConstants.getGameVersion().stable() ? Urls.JAVA_FEEDBACK : Urls.SNAPSHOT_FEEDBACK; ConfirmLinkScreen.open(this, url, true); } else { var url = mod.getWebsite(); @@ -295,10 +293,9 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) this.modList.render(drawContext, mouseX, mouseY, delta); this.searchBox.render(drawContext, mouseX, mouseY, delta); - GlStateManager._disableBlend(); - drawContext.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 16777215); + drawContext.drawCenteredTextWithShadow(this.textRenderer, this.title, this.modList.getWidth() / 2, 8, 0xFFFFFFFF); assert client != null; - int grayColor = 11184810; + int grayColor = 0xFFAAAAAA; if (!ModMenuConfig.DISABLE_DRAG_AND_DROP.getValue()) { drawContext.drawCenteredTextWithShadow( this.textRenderer, @@ -327,7 +324,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) fullModCount.asOrderedText(), this.searchBoxX, 52, - 0xFFFFFF, + 0xFFFFFFFF, true ); } else { @@ -336,7 +333,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) computeModCountText(false, false).asOrderedText(), this.searchBoxX, 46, - 0xFFFFFF, + 0xFFFFFFFF, true ); drawContext.drawText( @@ -344,7 +341,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) computeLibraryCountText(false).asOrderedText(), this.searchBoxX, 57, - 0xFFFFFF, + 0xFFFFFFFF, true ); } @@ -355,7 +352,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) fullModCount.asOrderedText(), this.searchBoxX, 52, - 0xFFFFFF, + 0xFFFFFFFF, true ); } else { @@ -364,7 +361,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) computeModCountText(false, false).asOrderedText(), this.searchBoxX, 46, - 0xFFFFFF, + 0xFFFFFFFF, true ); drawContext.drawText( @@ -372,7 +369,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) computeLibraryCountText(false).asOrderedText(), this.searchBoxX, 57, - 0xFFFFFF, + 0xFFFFFFFF, true ); } @@ -387,10 +384,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) DrawingUtil.drawRandomVersionBackground(mod, drawContext, x, RIGHT_PANE_Y, 32, 32); } - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager._enableBlend(); - drawContext.drawTexture(RenderLayer::getGuiTextured, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32); - GlStateManager._disableBlend(); + drawContext.drawTexture(RenderPipelines.GUI_TEXTURED, this.selected.getIconTexture(), x, RIGHT_PANE_Y, 0.0F, 0.0F, 32, 32, 32, 32, 0xFFFFFFFF); int lineSpacing = textRenderer.fontHeight + 1; int imageOffset = 36; Text name = Text.literal(mod.getTranslatedName()); @@ -406,14 +400,14 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) Language.getInstance().reorder(trimmedName), x + imageOffset, RIGHT_PANE_Y + 1, - 0xFFFFFF, + 0xFFFFFFFF, true ); if (mouseX > x + imageOffset && mouseY > RIGHT_PANE_Y + 1 && mouseY < RIGHT_PANE_Y + 1 + textRenderer.fontHeight && mouseX < x + imageOffset + textRenderer.getWidth(trimmedName)) { - this.setTooltip(ModMenuScreenTexts.modIdTooltip(mod.getId())); + drawContext.drawTooltip(ModMenuScreenTexts.modIdTooltip(mod.getId()), mouseX, mouseY); } if (this.init || modBadgeRenderer == null || modBadgeRenderer.getMod() != mod) { @@ -437,7 +431,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) mod.getPrefixedVersion(), x + imageOffset, RIGHT_PANE_Y + 2 + lineSpacing, - 0x808080, + 0xFFAAAAAA, true ); } @@ -458,7 +452,7 @@ public void render(DrawContext drawContext, int mouseX, int mouseY, float delta) RIGHT_PANE_Y + 2 + lineSpacing * 2, this.paneWidth - imageOffset - 4, 1, - 0x808080 + 0xFFAAAAAA ); } } diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java index c2e9aa9a..d9cc9a04 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/DescriptionListWidget.java @@ -1,7 +1,5 @@ package com.terraformersmc.modmenu.gui.widget; -import com.mojang.blaze3d.buffers.BufferType; -import com.mojang.blaze3d.buffers.BufferUsage; import com.mojang.blaze3d.buffers.GpuBuffer; import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.systems.RenderPass; @@ -13,7 +11,8 @@ import com.terraformersmc.modmenu.util.mod.Mod; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gl.*; +import net.minecraft.client.gl.Framebuffer; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.Element; import net.minecraft.client.gui.Selectable; @@ -23,7 +22,8 @@ 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.client.render.BufferBuilder; +import net.minecraft.client.render.BuiltBuffer; import net.minecraft.client.util.BufferAllocator; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; @@ -133,7 +133,6 @@ private void rebuildUI() { children().add(new DescriptionEntry(line, 8)); } - Text updateMessage = updateInfo.getUpdateMessage(); String downloadLink = updateInfo.getDownloadLink(); if (updateMessage == null) { @@ -145,14 +144,15 @@ private void rebuildUI() { .formatted(Formatting.UNDERLINE); } } + for (OrderedText line : textRenderer.wrapLines(updateMessage, wrapWidth - 16)) { if (downloadLink != null) { children().add(new LinkEntry(line, downloadLink, 8)); } else { children().add(new DescriptionEntry(line, 8)); -} } } + } if (mod.getChildHasUpdate()) { children().add(emptyEntry); @@ -282,38 +282,38 @@ public void renderList(DrawContext drawContext, int mouseX, int mouseY, float de super.renderList(drawContext, mouseX, mouseY, delta); drawContext.disableScissor(); - RenderPipeline pipeline = RenderPipelines.GUI; - try (BufferAllocator alloc = new BufferAllocator(pipeline.getVertexFormat().getVertexSize() * 4)) { - BufferBuilder bufferBuilder = new BufferBuilder(alloc, pipeline.getVertexFormatMode(), pipeline.getVertexFormat()); - final int black = ColorHelper.fullAlpha(0); - bufferBuilder.vertex(this.getX(), (this.getY() + 4), 0.0F).color(0); - bufferBuilder.vertex(this.getRight(), (this.getY() + 4), 0.0F).color(0); - bufferBuilder.vertex(this.getRight(), this.getY(), 0.0F).color(black); - bufferBuilder.vertex(this.getX(), this.getY(), 0.0F).color(black); - bufferBuilder.vertex(this.getX(), this.getBottom(), 0.0F).color(black); - bufferBuilder.vertex(this.getRight(), this.getBottom(), 0.0F).color(black); - bufferBuilder.vertex(this.getRight(), (this.getBottom() - 4), 0.0F).color(0); - bufferBuilder.vertex(this.getX(), (this.getBottom() - 4), 0.0F).color(0); - this.renderScrollBar(bufferBuilder); - try (BuiltBuffer builtBuffer = bufferBuilder.endNullable()) { - if (builtBuffer == null) { - alloc.close(); - return; - } - Framebuffer framebuffer = MinecraftClient.getInstance().getFramebuffer(); - RenderSystem.ShapeIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(pipeline.getVertexFormatMode()); - VertexFormat.IndexType indexType = autoStorageIndexBuffer.getIndexType(); - GpuBuffer vertexBuffer = RenderSystem.getDevice().createBuffer(() -> "Description List", BufferType.VERTICES, BufferUsage.DYNAMIC_WRITE, builtBuffer.getBuffer().remaining()); - GpuBuffer indexBuffer = autoStorageIndexBuffer.getIndexBuffer(builtBuffer.getDrawParameters().indexCount()); - RenderSystem.getDevice().createCommandEncoder().writeToBuffer(vertexBuffer, builtBuffer.getBuffer(), 0); - try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(framebuffer.getColorAttachment(), OptionalInt.empty(), framebuffer.getDepthAttachment(), OptionalDouble.empty())) { - renderPass.setPipeline(pipeline); - renderPass.setVertexBuffer(0, vertexBuffer); - renderPass.setIndexBuffer(indexBuffer, indexType); - renderPass.drawIndexed(0, builtBuffer.getDrawParameters().indexCount()); - } - } - } + RenderPipeline pipeline = RenderPipelines.GUI; + try (BufferAllocator alloc = new BufferAllocator(pipeline.getVertexFormat().getVertexSize() * 4)) { + BufferBuilder bufferBuilder = new BufferBuilder(alloc, pipeline.getVertexFormatMode(), pipeline.getVertexFormat()); + final int black = 0xFF000000; + bufferBuilder.vertex(this.getX(), (this.getY() + 4), 0.0F).color(0); + bufferBuilder.vertex(this.getRight(), (this.getY() + 4), 0.0F).color(0); + bufferBuilder.vertex(this.getRight(), this.getY(), 0.0F).color(black); + bufferBuilder.vertex(this.getX(), this.getY(), 0.0F).color(black); + bufferBuilder.vertex(this.getX(), this.getBottom(), 0.0F).color(black); + bufferBuilder.vertex(this.getRight(), this.getBottom(), 0.0F).color(black); + bufferBuilder.vertex(this.getRight(), (this.getBottom() - 4), 0.0F).color(0); + bufferBuilder.vertex(this.getX(), (this.getBottom() - 4), 0.0F).color(0); + this.renderScrollBar(bufferBuilder); + try (BuiltBuffer builtBuffer = bufferBuilder.endNullable()) { + if (builtBuffer == null) { + alloc.close(); + return; + } + Framebuffer framebuffer = MinecraftClient.getInstance().getFramebuffer(); + RenderSystem.ShapeIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(pipeline.getVertexFormatMode()); + VertexFormat.IndexType indexType = autoStorageIndexBuffer.getIndexType(); + GpuBuffer vertexBuffer = RenderSystem.getDevice().createBuffer(() -> "Description List", GpuBuffer.USAGE_COPY_DST, builtBuffer.getBuffer().remaining()); + GpuBuffer indexBuffer = autoStorageIndexBuffer.getIndexBuffer(builtBuffer.getDrawParameters().indexCount()); + RenderSystem.getDevice().createCommandEncoder().writeToBuffer(vertexBuffer.slice(), builtBuffer.getBuffer()); + try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "Description List", framebuffer.getColorAttachmentView(), OptionalInt.empty(), framebuffer.getDepthAttachmentView(), OptionalDouble.empty())) { + renderPass.setPipeline(pipeline); + renderPass.setVertexBuffer(0, vertexBuffer); + renderPass.setIndexBuffer(indexBuffer, indexType); + renderPass.drawIndexed(0, 0, builtBuffer.getDrawParameters().indexCount(), 1); + } + } + } } public void renderScrollBar(BufferBuilder bufferBuilder) { @@ -328,7 +328,7 @@ public void renderScrollBar(BufferBuilder bufferBuilder) { q = this.getY(); } - final int black = ColorHelper.fullAlpha(0); + final int black = 0xFF000000; final int firstColor = ColorHelper.fromFloats(255, 128, 128, 128); final int lastColor = ColorHelper.fromFloats(255, 192, 192, 192); bufferBuilder.vertex(scrollbarStartX, this.getBottom(), 0.0F).color(black); @@ -393,7 +393,7 @@ public void render( x += 11; } - drawContext.drawTextWithShadow(textRenderer, text, x + indent, y, 0xAAAAAA); + drawContext.drawTextWithShadow(textRenderer, text, x + indent, y, 0xFFAAAAAA); } @Override diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/LegacyTexturedButtonWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/LegacyTexturedButtonWidget.java index 5d8198a1..76ed59ae 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/LegacyTexturedButtonWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/LegacyTexturedButtonWidget.java @@ -1,9 +1,9 @@ package com.terraformersmc.modmenu.gui.widget; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.gui.widget.TexturedButtonWidget; -import net.minecraft.client.render.RenderLayer; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -53,7 +53,7 @@ public void renderWidget(DrawContext context, int mouseX, int mouseY, float delt } context.drawTexture( - RenderLayer::getGuiTextured, + RenderPipelines.GUI_TEXTURED, this.texture, this.getX(), this.getY(), diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java index 97cd4d0d..d775b676 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/ModListWidget.java @@ -1,12 +1,5 @@ package com.terraformersmc.modmenu.gui.widget; -import com.mojang.blaze3d.buffers.BufferType; -import com.mojang.blaze3d.buffers.BufferUsage; -import com.mojang.blaze3d.buffers.GpuBuffer; -import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.systems.RenderPass; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.VertexFormat; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.gui.ModsScreen; @@ -18,16 +11,12 @@ import com.terraformersmc.modmenu.util.mod.ModSearch; import com.terraformersmc.modmenu.util.mod.fabric.FabricIconHandler; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gl.*; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.render.*; -import net.minecraft.client.util.BufferAllocator; import net.minecraft.text.Text; -import net.minecraft.util.math.ColorHelper; +import net.minecraft.util.Colors; import net.minecraft.util.math.MathHelper; import org.jetbrains.annotations.Nullable; -import org.joml.Matrix4f; import org.lwjgl.glfw.GLFW; import java.util.*; @@ -80,7 +69,7 @@ public void select(ModListEntry entry) { this.setSelected(entry); if (entry != null) { Mod mod = entry.getMod(); - this.client.getNarratorManager().narrate(Text.translatable("narrator.select", mod.getTranslatedName()).getString()); + this.client.getNarratorManager().narrate(Text.translatable("narrator.select", mod.getTranslatedName())); } } @@ -131,7 +120,7 @@ protected ModListEntry remove(int index) { public void finalizeInit() { reloadFilters(); - if(restoreScrollY != null) { + if (restoreScrollY != null) { setScrollY(restoreScrollY); restoreScrollY = null; } @@ -220,61 +209,34 @@ private void filter(String searchTerm, boolean refresh, boolean search) { @Override protected void renderList(DrawContext drawContext, int mouseX, int mouseY, float delta) { + int entryLeft = this.getRowLeft(); + int entryWidth = this.getRowWidth(); + int entryHeight = this.itemHeight - 4; int entryCount = this.getEntryCount(); for (int index = 0; index < entryCount; ++index) { int entryTop = this.getRowTop(index) + 2; - int entryBottom = this.getRowTop(index) + this.itemHeight; + int entryBottom = this.getRowBottom(index); if (entryBottom >= this.getY() && entryTop <= this.getBottom()) { - int entryHeight = this.itemHeight - 4; ModListEntry entry = this.getEntry(index); - int rowWidth = this.getRowWidth(); - int entryLeft; if (this.isSelectedEntry(index)) { - Matrix4f matrix = drawContext.getMatrices().peek().getPositionMatrix(); - entryLeft = getRowLeft() - 2 + entry.getXOffset(); - int selectionRight = this.getRowLeft() + rowWidth + 2; - float float_2 = this.isFocused() ? 1.0F : 0.5F; - final int topColor = ColorHelper.fromFloats(1.0F, float_2, float_2, float_2); - final int bottomColor = ColorHelper.fromFloats(1.0F, 0.0F, 0.0F, 0.0F); - RenderPipeline pipeline = RenderPipelines.GUI; - try (BufferAllocator alloc = new BufferAllocator(pipeline.getVertexFormat().getVertexSize() * 4)) { - BufferBuilder bufferBuilder = new BufferBuilder(alloc, pipeline.getVertexFormatMode(), pipeline.getVertexFormat()); - bufferBuilder.vertex(matrix, entryLeft, entryTop + entryHeight + 2, 0.0F).color(topColor); - bufferBuilder.vertex(matrix, selectionRight, entryTop + entryHeight + 2, 0.0F).color(topColor); - bufferBuilder.vertex(matrix, selectionRight, entryTop - 2, 0.0F).color(topColor); - bufferBuilder.vertex(matrix, entryLeft, entryTop - 2, 0.0F).color(topColor); - bufferBuilder.vertex(matrix, entryLeft + 1, entryTop + entryHeight + 1, 0.0F).color(bottomColor); - bufferBuilder.vertex(matrix, selectionRight - 1, entryTop + entryHeight + 1, 0.0F).color(bottomColor); - bufferBuilder.vertex(matrix, selectionRight - 1, entryTop - 1, 0.0F).color(bottomColor); - bufferBuilder.vertex(matrix, entryLeft + 1, entryTop - 1, 0.0F).color(bottomColor); - try (BuiltBuffer builtBuffer = bufferBuilder.endNullable()) { - if (builtBuffer == null) { - alloc.close(); - return; - } - Framebuffer framebuffer = MinecraftClient.getInstance().getFramebuffer(); - RenderSystem.ShapeIndexBuffer autoStorageIndexBuffer = RenderSystem.getSequentialBuffer(pipeline.getVertexFormatMode()); - VertexFormat.IndexType indexType = autoStorageIndexBuffer.getIndexType(); - GpuBuffer indexBuffer = autoStorageIndexBuffer.getIndexBuffer(builtBuffer.getDrawParameters().indexCount()); - GpuBuffer vertexBuffer = RenderSystem.getDevice().createBuffer(() -> "Mod List", BufferType.VERTICES, BufferUsage.DYNAMIC_WRITE, builtBuffer.getBuffer().remaining()); - RenderSystem.getDevice().createCommandEncoder().writeToBuffer(vertexBuffer, builtBuffer.getBuffer(), 0); - try (RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(framebuffer.getColorAttachment(), OptionalInt.empty(), framebuffer.getDepthAttachment(), OptionalDouble.empty())) { - renderPass.setPipeline(pipeline); - renderPass.setVertexBuffer(0, vertexBuffer); - renderPass.setIndexBuffer(indexBuffer, indexType); - renderPass.drawIndexed(0, builtBuffer.getDrawParameters().indexCount()); - } - } - } + int entryContentLeft = entryLeft + entry.getXOffset() - 2; + int entryContentWidth = entryWidth - entry.getXOffset() + 4; + this.drawSelectionHighlight( + drawContext, + entryContentLeft, + entryTop, + entryContentWidth, + entryHeight, + this.isFocused() ? Colors.WHITE : Colors.GRAY, Colors.BLACK + ); } - entryLeft = this.getRowLeft(); entry.render( drawContext, index, entryTop, entryLeft, - rowWidth, + entryWidth, entryHeight, mouseX, mouseY, @@ -285,6 +247,14 @@ protected void renderList(DrawContext drawContext, int mouseX, int mouseY, float } } + /** + * Version of {@link #drawSelectionHighlight(DrawContext, int, int, int, int, int)} with unconstrained positioning and sizing. + */ + protected void drawSelectionHighlight(DrawContext context, int x, int y, int width, int height, int borderColor, int fillColor) { + context.fill(x, y - 2, x + width, y + height + 2, borderColor); + context.fill(x + 1, y - 1, x + width - 1, y + height + 1, fillColor); + } + public void ensureVisible(ModListEntry entry) { super.ensureVisible(entry); } @@ -354,10 +324,6 @@ public int getRowLeft() { return this.getX() + 6; } - public int getTop() { - return this.getY(); - } - public ModsScreen getParent() { return parent; } diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java index b99179d8..f425b73f 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/UpdateAvailableBadge.java @@ -1,15 +1,13 @@ package com.terraformersmc.modmenu.gui.widget; -import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderLayer; import net.minecraft.util.Identifier; public class UpdateAvailableBadge { private static final Identifier UPDATE_ICON = Identifier.ofVanilla("icon/trial_available"); public static void renderBadge(DrawContext drawContext, int x, int y) { - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - drawContext.drawGuiTexture(RenderLayer::getGuiTextured, UPDATE_ICON, x, y, 8, 8); + drawContext.drawGuiTexture(RenderPipelines.GUI_TEXTURED, UPDATE_ICON, x, y, 8, 8, 0xFFFFFFFF); } } diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java index 8a68c7a2..73565034 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ModListEntry.java @@ -1,26 +1,24 @@ package com.terraformersmc.modmenu.gui.widget.entries; -import com.mojang.blaze3d.opengl.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.gui.widget.ModListWidget; import com.terraformersmc.modmenu.gui.widget.UpdateAvailableBadge; import com.terraformersmc.modmenu.util.DrawingUtil; -import com.terraformersmc.modmenu.util.ModMenuScreenTexts; import com.terraformersmc.modmenu.util.mod.Mod; import com.terraformersmc.modmenu.util.mod.ModBadgeRenderer; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.render.RenderLayer; import net.minecraft.client.texture.NativeImageBackedTexture; import net.minecraft.text.StringVisitable; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.Language; import net.minecraft.util.Util; +import net.minecraft.util.math.ColorHelper; public class ModListEntry extends AlwaysSelectedEntryListWidget.Entry { public static final Identifier UNKNOWN_ICON = Identifier.ofVanilla("textures/misc/unknown_pack.png"); @@ -68,10 +66,19 @@ public void render( DrawingUtil.drawRandomVersionBackground(mod, drawContext, x, y, iconSize, iconSize); } - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - GlStateManager._enableBlend(); - drawContext.drawTexture(RenderLayer::getGuiTextured, this.getIconTexture(), x, y, 0.0F, 0.0F, iconSize, iconSize, iconSize, iconSize); - GlStateManager._disableBlend(); + drawContext.drawTexture( + RenderPipelines.GUI_TEXTURED, + this.getIconTexture(), + x, + y, + 0.0F, + 0.0F, + iconSize, + iconSize, + iconSize, + iconSize, + ColorHelper.getWhite(1.0F) + ); Text name = Text.literal(mod.getTranslatedName()); StringVisitable trimmedName = name; @@ -82,12 +89,11 @@ public void render( trimmedName = StringVisitable.concat(font.trimToWidth(name, maxNameWidth - font.getWidth(ellipsis)), ellipsis); } - drawContext.drawText(font, + drawContext.drawTextWithShadow(font, Language.getInstance().reorder(trimmedName), x + iconSize + 3, y + 1, - 0xFFFFFF, - true + 0xFFFFFFFF ); var updateBadgeXOffset = 0; @@ -116,7 +122,7 @@ public void render( (y + client.textRenderer.fontHeight + 2), rowWidth - iconSize - 7, 2, - 0x808080 + 0xFF808080 ); } else { DrawingUtil.drawWrappedString( @@ -126,7 +132,7 @@ public void render( (y + client.textRenderer.fontHeight + 2), rowWidth - iconSize - 7, 2, - 0x808080 + 0xFF808080 ); } @@ -137,7 +143,7 @@ public void render( boolean hoveringIcon = mouseX - x < iconSize; if (this.list.getParent().modScreenErrors.containsKey(modId)) { drawContext.drawGuiTexture( - RenderLayer::getGuiTextured, + RenderPipelines.GUI_TEXTURED, hoveringIcon ? ERROR_HIGHLIGHTED_ICON : ERROR_ICON, x, y, @@ -146,12 +152,12 @@ public void render( ); if (hoveringIcon) { Throwable e = this.list.getParent().modScreenErrors.get(modId); - this.list.getParent().setTooltip(this.client.textRenderer.wrapLines(ModMenuScreenTexts.configureError(modId, e), 175)); + //this.list.getParent().setTooltip(this.client.textRenderer.wrapLines(ModMenuScreenTexts.configureError(modId, e), 175)); } } else { int v = hoveringIcon ? iconSize : 0; drawContext.drawTexture( - RenderLayer::getGuiTextured, + RenderPipelines.GUI_TEXTURED, MOD_CONFIGURATION_ICON, x, y, @@ -160,7 +166,8 @@ public void render( iconSize, iconSize, textureSize, - textureSize + textureSize, + ColorHelper.getWhite(1.0F) ); } } @@ -195,6 +202,7 @@ public Identifier getIconTexture() { if (this.iconLocation == null) { this.iconLocation = Identifier.of(ModMenu.MOD_ID, mod.getId() + "_icon"); NativeImageBackedTexture icon = mod.getIcon(list.getFabricIconHandler(), 64 * this.client.options.getGuiScale().getValue()); + icon.setFilter(false, false); this.client.getTextureManager().registerTexture(this.iconLocation, icon); } diff --git a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java index 643c0591..0dafd7c6 100644 --- a/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java +++ b/src/main/java/com/terraformersmc/modmenu/gui/widget/entries/ParentEntry.java @@ -1,14 +1,13 @@ package com.terraformersmc.modmenu.gui.widget.entries; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.ModMenu; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.gui.widget.ModListWidget; import com.terraformersmc.modmenu.util.mod.Mod; import com.terraformersmc.modmenu.util.mod.ModSearch; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.render.RenderLayer; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.Util; @@ -100,7 +99,7 @@ public void render( str.asOrderedText(), (int) (childrenBadgeX + (float) childrenBadgeWidth / 2 - (float) childrenWidth / 2), childrenBadgeY + 1, - 0xCACACA, + 0xFFCACACA, false ); @@ -109,9 +108,8 @@ public void render( drawContext.fill(x, y, x + iconSize, y + iconSize, 0xA0909090); int xOffset = list.getParent().showModChildren.contains(getMod().getId()) ? iconSize : 0; int yOffset = hoveringIcon ? iconSize : 0; - RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); drawContext.drawTexture( - RenderLayer::getGuiTextured, + RenderPipelines.GUI_TEXTURED, PARENT_MOD_TEXTURE, x, y, @@ -120,7 +118,8 @@ public void render( iconSize + xOffset, iconSize + yOffset, ModMenuConfig.COMPACT_LIST.getValue() ? (int) (256 / (FULL_ICON_SIZE / (double) COMPACT_ICON_SIZE)) : 256, - ModMenuConfig.COMPACT_LIST.getValue() ? (int) (256 / (FULL_ICON_SIZE / (double) COMPACT_ICON_SIZE)) : 256 + ModMenuConfig.COMPACT_LIST.getValue() ? (int) (256 / (FULL_ICON_SIZE / (double) COMPACT_ICON_SIZE)) : 256, + 0xFFFFFFFF ); } } diff --git a/src/main/java/com/terraformersmc/modmenu/mixin/MixinTitleScreen.java b/src/main/java/com/terraformersmc/modmenu/mixin/MixinTitleScreen.java index 8de8103d..e1068d40 100644 --- a/src/main/java/com/terraformersmc/modmenu/mixin/MixinTitleScreen.java +++ b/src/main/java/com/terraformersmc/modmenu/mixin/MixinTitleScreen.java @@ -21,7 +21,7 @@ private int adjustRealmsHeight(int height) { } } - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Ljava/lang/String;III)I", ordinal = 0)) + @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawTextWithShadow(Lnet/minecraft/client/font/TextRenderer;Ljava/lang/String;III)V", ordinal = 0)) private String onRender(String string) { if (ModMenuConfig.MODIFY_TITLE_SCREEN.getValue() && ModMenuConfig.MOD_COUNT_LOCATION.getValue().isOnTitleScreen()) { String count = ModMenu.getDisplayedModCount(); diff --git a/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java b/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java index a69440a8..c864c188 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java +++ b/src/main/java/com/terraformersmc/modmenu/util/DrawingUtil.java @@ -1,6 +1,5 @@ package com.terraformersmc.modmenu.util; -import com.mojang.blaze3d.systems.RenderSystem; import com.terraformersmc.modmenu.config.ModMenuConfig; import com.terraformersmc.modmenu.util.mod.Mod; import net.fabricmc.api.EnvType; @@ -37,7 +36,6 @@ public static void drawRandomVersionBackground( color = 0xFFDD5656; } - RenderSystem.setShaderColor(1f, 1f, 1f, 1f); drawContext.fill(x, y, x + width, y + height, color); } @@ -71,7 +69,7 @@ public static void drawWrappedString( x1 += wrapWidth - CLIENT.textRenderer.getWidth(line); } - drawContext.drawText(CLIENT.textRenderer, line, x1, y + i * CLIENT.textRenderer.fontHeight, color, true); + drawContext.drawTextWithShadow(CLIENT.textRenderer, line, x1, y + i * CLIENT.textRenderer.fontHeight, color); } } diff --git a/src/main/java/com/terraformersmc/modmenu/util/HttpUtil.java b/src/main/java/com/terraformersmc/modmenu/util/HttpUtil.java index 225c30ba..baef8665 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/HttpUtil.java +++ b/src/main/java/com/terraformersmc/modmenu/util/HttpUtil.java @@ -29,7 +29,7 @@ private static String buildUserAgent() { String loader = ModMenu.RUNNING_QUILT ? "quilt" : "fabric"; var modMenuVersion = getModMenuVersion(); - var minecraftVersion = SharedConstants.getGameVersion().getName(); + var minecraftVersion = SharedConstants.getGameVersion().name(); // -> TerraformersMC/ModMenu/9.1.0 (1.20.3/quilt/development) return "%s/%s (%s/%s%s)".formatted(ModMenu.GITHUB_REF, modMenuVersion, minecraftVersion, loader, env); diff --git a/src/main/java/com/terraformersmc/modmenu/util/UpdateCheckerUtil.java b/src/main/java/com/terraformersmc/modmenu/util/UpdateCheckerUtil.java index 953b07ce..35650dd7 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/UpdateCheckerUtil.java +++ b/src/main/java/com/terraformersmc/modmenu/util/UpdateCheckerUtil.java @@ -226,7 +226,7 @@ private static UpdateChannel getUpdateChannel(String versionType) { } private static @Nullable Map getUpdatedVersions(Collection modHashes) { - String mcVer = SharedConstants.getGameVersion().getName(); + String mcVer = SharedConstants.getGameVersion().name(); List loaders = ModMenu.RUNNING_QUILT ? List.of("fabric", "quilt") : List.of("fabric"); List updateChannels; diff --git a/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java b/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java index ddba44fa..b5bd8ac9 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java +++ b/src/main/java/com/terraformersmc/modmenu/util/mod/Mod.java @@ -138,38 +138,38 @@ default boolean hasUpdate() { enum Badge { LIBRARY( "modmenu.badge.library", - 0xff107454, - 0xff093929, + 0xFF107454, + 0xFF093929, "library" ), CLIENT( "modmenu.badge.clientsideOnly", - 0xff2b4b7c, - 0xff0e2a55, + 0xFF2b4b7c, + 0xFF0e2a55, null ), DEPRECATED( "modmenu.badge.deprecated", - 0xff841426, - 0xff530C17, + 0xFF841426, + 0xFF530C17, "deprecated" ), PATCHWORK_FORGE( "modmenu.badge.forge", - 0xff1f2d42, - 0xff101721, + 0xFF1f2d42, + 0xFF101721, null ), MODPACK( "modmenu.badge.modpack", - 0xff7a2b7c, - 0xff510d54, + 0xFF7a2b7c, + 0xFF510d54, null ), MINECRAFT( "modmenu.badge.minecraft", - 0xff6f6c6a, - 0xff31302f, + 0xFF6f6c6a, + 0xFF31302f, null ); diff --git a/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java b/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java index d94326e8..2c427c67 100644 --- a/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java +++ b/src/main/java/com/terraformersmc/modmenu/util/mod/ModBadgeRenderer.java @@ -35,7 +35,9 @@ public void drawBadge(DrawContext drawContext, Mod.Badge badge, int mouseX, int drawContext, badge.getText().asOrderedText(), badge.getOutlineColor(), - badge.getFillColor() + badge.getFillColor(), + mouseX, + mouseY ); } @@ -43,11 +45,13 @@ public void drawBadge( DrawContext drawContext, OrderedText text, int outlineColor, - int fillColor + int fillColor, + int mouseX, + int mouseY ) { int width = client.textRenderer.getWidth(text) + 6; if (badgeX + width < badgeMax) { - DrawingUtil.drawBadge(drawContext, badgeX, badgeY, width, text, outlineColor, fillColor, 0xCACACA); + DrawingUtil.drawBadge(drawContext, badgeX, badgeY, width, text, outlineColor, fillColor, 0xFFCACACA); badgeX += width + 3; } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f82cc34c..e6d6d714 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -25,7 +25,7 @@ "fabric-key-binding-api-v1": "*", "fabric-lifecycle-events-v1": "*", "fabricloader": ">=0.16.10", - "minecraft": ">=1.21.5-rc.1" + "minecraft": "~1.21.6-rc.1" }, "authors": [ "Prospector",