Skip to content

Commit 439e43f

Browse files
committed
use correct render buffers
categorize helper methods to `util` package
1 parent f71b937 commit 439e43f

File tree

23 files changed

+285
-184
lines changed

23 files changed

+285
-184
lines changed

src/api/java/mcp/mobius/waila/api/WailaHelper.java

Lines changed: 19 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,53 @@
11
package mcp.mobius.waila.api;
22

3-
import java.text.DecimalFormat;
4-
53
import io.netty.buffer.ByteBuf;
6-
import net.minecraft.network.FriendlyByteBuf;
7-
import net.minecraft.network.codec.ByteBufCodecs;
4+
import mcp.mobius.waila.api.util.WCodecs;
5+
import mcp.mobius.waila.api.util.WColors;
6+
import mcp.mobius.waila.api.util.WNumbers;
87
import net.minecraft.network.codec.StreamCodec;
8+
import net.minecraft.util.ARGB;
99
import org.jetbrains.annotations.Nullable;
1010

11+
@Deprecated
1112
public final class WailaHelper {
1213

14+
@Deprecated
1315
public static String suffix(long value) {
14-
if (value == Long.MIN_VALUE) return suffix(Long.MIN_VALUE + 1);
15-
if (value < 0) return "-" + suffix(-value);
16-
if (value < 1000) return Long.toString(value);
17-
18-
var exponent = -1;
19-
long divisor = 0;
20-
21-
for (var decimal : DECIMALS) {
22-
if (value < decimal) break;
23-
exponent++;
24-
divisor = decimal;
25-
}
26-
27-
var truncated = (double) value / divisor;
28-
if (truncated >= 100) truncated = Math.round(truncated);
29-
else if (truncated >= 10) truncated = Math.round(truncated * 10) / 10d;
30-
31-
return SUFFIXED_FORMAT.format(truncated) + "KMGTPE".charAt(exponent);
16+
return WNumbers.suffix(value);
3217
}
3318

19+
@Deprecated
3420
public static int getAlpha(int argb) {
35-
return (argb >> 24) & 0xFF;
21+
return ARGB.alpha(argb);
3622
}
3723

24+
@Deprecated
3825
public static int getRed(int rgb) {
39-
return (rgb >> 16) & 0xFF;
26+
return ARGB.red(rgb);
4027
}
4128

29+
@Deprecated
4230
public static int getGreen(int rgb) {
43-
return (rgb >> 8) & 0xFF;
31+
return ARGB.green(rgb);
4432
}
4533

34+
@Deprecated
4635
public static int getBlue(int rgb) {
47-
return rgb & 0xFF;
36+
return ARGB.blue(rgb);
4837
}
4938

39+
@Deprecated
5040
public static double getLuminance(int rgb) {
51-
return (0.299 * getRed(rgb) + 0.587 * getGreen(rgb) + 0.114 * getBlue(rgb)) / 255.0;
41+
return WColors.luminance(rgb);
5242
}
5343

54-
/**
55-
* @see ByteBufCodecs#optional(StreamCodec)
56-
*/
44+
@Deprecated
5745
public static <B extends ByteBuf, V> StreamCodec<B, @Nullable V> nullable(final StreamCodec<B, V> codec) {
58-
return new StreamCodec<>() {
59-
@Override
60-
@SuppressWarnings("NullableProblems")
61-
public @Nullable V decode(B b) {
62-
return FriendlyByteBuf.readNullable(b, codec);
63-
}
64-
65-
@Override
66-
public void encode(B o, V v) {
67-
FriendlyByteBuf.writeNullable(o, v, codec);
68-
}
69-
};
46+
return WCodecs.nullable(codec);
7047
}
7148

7249
//---------------------------------------------------------------------------------------------------
7350

74-
// @formatter:off
75-
private static final long[] DECIMALS = {
76-
1_000L, // K
77-
1_000_000L, // M
78-
1_000_000_000L, // G
79-
1_000_000_000_000L, // T
80-
1_000_000_000_000_000L, // P
81-
1_000_000_000_000_000_000L // E
82-
};
83-
// @formatter:on
84-
85-
private static final DecimalFormat SUFFIXED_FORMAT = new DecimalFormat("0.##");
86-
8751
private WailaHelper() {
8852
throw new UnsupportedOperationException();
8953
}

src/api/java/mcp/mobius/waila/api/__internal__/IApiService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.Collection;
66
import java.util.List;
77

8-
import com.mojang.blaze3d.vertex.BufferBuilder;
8+
import com.mojang.blaze3d.vertex.VertexConsumer;
99
import mcp.mobius.waila.api.IBlacklistConfig;
1010
import mcp.mobius.waila.api.IData;
1111
import mcp.mobius.waila.api.IInstanceRegistry;
@@ -59,9 +59,9 @@ public interface IApiService {
5959

6060
int getFontColor();
6161

62-
void fillGradient(Matrix4f matrix, BufferBuilder buf, int x, int y, int w, int h, int start, int end);
62+
void fillGradient(Matrix4f matrix, VertexConsumer buf, int x, int y, int w, int h, int start, int end);
6363

64-
void renderRectBorder(Matrix4f matrix, BufferBuilder buf, int x, int y, int w, int h, int s, int gradStart, int gradEnd);
64+
void renderRectBorder(Matrix4f matrix, VertexConsumer buf, int x, int y, int w, int h, int s, int gradStart, int gradEnd);
6565

6666
<T extends ITheme> IThemeType.Builder<T> createThemeTypeBuilder(Class<T> clazz);
6767

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
/**
22
* Internal package, do not touch.
33
*/
4+
@ApiStatus.Internal
45
package mcp.mobius.waila.api.__internal__;
6+
7+
import org.jetbrains.annotations.ApiStatus;

src/api/java/mcp/mobius/waila/api/component/BarComponent.java

Lines changed: 28 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,17 @@
11
package mcp.mobius.waila.api.component;
22

33
import com.mojang.blaze3d.systems.RenderSystem;
4-
import com.mojang.blaze3d.vertex.BufferUploader;
5-
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
6-
import com.mojang.blaze3d.vertex.PoseStack;
7-
import com.mojang.blaze3d.vertex.Tesselator;
8-
import com.mojang.blaze3d.vertex.VertexFormat;
94
import mcp.mobius.waila.api.ITooltipComponent;
105
import mcp.mobius.waila.api.WailaConstants;
11-
import mcp.mobius.waila.api.WailaHelper;
126
import mcp.mobius.waila.api.__internal__.ApiSide;
7+
import mcp.mobius.waila.api.util.WRenders;
138
import net.minecraft.client.DeltaTracker;
149
import net.minecraft.client.Minecraft;
1510
import net.minecraft.client.gui.GuiGraphics;
16-
import net.minecraft.client.renderer.CoreShaders;
11+
import net.minecraft.client.renderer.RenderType;
1712
import net.minecraft.network.chat.CommonComponents;
1813
import net.minecraft.network.chat.Component;
14+
import net.minecraft.util.ARGB;
1915

2016
/**
2117
* Component that renders a colored bar.
@@ -77,50 +73,49 @@ public int getHeight() {
7773

7874
@Override
7975
public void render(GuiGraphics ctx, int x, int y, DeltaTracker delta) {
80-
renderBar(ctx.pose(), x, y, WIDTH, V0_BG, U1, V1_BG, color);
81-
renderBar(ctx.pose(), x, y, WIDTH * ratio, V0_FG, U0 + (UV_W * ratio), V1_FG, color);
76+
renderBar(ctx, x, y, WIDTH, V0_BG, U1, V1_BG, color);
77+
renderBar(ctx, x, y, WIDTH * ratio, V0_FG, U0 + (UV_W * ratio), V1_FG, color);
8278
renderText(ctx, text, x, y);
8379
}
8480

8581
static void renderBar(
86-
PoseStack matrices,
82+
GuiGraphics ctx,
8783
int x, int y, float w,
8884
float v0, float u1, float v1, int tint
8985
) {
90-
matrices.pushPose();
86+
var ps = ctx.pose();
87+
ps.pushPose();
9188

9289
RenderSystem.enableBlend();
9390
RenderSystem.defaultBlendFunc();
94-
RenderSystem.setShader(CoreShaders.POSITION_TEX_COLOR);
95-
RenderSystem.setShaderTexture(0, WailaConstants.COMPONENT_TEXTURE);
9691

97-
var a = WailaHelper.getAlpha(tint);
98-
var r = WailaHelper.getRed(tint);
99-
var g = WailaHelper.getGreen(tint);
100-
var b = WailaHelper.getBlue(tint);
92+
var a = ARGB.alpha(tint);
93+
var r = ARGB.red(tint);
94+
var g = ARGB.green(tint);
95+
var b = ARGB.blue(tint);
10196

102-
var tessellator = Tesselator.getInstance();
103-
var buffer = tessellator.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR);
97+
var buffer = WRenders.buffer(RenderType.guiTextured(WailaConstants.COMPONENT_TEXTURE));
98+
var pose = ps.last().pose();
10499

105-
buffer.addVertex(matrices.last().pose(), x, y + HEIGHT, 0).setUv(U0, v1).setColor(r, g, b, a);
106-
buffer.addVertex(matrices.last().pose(), x + w, y + HEIGHT, 0).setUv(u1, v1).setColor(r, g, b, a);
107-
buffer.addVertex(matrices.last().pose(), x + w, y, 0).setUv(u1, v0).setColor(r, g, b, a);
108-
buffer.addVertex(matrices.last().pose(), x, y, 0).setUv(U0, v0).setColor(r, g, b, a);
100+
buffer.addVertex(pose, x, y + HEIGHT, 0).setUv(U0, v1).setColor(r, g, b, a);
101+
buffer.addVertex(pose, x + w, y + HEIGHT, 0).setUv(u1, v1).setColor(r, g, b, a);
102+
buffer.addVertex(pose, x + w, y, 0).setUv(u1, v0).setColor(r, g, b, a);
103+
buffer.addVertex(pose, x, y, 0).setUv(U0, v0).setColor(r, g, b, a);
109104

110-
BufferUploader.drawWithShader(buffer.buildOrThrow());
111105
RenderSystem.disableBlend();
112-
matrices.popPose();
106+
ps.popPose();
107+
ctx.flush();
113108
}
114109

115110
static void renderText(GuiGraphics ctx, Component text, int x, int y) {
116-
ctx.drawSpecial(bufferSource -> {
117-
var font = Minecraft.getInstance().font;
118-
var textWidth = font.width(text);
119-
var textX = x + Math.max((BarComponent.WIDTH - textWidth) / 2F, 0F);
120-
float textY = y + 2;
121-
122-
font.drawInBatch8xOutline(text.getVisualOrderText(), textX, textY, 0xAAAAAA, 0x292929, ctx.pose().last().pose(), bufferSource, 0xf000f0);
123-
});
111+
var bufferSource = WRenders.bufferSource();
112+
var font = Minecraft.getInstance().font;
113+
var textWidth = font.width(text);
114+
var textX = x + Math.max((BarComponent.WIDTH - textWidth) / 2F, 0F);
115+
float textY = y + 2;
116+
117+
font.drawInBatch8xOutline(text.getVisualOrderText(), textX, textY, 0xAAAAAA, 0x292929, ctx.pose().last().pose(), bufferSource, 0xf000f0);
118+
ctx.flush();
124119
}
125120

126121
}

src/api/java/mcp/mobius/waila/api/component/ItemComponent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package mcp.mobius.waila.api.component;
22

33
import mcp.mobius.waila.api.ITooltipComponent;
4-
import mcp.mobius.waila.api.WailaHelper;
54
import mcp.mobius.waila.api.__internal__.ApiSide;
5+
import mcp.mobius.waila.api.util.WNumbers;
66
import net.minecraft.client.DeltaTracker;
77
import net.minecraft.client.Minecraft;
88
import net.minecraft.client.gui.Font;
@@ -52,7 +52,7 @@ static void renderItemDecorations(GuiGraphics ctx, ItemStack stack, int x, int y
5252
ctx.renderItemDecorations(client.font, stack, x + 1, y + 1, "");
5353
if (count <= 1) return;
5454

55-
var countText = WailaHelper.suffix(count);
55+
var countText = WNumbers.suffix(count);
5656
var actualW = client.font.width(countText);
5757
var scale = (actualW <= 16) ? 1f : 16f / actualW;
5858

src/api/java/mcp/mobius/waila/api/component/NamedItemComponent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package mcp.mobius.waila.api.component;
22

33
import mcp.mobius.waila.api.ITooltipComponent;
4-
import mcp.mobius.waila.api.WailaHelper;
54
import mcp.mobius.waila.api.__internal__.ApiSide;
65
import mcp.mobius.waila.api.__internal__.IApiService;
6+
import mcp.mobius.waila.api.util.WNumbers;
77
import net.minecraft.client.DeltaTracker;
88
import net.minecraft.client.Minecraft;
99
import net.minecraft.client.gui.Font;
@@ -24,7 +24,7 @@ public NamedItemComponent(ItemStack stack) {
2424

2525
var count = stack.getCount();
2626
var name = stack.getHoverName().getString();
27-
this.label = count > 1 ? WailaHelper.suffix(count) + " " + name : name;
27+
this.label = count > 1 ? WNumbers.suffix(count) + " " + name : name;
2828
}
2929

3030
public NamedItemComponent(ItemLike item) {

src/api/java/mcp/mobius/waila/api/component/SpriteBarComponent.java

Lines changed: 20 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
package mcp.mobius.waila.api.component;
22

33
import com.mojang.blaze3d.systems.RenderSystem;
4-
import com.mojang.blaze3d.vertex.BufferBuilder;
5-
import com.mojang.blaze3d.vertex.BufferUploader;
6-
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
7-
import com.mojang.blaze3d.vertex.Tesselator;
8-
import com.mojang.blaze3d.vertex.VertexFormat;
4+
import com.mojang.blaze3d.vertex.VertexConsumer;
95
import mcp.mobius.waila.api.ITooltipComponent;
10-
import mcp.mobius.waila.api.WailaHelper;
6+
import mcp.mobius.waila.api.util.WRenders;
117
import net.minecraft.client.DeltaTracker;
128
import net.minecraft.client.Minecraft;
139
import net.minecraft.client.gui.GuiGraphics;
14-
import net.minecraft.client.renderer.CoreShaders;
10+
import net.minecraft.client.renderer.RenderType;
1511
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
1612
import net.minecraft.network.chat.Component;
1713
import net.minecraft.resources.ResourceLocation;
14+
import net.minecraft.util.ARGB;
1815

1916
/**
2017
* Component that renders a bar with a texture as the foreground.
@@ -58,45 +55,44 @@ public int getHeight() {
5855

5956
@Override
6057
public void render(GuiGraphics ctx, int x, int y, DeltaTracker delta) {
61-
var matrices = ctx.pose();
58+
var ps = ctx.pose();
6259

63-
BarComponent.renderBar(matrices, x, y, BarComponent.WIDTH, BarComponent.V0_BG, BarComponent.U1, BarComponent.V1_BG, 0xFFAAAAAA);
60+
BarComponent.renderBar(ctx, x, y, BarComponent.WIDTH, BarComponent.V0_BG, BarComponent.U1, BarComponent.V1_BG, 0xFFAAAAAA);
6461

6562
var mx = (int) (x + BarComponent.WIDTH * ratio);
6663
var my = y + BarComponent.HEIGHT;
6764
ctx.enableScissor(x + 1, y + 1, mx - 1, my - 1);
6865

69-
matrices.pushPose();
66+
ps.pushPose();
7067
RenderSystem.enableBlend();
7168
RenderSystem.defaultBlendFunc();
72-
RenderSystem.setShader(CoreShaders.POSITION_TEX_COLOR);
73-
RenderSystem.setShaderTexture(0, texture);
7469

75-
var a = WailaHelper.getAlpha(spriteTint);
76-
var r = WailaHelper.getRed(spriteTint);
77-
var g = WailaHelper.getGreen(spriteTint);
78-
var b = WailaHelper.getBlue(spriteTint);
70+
var a = ARGB.alpha(spriteTint);
71+
var r = ARGB.red(spriteTint);
72+
var g = ARGB.green(spriteTint);
73+
var b = ARGB.blue(spriteTint);
7974

80-
BufferBuilder buffer = null;
75+
VertexConsumer buffer = null;
76+
var pose = ps.last().pose();
8177

8278
for (var px1 = x; px1 < mx; px1 += regionWidth) {
8379
var px2 = px1 + regionWidth;
8480

8581
for (var py1 = y; py1 < my; py1 += regionHeight) {
8682
var py2 = py1 + regionHeight;
8783

88-
if (buffer == null) buffer = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX_COLOR);
89-
buffer.addVertex(matrices.last().pose(), px1, py2, 0).setUv(u0, v1).setColor(r, g, b, a);
90-
buffer.addVertex(matrices.last().pose(), px2, py2, 0).setUv(u1, v1).setColor(r, g, b, a);
91-
buffer.addVertex(matrices.last().pose(), px2, py1, 0).setUv(u1, v0).setColor(r, g, b, a);
92-
buffer.addVertex(matrices.last().pose(), px1, py1, 0).setUv(u0, v0).setColor(r, g, b, a);
84+
if (buffer == null) buffer = WRenders.buffer(RenderType.guiTextured(texture));
85+
buffer.addVertex(pose, px1, py2, 0).setUv(u0, v1).setColor(r, g, b, a);
86+
buffer.addVertex(pose, px2, py2, 0).setUv(u1, v1).setColor(r, g, b, a);
87+
buffer.addVertex(pose, px2, py1, 0).setUv(u1, v0).setColor(r, g, b, a);
88+
buffer.addVertex(pose, px1, py1, 0).setUv(u0, v0).setColor(r, g, b, a);
9389
}
9490
}
9591

96-
if (buffer != null) BufferUploader.drawWithShader(buffer.buildOrThrow());
9792
RenderSystem.disableBlend();
98-
matrices.popPose();
93+
ps.popPose();
9994
ctx.disableScissor();
95+
ctx.flush();
10096

10197
BarComponent.renderText(ctx, text, x, y);
10298
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package mcp.mobius.waila.api.util;
2+
3+
import io.netty.buffer.ByteBuf;
4+
import net.minecraft.network.FriendlyByteBuf;
5+
import net.minecraft.network.codec.StreamCodec;
6+
import org.jetbrains.annotations.NotNull;
7+
import org.jetbrains.annotations.Nullable;
8+
9+
public final class WCodecs {
10+
11+
public static <B extends ByteBuf, V> @NotNull StreamCodec<B, @Nullable V> nullable(StreamCodec<B, V> codec) {
12+
return new StreamCodec<>() {
13+
@Override
14+
@SuppressWarnings("NullableProblems")
15+
public @Nullable V decode(B b) {
16+
return FriendlyByteBuf.readNullable(b, codec);
17+
}
18+
19+
@Override
20+
public void encode(B o, V v) {
21+
FriendlyByteBuf.writeNullable(o, v, codec);
22+
}
23+
};
24+
}
25+
26+
private WCodecs() {
27+
}
28+
29+
}

0 commit comments

Comments
 (0)